[开源项目分享]tuw_multi_robot

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-generatordxf-to-graph-nodesegment-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”)
    选择用于所有多线程路由器的线程数
  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Travis.X

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值