While interning at Technion’s Cognitive Robotics Lab, I developed Multibot, a ROS package to aid in the simultaneous simulation of multiple Turtlebots. The research conducted at the lab was primarily focused on robot planning algorithms and models, and I was initially tasked to design and implement a navigation system for the Turtlebots to navigate a city street-like environment, utilizing a system of social laws to ensure safe operation. However, when I arrived for my second day at work, I was informed that the one other engineer who worked with the Turtlebots, and had given me my initial training the day before, had a heart attack and was recovering in the hospital. Since he was in the process of modifying the robots, several of them were non-functioning, and I was instructed to pursue my project in simulation instead. I was usually alone in the lab, however occasionally several graduate students would stop by and offer some helpful advice. After figuring out the basics of ROS, and writing some nodes in Python, I eventually was able to simulate a single Turtlebot in Gazebo, and visualize it sensor data in rviz. After this I focused on building both a virtual street environment to maneuver the robot, and develop a navigation stack that allowed the bot to autonomously move from one address to another while obeying traffic laws. This involved multiple parts: SLAM was used to localize the robot on the navigation map, and avoid barriers, while an auxiliary map server was created containing information on proper lanes of travel, allowing the robot to plan its path in accordance to the rules of the road. Additionally, I wrote multiple programs that created annotated maps on the fly, allowing the auxiliary map server to be used with the rest of the navigation stack.
While this system worked well for a single robot, I had no means of simulating multiple robots in the same environment, while simultaneously viewing their sensor data within a single rviz process. One of the grad students at the lab had previously worked on creating a package to implement multi robot simulation, however it had been difficult, and it no longer worked due to recent updates in ROS. For the rest of my internship, I directed my efforts to creating a new package to allow for multi robot simulation in Gazebo, and visualization in rviz. It proved to be quite difficult, as the available ROS documentation was abysmal, so much of the time was spent reverse engineering the current system for launching the simulation of a single robot, before then creating a package to work with multiple robots. After I had finally got it to work, I spent the last of my time writing extensive documentation for the package, so that hopefully it will be useful to others in time to come, and may spare them some of the pain and frustration I experienced.