Watch this space for important updates:
The Robotics Institute is an academically diverse place; the truth is, sometimes people can spend quite a bit of time here without getting their hands dirty working with real robots. To address this, we present the second annual Immigration Course Robotics Competition.
Working in teams of three, you will be presented with a task which you must design and build a robot to solve. We will be using Lego Mindstorms with the RCX block for robot control. Programming will be done with the NQC programming language.
When forming groups, we will try to balance out individual specialties: ideally, each group should contain at least one experienced programmer as well someone who is mechanically inclined (or at least has experience with Legos).
Your robot has been stranded on a floating platform in the South Pacific, and needs to cross to a nearby platform in order to acquire better satellite TV reception. Unfortunately, the surrounding water is infested with robot-eating sharks! Your task is to help your robot construct a pontoon bridge in order to safely cross the gap.
Your group will have access to two 18"x36" foam platforms as well as a 6"x6" foam block which can be used to bridge the 7" gap. Using your mindstorms kits, you must design, build, and program a robot which can autonomously pick up the block, drop it in the gap, and cross between the two platforms.
Fortunately, both the platforms and blocks are instrumented with colored stripes which can be used along with Lego light sensors to guide the robot into position for pickup, dropping, and gap crossing.
You may not use any components except those provided in your kit (a few extra kits may be available for a few extra parts).
You may use another development environment besides NQC if you prefer, but you must use a single RCX brick for control.
Judges will be scoring entries using the following criteria:
Overall times to complete the crossing (defined as robot being entirely on the second platform) will be used as a tiebreaker when scores are equal.
Scoring will be based on the first successful run out of three attempts; if any part of your robot touches the floor, the attempt will be invalidated due to deadly shark attacks.
Your robot will start with the center of its drive axis at a random position no further than 3" from the centerline of the platform, facing the back wall.
If your robot breaks during an attempt, you may repair it before the next attempt but you must not make design improvements after the competition tests have started.
Teams which successfully cross the 7" gap will be eligible for a bonus round involving multiple blocks and a larger gap.
The organizers' decisions are final.
The Lego motors are actually quite powerful little geared motors (although they do have plenty of inertia). The RCX commands the motors using an H-bridge motor controller. This means that a motor can be in one of four states: forward and backward (obvious), locked, or floating. A locked motor uses electricity to actively resist motion, whereas a floating motor is only slowed by friction. You can also program the RCX brick to change each motor's duty cycle to change speeds without totally stopping or floating the motors.
We have three types of lego sensors: rotation sensors, light sensors, and touch sensors. If the light sensors are mounted close to a surface (such as our newsprint), they can distinguish between different colors (like the two tones on the platforms and blocks). The light sensors are more invariant to changes in natural lighting when they are mounted closer to the paper or underneath the shadow of the robot.
Don't forget to tell the NQC what kinds of sensors you are using when you write your program.
SetSensorType(SENSOR_1, SENSOR_TYPE_LIGHT);
SetSensorType(SENSOR_1, SENSOR_TYPE_ROTATION);
SetSensorType(SENSOR_1, SENSOR_TYPE_TOUCH);
This is just like your bicycle or your car. Remember: small gear driving a big gear gives high torque, low speed. Big gear driving a little gear gives low torque, high speed. Also, don't overlook belts and pulleys for doing various tasks.
The reference design below features an excellent gripper design by Jason Geist. The gripper is quite controllable, but may rip itself apart if you drive it past its mechanical limits. In order to make sure the motor stalls out instead of breaking the robot, make sure you set the motor to have a low duty cycle:
SetPower(OUT_A, OUT_LOW);
Because this is a manipulation task, your team will need to pay some attention to weight and balance. If your design seems to be unable to move around the foam block, or if you have trouble crossing over the gap, try redistributing the weight of your robot, relocating casters or skids, or fiddling with motor speeds. Also, feel free to ask an organizer for adivce.
Lego construction for robots might be a little bit different than how you use to build houses or spaceships with Legos as a kid. The main thing to remember is that it's usually better to assemble rigid frames of pegged-together Technic-style pieces than it is to simply stack Legos together using the normal Lego adhesion style (see an excellent introduction to the principles of good Lego Design and the definitive Art of LEGO Design by Fred Martin). Probably the most popular design is the differential-drive robot -- the robot described below is differential-drive.
Here are instructions for building a simple differential drive robot with gripper attachment. Even if you don't want to build this particular robot, you might want to crib the gripper design.
This example code demonstrates a basic approach to solving the task in NQC.