Pay attention to the comments. Spike is powered by bluetooth/irc/a mac and a nxt brick. Yeah that's right, I have the world's most expensive remote control scorpion... what of it. Another video coming up soon...but until then, here's some code. Oh and the reason his attack lacked volitility, is because if you retract/plunge and you have left over ticks, the bot knows, so you have to even the odds, to get full power again. What I mean is say you give a motor a speed of 100 and 1000 ticks, but it only can go 50 ticks, because it runs into something, well it remembers there are 950 ticks owed, so until it gets to move those, it will have problems, trying to go the reverse way etc..
#put your dir to perl here
#with the exception of warnings and strict all of these pm's have to be installed
#I installed the MacBlueComm one seperately by dropping it in the appropriate dir
use Sys::Hostname;
use Net::IRC;
use strict;
use warnings;
use LEGO::NXT;
use LEGO::NXT::Constants qw(:DEFAULT);
use LEGO::NXT::MacBlueComm;
my $host = hostname();
my $capsule = int(rand(99));
my $hoster = 'nxtbot'.$capsule;
my $irc = new Net::IRC;
my $dev = new LEGO::NXT::MacBlueComm('/dev/tty.NXT-DevB-1');
my $bt = new LEGO::NXT( $dev );
my $speed = 100;
my $tachoticks = 1000;
my $tailFtac = 1000;
my $tailBtac = 1000;
my $tailMove = "tail";
my $tailRetract = "retract";
my $tailSpeed = 100;
my $tailBSpeed = -100;
my $conn = $irc->newconn(
#CHANGE THIS SERVER TO THE ONE YOU WANT TO USE
Server => shift || 'irc.malvager.com',
Port => shift || '6667',
Nick => $hoster,
Ircname => 'I like to greet!',
Username => 'fucker'
);
# We're going to add this to the conn hash so we know what channel we
# want to operate in.
#CHANGE THIS CHANNEL TO YOUR OWN
$conn->{channel} = shift || '#nxt';
sub on_connect {
# shift in our connection object that is passed automatically
my $conn = shift;
# when we connect, join our channel and greet it
$conn->join($conn->{channel});
$conn->privmsg($conn->{channel}, 'Hello everyone!');
$conn->{connected} = 1;
}
sub on_join {
# get our connection object and the event object, which is passed
# with this event automatically
my ($conn, $event) = @_;
# this is the nick that just joined
my $nick = $event->{nick};
# say hello to the nick in public
$conn->privmsg($conn->{channel}, "Fuck You, $nick!");
}
sub on_part {
# pretty much the same as above
my ($conn, $event) = @_;
my $nick = $event->{nick};
$conn->privmsg($conn->{channel}, "Such a dick, $nick!");
}
sub on_msg {
my ($conn, $event) = @_;
my $text = $event->{args}[0];
#If tail is said, move tail, if retract is said move tail back, anything else move robot forward
if($text eq $tailMove){
$bt->set_output_state( $NXT_NORET, $NXT_MOTOR_A, $tailSpeed, $NXT_MOTOR_ON|$NXT_REGULATED, $NXT_REGULATION_MODE_MOTOR_SPEED, 0, $NXT_MOTOR_RUN_STATE_RUNNING, $tailFtac );
}elsif($text eq $tailRetract)
{
$bt->set_output_state( $NXT_NORET, $NXT_MOTOR_A, $tailBSpeed, $NXT_MOTOR_ON|$NXT_REGULATED, $NXT_REGULATION_MODE_MOTOR_SPEED, 0, $NXT_MOTOR_RUN_STATE_RUNNING, $tailBtac );
}
else
{
$bt->set_output_state( $NXT_NORET, $NXT_MOTOR_B, $speed, $NXT_MOTOR_ON|$NXT_REGULATED, $NXT_REGULATION_MODE_MOTOR_SPEED, 0, $NXT_MOTOR_RUN_STATE_RUNNING, $tachoticks );
$bt->set_output_state( $NXT_NORET, $NXT_MOTOR_C, $speed, $NXT_MOTOR_ON|$NXT_REGULATED, $NXT_REGULATION_MODE_MOTOR_SPEED, 0, $NXT_MOTOR_RUN_STATE_RUNNING, $tachoticks );
$bt->keep_alive($NXT_NORET);
}
}
sub on_public {
# $event->{to}[0] is the channel where this was said
}
$conn->add_handler('public', \&on_public);
$conn->add_handler('msg', \&on_msg);
$conn->add_handler('join', \&on_join);
$conn->add_handler('part', \&on_part);
# The end of MOTD (message of the day), numbered 376 signifies we've connect
$conn->add_handler('376', \&on_connect);
$irc->start();
Tuesday, February 10, 2009
Spike attacks pillow, in a slow lame way, I blame lego, spike is powered by perl
Labels:
bot,
hacker art,
hacker culture,
lego culture,
lego::nxt,
nxt mindstorm,
perl
Subscribe to:
Post Comments (Atom)
1 comment:
About the video, I saw only your arm...
Try a better video next time with more information about the commands and program. I think it´s a good idea.
I´m trying to do somethink like that.
Good look!
Post a Comment