Author: Benjamin Binder <benjamin.binder AT tuwien.ac DOT at>
License: BSD
Source: https://github.com/tuw-robotics/tuw_multi_robot
项目简介
该工具包适用于多个机器人搜索图上规划的路线。它会根据像素图创建搜索图,并尝试使用扩展的方法进行优先级规划,以找到多个机器人的路径。输入的是tuw_multi_robot_msgs / RobotInfo的消息,其中包括机器人姿势,地图和所需的目标姿势。输出则是分配给各个机器人的多个同步路线。
安装教程
mkdir -p $MRRP_DIR/src
cd $MRRP_DIR/src
git clone git@github.com:tuw-robotics/tuw_multi_robot.git
git clone git@github.com:tuw-robotics/tuw_msgs.git
git clone https://github.com/tuw-robotics/tuw_geometry
sudo apt install ros-$ROS_VERSION-stage-ros
cd ..
catkin_make
快速启动
roslaunch tuw_multi_robot_demo demo.launch room:=cave nr_of_robots:=3
roslaunch tuw_multi_robot_demo demo.launch room:=warehouse_14 nr_of_robots:=14
roslaunch tuw_multi_robot_demo demo.launch room:=warehouse_200 nr_of_robots:=50
工具包的组成
- tuw_multi_robot_ctrl tuw_multi_robot_demo
一个简单的多机器人控制器,使用路径作为输入,用于执行同步的路径。 - tuw_multi_robot_goal_generator
tuw_multi_robot_goal_generator软件包旨在为tuw_multi_robot_router生成,存储和读取目标列表。Goal_saver能够以人类可读的形式存储tuw_multi_robot_msgs :: RobotGoalsArray类型的已发布目标msg。Goal_server能够读取和发布此消息,并读取已保存目标的补丁以进行测试。Goal_random节点订阅了占用网格,并能够自动生成有效的测试目标) - tuw_multi_robot_local_behavior_controller
该节点接收机器人的tuw_multi_robot_msgs / RouteSegment消息,并发布nav_msgs / Path消息直给机器人进行移动。 - tuw_multi_robot_router
该软件包包含一个MultiRobotRouter,它结合使用优先计划和冲突解决算法来查找大量机器人的路由表。 - tuw_multi_robot_rviz
提供rviz插件以设置计划者的目标位置,并提供可视化生成图形的工具。 - tuw_voronoi_graph
包含不同的节点以生成机器人路由器的路由图。voronoi_graph_generator从地图生成一个voronoi图。dxf_to_graph使用dxf文件生成一个图形,segments_to_graph使用一个以线段作为输入的配置文件创建一个图形。
目前根据实际项目的需求,重点会放在tuw_voronoi_graph包和tuw_multi_robot_router包上。
tuw_voronoi_graph
该软件包包含了voronoi-graph-generator、dxf-to-graph-node和segment-to-graph节点。
voronoi-graph-generator
接收的是nav_msgs/OccupancyGrid消息格式的栅格地图,并将原始的栅格地图转换成voronoi图。如果选择保存操作,可以快速从文件夹中加载该地图,此外,该节点还可以加载保存在文件夹中的特定图形。
接收话题:
- map (nav_msgs/OccupancyGrid)
用作规划的栅格地图
发布话题:
-
segments (tuw_multi_robot_msgs/VoronoiGraph)
生成的图 -
map_eroded (nav_msgs/OccupancyGrid)
如果参数publish_map_eroded为true,则对原始地图进行膨胀处理。
相关参数:
- map_inflation (double default: “0.1” [m])
膨胀层大小。 - segment_length (float default: “0.9”)
连接线段的长度。 - crossing_opimization (float default: “0.2”)
距离小于该值的交叉点将进行合并。 - end_segment_optimization (float default: “0.4”)
低于该值的末端段(只有一个邻居)将被删除。 - graph_path (string default: “.”)
定义保存生成的图形的路径。 - custom_graph_path (string default: “”)
如果设置了该参数,则会从该路径加载自定义生成的图形。 - publish_map_eroded (bool default: “false”)
是否发布膨胀后的地图。
dxf-to-graph-node
该节点可以输入包含缩放和转换后的地图和任何数量的行和圆弧。这些圆弧和圆会转换为图形并保存到特定位置。
参数
- -h [ --help ]
显示 - -i [ --input ] arg (=./segments.dxf)
文件的路径 - -o [ --output ] arg (=./graphs/segments)
输出目录 - -w [ --width ] arg (=0.600000024)
线段宽度(米) - -l [ --length ] arg (=1)
线段长度(米)
voronoi-segment-to-graph-node
该节点需要预先设定边界的线段作为输入,并把它转换成一个曲线图,它是之后用作发布的分段文件。
接收话题
发布话题:
- segment_file (string default: “segments.yaml”)
定义线段的文件路径 - segments_topic (string default: “/segments”)
图形发布的主题 - segment_length (float default: “0.9”)
定义图段的长度
采样线段文件
start_x: [ 0, 2, 3.2, 5]
start_y: [ -1.5, -1.5, -2, -4]
end_x: [ 2, 3.2, 5, 3]
end_y: [ -1.5, -2, -4, -4]
space: [ 1.0, 1.0, 1.0, 1.0]
origin_x: -15
origin_y: -15
resolution: 0.05
tuw_multi_robot_router
该软件包包含MultiRobotRouter,它结合使用优先计划和冲突解决算法来查找多机器人的路由表。
资料
MRRP使用优先的计划方法来查找机器人路线。此外,还集成了一个Priority和Speed Rescheduler以及一个Collision解析器,以解决无法通过标准优先级规划方法解决的特殊情况,如下图所示。
该路线可用于多辆车辆,也可仅用于在给定或生成的图形上规划路径。
多机器人模式
多机器人模式是默认模式。计划者会收听/robot_info,以查看有多少个机器人处于联机状态并且可以进行计划。可以将目标列表发送到目标 由于为这些场景生成的结果是相互依赖的,因此必须以同步方式执行给定的路由。因此,当允许机器人进入网段时,路由器会发布包含前提条件的tuw_multi_robot_msgs/Route。此外,还会为每个机器人发布通过nav_msgs / Path的非同步版本。
单机器人模式
在这种模式下,计划者仅计划一个机器人的路径,但是在图形上的速度更快,并且取决于图形的生成方式,从而可以驱动保护程序,例如在voronoi图形上,该路径将始终位于走廊的中心,而不是像A切向拐角。 为了激活此模式,请查看参数path_endpoint_optimization和robot_name。
接收话题:
- /robot_info (tuw_multi_robot_msgs/RobotInfo)
每个机器人都发布其状态/ robot_info。 这是为了让节点知道有多少个机器人以及它们所在的位置。 - map (nav_msgs/OccupancyGrid)
用于计划的地图 - segments (tuw_multi_robot_msgs/Graph)
tuw_multi_robot_msgs/Vertex,描述了voronoi路径或手工制作的线段路径。 - goals (tuw_multi_robot_msgs/RobotGoalArray)
所需的机器人目标列表。 - /goal (geometry_msgs/PoseStamped)
仅在单机器人模式下存在才能为一个机器人发送目标。
发布话题:
- planner_status (tuw_multi_robot_msgs/PlannerStatus)
用于规划程序debug的状态。 - [robot_name]/path (nav_msgs/Path)
每个机器人的同步路径msg。 - [robot_name]/route (tuw_multi_robot_msgs/Route)
每个包含分段前提条件的机器人的同步路径
rqt_reconfigure动态调整参数
- voronoi_graph (bool default: “true”)
如果生成的voronoi图是使用生成器生成的,则可以节省大量的计算时间。 - priority_rescheduling (bool default: “true”)
是否启用优先级安排。 - speed_rescheduling (bool default: “true”)
是否启用速度安排。 - router_time_limit_s (float default: “10.0”)
设定规划的时间限制。 - topic_timeout_s (float default: “10.0”)
设定删除锁定主题的时间限制。 - path_endpoint_optimization (bool default: “false”)
仅在单机器人时使用。删除路径的适当数量的端部段以获得较短的路径。 - collision_resolver (enum default: “Avoidance”)
通过枚举来选择回溯策略以避免机器人之间堵塞。
Avoidance:允许机器人为避开其他机器人在路边等待。
Backtracking:允许机器人在某个地点等待其他地点。
None:标准A-Star规划器 - goal_mode (enum default: “use_voronoi_goal”)
选择最后一个网段的连接位置。 - router_type (enum default: “standard_router”)
选择路由类型
standard_router:直接无多线程路由。
threaded_router_srr:多线程路由,它在单个线程中计划每个机器人路线。(类似于待办事项)(similar to todo) - nr_threads (int default: “1”)
选择用于所有多线程路由器的线程数