The School of Computer Science at Carnegie Mellon University is organizing Opportunities for Undergraduate Research in Computer Science (OurCS), which is a "3 day workshop [that] is research focused and will provide opportunities for undergraduate women from the USA and around the globe to work on exploratory problems in teams led by researchers from industry and academia" .
As part of this event, we are using NXTs with Xbee radios attached, as part of a multi-robot communication research opportunity for the undergraduates participating in OurCS.
From this exercise, we aim to:
- verify the communication features necessary in ROBOTC for the FIRE project
- test-run possible syllabus in multi-robot communication
We have uploaded a short video showing the students' progress during the OurCS event:
We have constructed 3 Lego NXT robots, as shown below.
Each robot comes with a differential drive, and a "hand" that can be rotated.
Robot capabilities provided for the students
These communication functions are available in ROBOTC as an included .h file:
- retVal = Receive(isASCII)
- GetStringFromBuffer(retVal, stringReceived)
These functions were coded and calibrated, so that the students can perform motion more easily on the robots:
- turn(angle, speed)
- straight(distance, speed)
Lesson 1 - Single-robot actions
The students had varying levels of experience with robots, and none had worked with multiple robot. So, we had to first introduce them to the NXTs and ROBOTC. We had a small sample program of a robot performing a sequence of actions using turn and straight.
- Components of a robot: motors, sensors, encoders
- Programming a single robot
- Basics of ROBOTC
- Controlling the motors
- Switching them on and off
- Timing the control or using encoders
- The motion primitives we provided - turn and straight
- Create a single robot motion using a sequence of actions
- Create a new motion primitive
The students were tasked to create a sequence of actions on a robot using the 2 provided motion primitives. As this was part of the OurCS event, the overall theme of the robot's actions had to match the script that the multi-robot production was going to have. Next, the students created a new motion primitive, moving in an arc.
Lesson 2 - Sending/Receiving strings
Now that the students had an idea of single-robot motion, we introduced them to multi-robot communication. We had a small sample program of 2 robots that took turns executing actions:
- Basics of multi-robot communication
- Radios can transmit and receive messages
- Messages can be treated as strings
- Demo: 2 robots taking turns (see video above)
- Programming multi-robot communication
- 2 functions in ROBOTC were created:
- SendString(string toSend)
- WaitForString(string toWait)
- A puppet-master robot was provided to send strings
- 2 functions in ROBOTC were created:
- Create a single-robot behavior that waits for commands from the puppet-master
- Create a sequence of motions on 2 robots, where they take turns by sending and receiving strings
Lesson 3 - Common Language
After learning about basic multi-robot communication, and that robots can take turns by sending and waiting for strings, we went on to teach them the concept of a common language in multi-robot communication.
- Multi-robot communication involves a common language between the robots, so that they understand the meaning of the messages.
- Besides sending and waiting for generic strings, the messages can represent actions.
- Create a sequence of single-robot actions, and a common language to refer to the actions.
- Create a multi-robot behaviors, where one robot sends actions to the other, so that both perform the same action together.
Putting it all together
Now that the students had completed the lessons, they had to put everything together as part of a multi-robot stage production, involving both NXTs and NAO humanoid robots. A video of OurCS and the lessons the students learned can be seen below: