WHAT IS OUR PROJECT?
Multi-Agent Search and Rescue is a ROS python implementation of a search-and-rescue algorithm running on several robots simultaneously. The system deploys multiple Neato robots onto a given map where they must "search" for an object/person to be rescued. Through a high-functioning, centralized brain node that gives each robot commands, each Neato can take on a separate part of the map to traverse, allowing for a faster and more efficient method of searching and rescuing.
Search-and-Rescue can be time consuming, resource intensive, and dangerous especially for human beings. The same can be said if a single robot were deployed. Given that the stakes are high in a situation where search-and-rescue is needed, our deep interest in swarm robotics and implementing something meaningful had motivated us to take on this challenge.
The system consists of three primary components: the map server generator, the brain node, and the robot nodes. A launch file was also created to bring these components together cohesively.
THE SYSTEM
The map generator file establishes a map server that generates maps and creates walls and obstacles as desired. The map is depicted as a grayscale image, with black pixels representing objects and walls. A corresponding YAML file is also created to cite more details about the map/image, such as resolution. The maps that are generated are used in the brain node to parse and split for robots to traverse.
The brain node acts as a "centralized "brain" for each robot. It uses a multitude of subscribers and publishers to each individual robot as a form of communication: sending commands and receiving information. The brain is subscribed to each robot's "odom" topic and receives information on each robot's current pose in its own odometry frame. It can use this information to track where in the map frame each robot is by computing its transforms, which is useful for scaling up the current system in future iterations. Additionally, it publishes to each robot's "map_path" topic to send each robot information about what their map bounds are, or what (x,y) limits they cannot move past in reference to the odometry frame. This information is known since the map is loaded into the brain node when it is spun. This gives the brain full access to information about the map, and it uses the map visualization to figure out the map's dimensions and split it amongst the available robots.
The agent node may be used to establish multiple robots at the same time. Each robot node that is created will subscribe to a corresponding odom topic to receive information about its odometry pose, as well as an individual map_path topic from which it will receive information from the brain about its own map bounds. It publishes to its own cmd_vel topic to move itself. The robot has functionality to move in any direction it wants. It uses a state machine to choose which movement it will go, as well as PID control to move itself as accurately as it can with only is odometry.
The launch file is a central point from which to launch the project. Part of creating multi-agent systems is creating efficient ways to instantiate the necessary software to communicate with all of these different agents. Our launch file makes it so that our entire system can run in one place, removing the need to open multiple terminals or run a series of lengthy commands before communicating with the robot.
DEMO VIDEOS