This package contains a MultiRobotRouter using Prioritized Planning in Combination with a collision resolution algorithm to find a routing tabel for a large number of robots.
- Maintainer status: maintained
- Maintainer: Benjamin Binder <benjamin.binder AT tuwien.ac DOT at>, Markus Bader <markus.bader AT tuwien.ac DOT at>, Florian Beck <florian.beck AT tuwien.ac DOT at>
- Author: Benjamin Binder <benjamin.binder AT tuwien.ac DOT at>
- License: BSD
- Source: git https://github.com/tuw-robotics/tuw_multi_robot.git (branch: master)
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 as shown in the figure below.
Figure Sample Scenarios
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.
For an example see the tuw_multi_robot_demo package.
- The map used for planning.
A list of tuw_multi_robot_msgs/Vertex describing the voronoi path or an arbitrary hand crafted segment path.
- Robot Info sends robot radius, robot name, current pose and robot status to the router.
- The list of desired robot goals.
- The status of the planner for debugging.
- A unsynchronized path msg for every robot.
- A synchronized route for every robot containing segment preconditions.
~planner_status_topic (string default: "planner_status")
- Publihses a tuw_multi_robot planner_status_msgs
~odom_topic (string default: "odom")
- The topic used for gathering the start positions of the robots.
~path_topic (string default: "path")
- The topic used for publishing an unsynchronized nav_msgs::Path for every robot.
~goals_topic (string default: "goals")
- Topic to receive a list of goals for all robots.
~robot_info_topic (string default: "goals")
- Topic to recive information to every robot.
~map_topic (string default: "voronoi_map")
- Topic used to read the currently used map.
~graph_topic (string default: "segments")
- Topic to receive the search Graph
~seg_path (string default: "seg_path")
- Topic containing the synchronized Path for every robot.
RQT Reconfigure Parameters
voronoi_graph (bool default: "true")
- If the graph is generated using the voronoi graph generator this can save computation time. (Additionally it can be checkt if the graph covers the whole free space of the map)
priority_rescheduling (bool default: "true")
- Enables priority rescheduling
speed_rescheduling (bool default: "true")
- Enables speed rescheduling
router_time_limit_s (float default: "10.0")
- Sets the timelimit for the planning approach. (Only for planning)
topic_timeout_s (float default: "10.0")
- Sets the timelimit for deleting latched topics.
path_endpoint_optimization (bool default: "false")
- Only used if exactly one robot is used for planning. Removes an appropriate amount of endsegments of the path to get shorter routes.
collision_resolver (enum default: "Avoidance")
- Enum to select the backtracking strategy to avoid blocking robots.
- Avoidance: allows robot to avoid other ones in crossings and wait on a spot.
- Backtracking: allows robots to wait in a certain spot for other ones.
- None: Standard A-Star planner
goal_mode (enum default: "use_voronoi_goal")
- Selects where the last segment is connected to.
router_type (enum default: "standard_router")
- Selects the router type
- standard_router: A straight forward none multi threaded router
- threaded_router_srr: Multi Threaded router which plans every robots route in a single thread. (similar to todo)
nr_threads (int default: "1")
- selects the number of threads used for all multi threaded routers