/tuw_multi_robot

Primary LanguageC++BSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

tuw_multi_robot

200 Robots in stage

This repository includes ros packages to plan routes for multiple robots on a search graph. It creates a search graph out of a pixel map and tries to find a path for multiple robots using an extended approach for prioritized planning. The inputs are the tuw_multi_robot_msgs/RobotInfo messages which include the robots pose, the map and the desired goal poses. The output are multiple synchronized routes given to the individual robots.

Installation

Have a look at the INSTALL.md file

Demos / Tutorials

Have a look at the tuw_multi_robot_demo/README.md file

Packages

  • tuw_multi_robot_ctrl
  • tuw_multi_robot_demo
  • tuw_multi_robot_goal_generator
  • tuw_multi_robot_local_behavior_controller
  • tuw_multi_robot_router
  • tuw_multi_robot_rviz
  • tuw_order_planner
  • tuw_rqt_ordermanager
  • tuw_voronoi_graph

System overview

200 Robots in stage

This figure represents the current state and planned developments on the tuw_multi_robot framework. The framework is designed to cover all tools needed for an automated delivery system with autonomous vehicles. The current state of the system allows one to set goals for multiple vehicles using RViz, a configuration file, or an order mangement system which is capable to assign vehicles for specific deliveries and generates goals for the multi robot route planner. The green boxes show already existing modules while the red boxes are not yet implmented/released. The system provides a simple local motion controller for all robots, which allows a high number (> 100) of vehicles to be controlled in real time using stage. Furthermore, the design allows the usage of existing individual controllers such as DWA implmented in move_base.

tuw_multi_robot_demo

Contains launch and config files to run a sample demo.

roslaunch tuw_multi_robot_demo demo.launch room:=cave  nr_of_robots:=3 
roslaunch tuw_multi_robot_demo demo.launch room:=warehouse032  nr_of_robots:=14 
roslaunch tuw_multi_robot_demo demo.launch room:=warehouse200  nr_of_robots:=50 

tuw_multi_robot_goal_generator

Using this pkg one can generate, save and read goal lists. The random goal generation needs a running map publisher in order to generate valid goals.

# for cave with 3 robots
rosrun tuw_multi_robot_goal_generator goals_random _nr_of_robots:=3 _distance_boundary:=0.6 _distance_to_map_border:=0.2 _nr_of_avaliable_robots:=3
# for warehouse032 with 14 robots
rosrun tuw_multi_robot_goal_generator goals_random _nr_of_robots:=32 _distance_boundary:=0.6 _distance_to_map_border:=0.2 _nr_of_avaliable_robots:=14
# for warehouse200 with 50 robots
rosrun tuw_multi_robot_goal_generator goals_random _nr_of_robots:=200 _distance_boundary:=0.6 _distance_to_map_border:=0.2 _nr_of_avaliable_robots:=50

tuw_voronoi_graph

This package includes a voronoi-graph-generator, a dxf-to-graph-node and a segment-to-graph node for creating search graphs for the multi robot router.

The voronoi-graph-generator-node receives a pixel map (occupancy_grid) and converts it into a voronoi graph describing the original map. This graph is automatically generated or loaded from a cache folder if saved. Additionally the node can load specific graphs saved in a folder.

voronoi-graph

The voronoi-dxf-to-graph takes a dxf file as input containing the scaled and transformed map and any number of lines arcs and circles. These lines arcs and circles are converted to a graph and saved to a specific location.

Librecad

The voronoi-segment-to-graph-node takes a segment file with predefined segments as input and converts it to a graph, which is published afterwards.

The graph-generator-node receives a grid_map like the one published from voronoi-map-generator-node and converts it into a graph message for use in tuw_multi_robot_route_planner.

tuw_multi_robot_router

The tuw_multi_robot_router is a Multi Robot Route Planner, which subscribes to tuw_multi_robot_msgs/RobotInfo messages, to the map/graph published from the tuw_voronoi_graph package, and to the tuw_multi_robot_msgs/RobotGoalsArray message.

The MRRP uses a prioritized planning approach to find the robots routes. Additionally, there are a Priority and a Speed Rescheduler as well as a Collision resolver integrated to solve special scenarios not solvable by standard prioritized planning approaches. Since the results generated for these scenarios are interdependent, the given routes have to be executed in a synchronized fashion. Therefore, the Router publishes a tuw_multi_robot_msgs/Route containing preconditions, when a robot is allowed to enter a segment. Additionally a unsynchronized version via nav_msgs/Path is published for every robot. The algorithm is documented in the master thesis [2] and published at IROS [1].

tuw_multi_robot_rviz

Presents rviz plugins to set goal positions for the planner and a tool to visualize generated graphs.

rviz plugin

tuw_multi_robot_ctrl

A simple multi robot controller using tuw_multi_robot_msgs/Route messages as input, which are used to execute the path in a synchronized fashion. (The global controller is used for testing with a high number of robots)

tuw_multi_robot_local_behavior_controller

This package contains a node, which receives the tuw_multi_robot_msgs/RouteSegment message for a robot and publishes a nav_msgs/Path up to the point a robot is allowed to move.

A tuw_multi_robot_msgs/RouteSegment contains a set of segments, where each of them has preconditions to tell when a robot is allowed to enter a certain segment. The tuw_multi_robot_route_to_path_node subscribes to these messages and checks how many of these preconditions are met and publishes a path from start to the last segment, for which the preconditions are met. This node subscribes to all robots as one node for performance reasons while testing with a large number of robots.

tuw_order_planner

Assigns robots to orders and publishes goals until all orders are complete. See tuw_order_planner.

tuw_rqt_ordermanager

RQT plugin to build stations interactively and assign them to orders. See tuw_rqt_ordermanager. RQT ordermanager

References

http://wiki.ros.org/tuw_multi_robot

Citations