We used ROBOTC, a progamming language that is a subset of C that has been adapted for robot programming. The benefit of using ROBOTC was that the same code could be compiled and downloaded to the different platforms without much (or any) changes. Since we were interested in multi-robot communication, it was essential that the robots were able to communicate. We used XBee radios for communication among the robots, and to a PC if necessary.
We created a series of lessons, that each focused on a critical aspect of multi-robot communication. The details are available here, and below is a short summary of each lesson:
- Common language - in order for robots to communicate, they need to speak the same language and take turns.
- Targeted communication - some information should be broadcast to everyone, while other information is meant for a specific robot.
- Consistent messages - messages between robots can get dropped from time to time.
- Mapping messages to actions - besides information, communication can be used to send actions to execute
- Parameterized actions - using parameterized actions reduces the number of unique "words" in the library, e.g., turn(x) instead of turn90, turn45, etc
- Sequence of actions - a sequence of actions can be sent at once, instead of sending a single action, waiting for the action to be executed, and then sending the next action.
- Macro actions - sequences of actions can be grouped into "macro actions", which expands the robot-to-robot language using only a fixed set of basic actions.
- Parameterized macro actions - similar to parameterized actions, macro actions can also accept parameters to be more general.
Here are some videos developed during the FIRE project to demonstrate the multi-robot communication concepts:
Every year, the School of Computer Science (SCS) at Carnegie Mellon University holds a workshop called Opportunities for Undergraduate Research in Computer Science (OurCS), where undergraduate women from around the world spend 3 days at CMU, learning about research opportunities, life in graduate school, and the perspectives of faculty and students.
In 2011, we led a group of these students in our lab. Some of them worked on the NAO humanoid robots and some worked on the NXTs. The overall theme was for the students to create a multi-robot stage performance using both types of robots. The students using the NXTs went through some of the multi-robot communication lessons listed above, in addition to learning how to program a robot (the students had experience in CS but not all had worked with robots before the workshop). Below is a video showing the students who worked on the NXTs:
Here is a longer video showing the work done by all the undergraduate students working in our lab during OurCS, and the final presentation they gave: