I knew that Lego have done some robotics kits. You would program a big brick, connect motors and sensors and start the fun. Well, buying the kit at Brazil is pretty expensive: US$ 1000 by today's exchange rate. I found that if I import directly from Amazon I could get it for US$ 600, import taxes included !
Okay, here is my first robot. It's the basic starter model. I program it to avoid bumping into objects.
My second Robot was the ColorSorter. That one also comes with the kit.
The kit comes with a NXT-G, a graphical programing environment based on LabView from National Instruments. When I said Graphical, I mean you have to drag blocks and make connection to program. See how hard is only to implement the modulo function :
It is not only hard to people used to program by "typing code", but it also generates big and sluggish programs. And program size really matters as memory is scarce. The alternative I found was Bricxcc, a Windows IDE for NXC ( Not eXactly C) , a C like language to programming the NXT2.0.
Here is the code for the Color Sorter Robot above. It is a direct translation of the NXT-G code that comes with the kit. I haven't done any improvements to make the robot smatter.
Okay, here is my first robot. It's the basic starter model. I program it to avoid bumping into objects.
The kit comes with a NXT-G, a graphical programing environment based on LabView from National Instruments. When I said Graphical, I mean you have to drag blocks and make connection to program. See how hard is only to implement the modulo function :
It is not only hard to people used to program by "typing code", but it also generates big and sluggish programs. And program size really matters as memory is scarce. The alternative I found was Bricxcc, a Windows IDE for NXC ( Not eXactly C) , a C like language to programming the NXT2.0.
Here is the code for the Color Sorter Robot above. It is a direct translation of the NXT-G code that comes with the kit. I haven't done any improvements to make the robot smatter.
/* Lego color sorter Attempt to convert from NXT-G to NXC */ #define COLOR_SENSOR SENSOR_3 #define TOUCH_SENSOR1 SENSOR_2 #define TOUCH_SENSOR2 SENSOR_1 #define PRESSED 1 #define NOT_PRESSED 0 #define UNTIL_BUMPED(x) until((x) == PRESSED);until((x) == NOT_PRESSED); enum color_t { BLUE = INPUT_BLUECOLOR, RED = INPUT_REDCOLOR, YELLOW = INPUT_YELLOWCOLOR, GREEN = INPUT_GREENCOLOR }; sub initializeSensors(){ //Color Sensor SetSensorColorFull(IN_3); //Touch sensor 1 SetSensorTouch(IN_2); //Touch sensor 2 SetSensorTouch(IN_1); } task main(){ initializeSensors(); OnFwd(OUT_C,50); until(TOUCH_SENSOR1 == PRESSED); RotateMotor(OUT_C,50,55); while(true){ color_t color = COLOR_SENSOR; switch(color){ case BLUE: //PlaySound wait for completion OnFwd(OUT_B,50); UNTIL_BUMPED(TOUCH_SENSOR2); RotateMotor(OUT_B,50,0.8*360); Wait(MS_300); break; case RED: //PlaySound RotateMotor(OUT_C,40,90); OnFwd(OUT_B,50); UNTIL_BUMPED(TOUCH_SENSOR2); RotateMotor(OUT_B,50,0.8*360); RotateMotor(OUT_C,40,270); break; case YELLOW: //PlaySound RotateMotor(OUT_C,40,180); OnFwd(OUT_B,50); UNTIL_BUMPED(TOUCH_SENSOR2); RotateMotor(OUT_B,50,0.8*360); RotateMotor(OUT_C,40,180); break; case GREEN: //PlaySound RotateMotor(OUT_C,40,270); OnFwd(OUT_B,50); UNTIL_BUMPED(TOUCH_SENSOR2); RotateMotor(OUT_B,50,0.8*360); RotateMotor(OUT_C,40,90); break; default: //Play Sound - try again OnFwd(OUT_B,50); UNTIL_BUMPED(TOUCH_SENSOR2); RotateMotor(OUT_B,50,0.8*360); } } }
No comments:
Post a Comment