ROS功能包- RRT_exploration使用RRT随机数进行地图探测
学生博文和代码分享(仿真+真实机器人!):
一种基于RRT实现的多机器人地图探测算法的ROS软件包。
它还具有使用图像处理提取边界点、基于图像的边界检测等功能。
适用版本:indigo、jade、kinetic、lunar。
注意事项:官网文档非常详细,通常不会遇到任何问题。
但是如果使用非官方默认功能包,可能需要源码配置一些依赖。
例如ros kinetic+gazebo 8,使用时可能遇到如下问题:
----
-
relaybot@relaybot-desktop:~$ sudo apt-get install ros-kinetic-kobuki-gazebo*
-
[sudo] password for relaybot:
-
Reading package lists... Done
-
Building dependency tree
-
Reading state information... Done
-
Note, selecting 'ros-kinetic-kobuki-gazebo' for glob 'ros-kinetic-kobuki-gazebo*'
-
Note, selecting 'ros-kinetic-kobuki-gazebo-plugins' for glob 'ros-kinetic-kobuki-gazebo*'
-
Some packages could not be installed. This may mean that you have
-
requested an impossible situation or if you are using the unstable
-
distribution that some required packages have not yet been created
-
or been moved out of Incoming.
-
The following information may help to resolve the situation:
-
-
The following packages have unmet dependencies:
-
ros-kinetic-kobuki-gazebo : Depends: ros-kinetic-gazebo-plugins but it is not going to be installed
-
Depends: ros-kinetic-gazebo-ros but it is not going to be installed
-
ros-kinetic-kobuki-gazebo-plugins : Depends: libgazebo7 but it is not going to be installed
-
Depends: libsdformat4 but it is not going to be installed
-
Depends: ros-kinetic-gazebo-plugins but it is not going to be installed
-
Depends: ros-kinetic-gazebo-ros but it is not going to be installed
-
E: Unable to correct problems, you have held broken packages.
-
relaybot@relaybot-desktop:~$
----
解决思路:源码编译对应依赖!
参考链接:
1 ROSwiki:http://wiki.ros.org/rrt_exploration
2 GitHub:https://github.com/hasauino
3 rrt_exploration:https://github.com/hasauino/rrt_exploration
4 rrt_exploration_tutorials:https://github.com/hasauino/rrt_exploration_tutorials
----机器翻译----
来自hasauino:
亲爱的ROS用户,
我想公布rrt_exploration 22包。它是一个实现基于多机器人RRT的地图探测算法的ROS软件包。它还具有使用图像处理提取边界点的基于图像的边界检测。
你可以用它来让你做机器人的探索。它可以用于单个或多个机器人。
Wiki页面:http : //wiki.ros.org/rrt_exploration 22
wiki页面的第7节专门用于教程。
Github链接:
- 软件包本身:https://github.com/hasauino/rrt_exploration 2
- Gazebo模拟文件:https://github.com/hasauino/rrt_exploration_tutorials 1
您的反馈不胜感激!
介绍
“rrt_exploration”是实现移动机器人的多机器人地图探索算法的ROS包。它基于快速探索随机树(RRT)算法。它使用占用线作为地图表示。该包具有5个不同的ROS节点:
- 全球RRT边界点检测器节点。
- 本地RRT边界点检测器节点。
- 基于OpenCV的前沿检测器节点。
- 过滤节点。
- 分配者节点。
这是一个播放列表,显示在真实机器人上运行的程序包,以及在Gazebo模拟中:
包装要求
该套件已经在ROS Kinetic和ROS Indigo上进行了测试,它应该在其他发行版上工作,如翡翠。在安装包之前需要以下要求:
1-你应该安装一个ROS发行版(靛蓝或更新版本,推荐是靛蓝或动力)。
2-创建工作区。
3-安装了“gmapping”ROS包,可以在终端中键入以下命令:
sudo apt-get install ros- kinetic -gmapping
4-安装ROS导航堆栈。您可以使用以下命令来执行此操作:
命令和apt-get安装ros- 动能 -导航
你应该有Python 2.7。(没有在Python 3中测试)。
6 - 您应该/安装以下python模块:
-OpenCV(cv2)
sudo apt-get install python-opencv
-Numpy
sudo apt-get install python-numpy
-Sklearn
sudo apt-get install python-scikits-learn
硬件要求
可与导航堆栈一起使用的移动机器人(发布/ odom和/ tf。接收速度命令..)。机器人还必须配备激光扫描仪或任何发布激光扫描信息的传感器(sensor_msgs / LaserScan)。
安装
下载软件包并将其放在工作区的/ src文件夹中。然后使用catkin_make编译。
设置机器人
该套件为单个或多个机器人提供了一个探索策略。但是,为了使其工作,您应该使用导航堆栈设置机器人。并且每个机器人应该从gmapping包运行“slam_gmapping”节点。
此外,机器人必须按照以下方式进行设置和准备。
注意:如果要快速运行并测试该软件包,您可以尝试使用rrt_exploration_tutorials软件包,为单个和多个机器人提供Gazebo模拟,您可以直接使用该软件包。
机器人网络
对于多机器人配置,该软件包不需要特殊的网络配置,只需使用单个ROS主机(可以是其中一个机器人)即可。所以在其他机器人上,ROS_MASTER_URI参数应该指向主机地址。有关在多台机器上设置ROS的更多信息,请点击此链接。
机器人的框架名称在tf
所有机器人的框架应以其名称为前缀。机器人的命名从“/ robot_1”,“/ robot_2”,“/ robot_3”,...等开始。即使您使用单一机器人的包装,机器人的框架也应以其名称(即/ robot_1)为前缀。所以对于robot_1,tf树中的框架应该如下所示:
机器人的节点和主题名称
机器人上运行的所有节点和主题也必须以其名称为前缀。对于机器人1,节点名称应如下所示:/ robot_1 / move_base_node,/ robot_1 / slam_gmapping。
主题名称应该是:/ robot_1 / odom,/ robot_1 / map / / robot_1 / base_scan,..etc。
在机器人上设置导航堆栈
在机器人上引导导航堆栈的move_base_node节点必须正在运行。该包(rrt_exploration)生成目标勘探目标,每个机器人必须能够接收这些点并向其移动。这就是为什么需要导航堆栈。此外,每个机器人必须具有全局和本地成本图。所有这些都来自move_base_node。
映射节点
每个机器人应该具有从gmapping包生成的本地映射。
地图合并节点
对于多机器人情况,应该有一个节点将所有本地映射合并到一个全局映射中。你可以使用这个包。
节点
有3种类型的节点; 用于检测占用网格图中的边界的节点,用于过滤检测到的点的节点和用于将点分配给机器人的节点。下图显示了结构:
global_rrt_frontier_detector
global_rrt_frontier_detector节点占用占用网格,并找到边界点(它们是勘探目标)。它发布检测到的点,以便过滤器节点可以处理。在多机器人配置中,其目的是仅具有该节点的单个实例运行。
如果需要,运行全球前沿检测器的附加实例可以提高边界点检测的速度。
订阅主题
- 主题名称由〜map_topic参数定义。它是节点将在其上接收地图的主题名称。
clicked_point(geometry_msgs / PointStamped)
- global_rrt_frontier_detector节点需要定义要探索的区域。该主题是节点收到定义该区域的五个点。前四点是四个定义要探索的正方形区域,最后一个点是树的起点。在发表了关于这个话题的五点后,RRT将开始检测边界。这五点是由Rviz使用按钮发布的。
发表主题
detected_points(geometry_msgs / PointStamped)
- 节点发布检测到边界点的主题。
- 在此主题中,节点发布线形状,以使用Rviz可视化RRT。
参数
〜map_topic(string,default:“/ robot_1 / map”)
- 此参数定义节点将在其上接收地图的主题名称。
〜eta(float,default:0.5)
- 该参数控制用于检测边界点的RRT的增长率,单位为米。该参数应根据地图大小进行设置,非常大的值将导致树长得更快,从而更快地检测边界点,但是增长速度很大也意味着树将在地图中缺少小角。
local_rrt_frontier_detector
此节点类似于global_rrt_frontier_detector。然而,它的作用不同,因为这里的树每次检测到边界点时都会保持重置。该节点旨在沿着global_rrt_frontier_detector节点运行,它负责快速检测位于机器人附近的边界点。
在多机器人配置中,每个机器人运行local_rrt_frontier_detector的一个实例。因此,对于3台机器人的团队,将有4个节点用于检测边界点; 3个本地检测器和1个全局检测器。如果需要,运行本地边界检测器的附加实例可以提高边界点检测的速度。
所有检测器将在同一主题(“/ detected_points”)上发布检测到的边界点。
订阅主题
- 主题名称由〜map_topic参数定义。它是节点将在其上接收地图的主题名称。
clicked_point(geometry_msgs / PointStamped)
- lobal_rrt_frontier_detector也预订了与global_rrt_frontier_detector类似的主题。
发表主题
detected_points(geometry_msgs / PointStamped)
- 节点发布检测到边界点的主题。
- 在此主题中,节点发布线形状,以使用Rviz可视化RRT。
参数
〜/ robot_1 / base_link(string,default:“/ robot_1 / base_link”)
- 机架附着的框架。每当树复位时,它将从从此框架获取的当前机器人位置开始。
〜map_topic(string,default:0.5)
- 此参数定义节点将在其上接收地图的主题名称。
〜eta(float)
- 该参数控制用于检测边界点的RRT的增长率,单位为米。该参数应根据地图大小进行设置,非常大的值将导致树长得更快,从而更快地检测边界点,但是增长速度很大也意味着树将在地图中缺少小角。
frontier_opencv_detector
该节点是另一个边界检测器,但不是基于RRT。该节点使用OpenCV工具来检测边界点。它旨在单独运行,并且在多机器人配置中,只应运行一个实例(运行此节点的附加实例没有任何区别)。
最初这个节点被实现为与基于RRT的前沿检测器进行比较。沿着RRT检测器(局部和全局)一侧运行该节点可以提高检测点的速度。
注意:您可以运行任何类型和任意数量的检测器,所有检测器将发布在过滤器节点(将在下一节中介绍)正在订阅的相同主题上。另一方面,
订阅主题
- 主题名称由〜map_topic参数定义。它是节点将在其上接收地图的主题名称。
发表主题
detected_points(geometry_msgs / PointStamped)
- 节点发布检测到边界点的主题。
- 在此主题上,节点使用Rviz发布要进行可视化的检测点。
参数
〜map_topic(string,default:“/ robot_1 / map”)
- 此参数定义节点将在其上接收地图的主题名称。
过滤
滤波器节点从所有检测器接收检测到的边界点,对点进行滤波,并将它们传递给分配器节点以指令机器人。过滤包括旧点和无效点的选择,也是冗余点。
订阅主题
- 主题名称由〜map_topic参数定义。它是节点将在其上接收地图的主题名称。
robot_x / move_base_node / global_costmap / costmap(nav_msgs / OccupancyGrid)
- 其中x(在robot_x中)是指机器人的号码。
过滤器节点预订所有机器人的所有成本映射主题,因此需要成本图。通常,导航堆栈会发布成本图(在引导机器人上的导航堆栈之后,每个机器人都有一个成本图)。例如,如果n_robots = 2,则节点将订阅:robot_1 / move_base_node / global_costmap / costmap和robot_2 / move_base_node / global_costmap / costmap。costmaps用于删除无效点。
注意:与机器人对应的所有节点的命名空间应以robot_x开头。再次,x是机器人号码。
目标主题(geometry_msgs / PointStamped)
- 主题名称由〜goals_topic参数定义。这是滤波器节点接收检测到的边界点的主题。
发表主题
- 过滤器节点发布接收的边界点以在Rviz上进行可视化的主题。
- 过滤器节点仅在Rviz上发布用于可视化的过滤边界点的主题。
filtered_points(MsgLink的无效消息类型(msg / type))
- 所有过滤的点作为一个点阵列发送到该主题上的分配器节点。
参数
〜map_topic(string,default:“/ robot_1 / map”)
- 此参数定义节点接收地图的主题名称。该地图用于知道哪些点不再是边界点(旧点)。
〜costmap_clearing_threshold(float,default:70.0)
- 占用率大于此阈值的边界点将被视为无效。占用价值是从成本图中获得的。
〜info_radius(float,default:1.0)
- 用于计算边界信息增益的信息半径。
〜goals_topic(string,default:“/ detected_points”)
- 定义节点接收到被检查边界点的主题。
〜n_robots(float,default:1.0)
- 机器人数量
〜rate(float,default:100.0)
- 节点循环速率(Hz)。
分配器
该节点接收目标探测目标,即目标探测目标,即过滤节点发布过滤的边界点,并相应地命令机器人。分配器节点通过move_base_node命令机器人。这就是为什么你在机器人上引导导航堆栈。
订阅主题
- 主题名称由〜map_topic参数定义。
过滤的边界点主题(nav_msgs / OccupancyGrid)
- 主题名称由〜frontiers_topic参数定义
目标主题(MsgLink的无效消息类型(msg / type))
- 主题名称由〜goals_topic参数定义。这是滤波器节点接收检测到的边界点的主题。
参数
〜map_topic(string,default:“/ robot_1 / map”)
- 此参数定义节点接收地图的主题名称。在单机器人情况下,本主题应设置为机器人的地图主题。在多机器人的情况下,此主题必须设置为全局合并映射。
〜info_radius(float,default:1.0)
- 用于计算边界信息增益的信息半径。
〜info_multiplier(float,default:3.0)
- 单位是米。该参数用于重视成本上的边界点的信息增益(到前沿点的预期行驶距离)。
〜hysteresis_radius(float,default:3.0)
- 单位是米。该参数定义了滞后半径。
〜hysteresis_gain(float,default:2.0)
- 单位是米。该参数定义滞后增益。
〜frontiers_topic(string,default:“/ filtered_points”)
- 分配器节点接收过滤边界点的主题。
〜n_robots(float,default:1.0)
- 机器人数量
〜delay_after_assignement(float,default:0.5)
- 单位是秒。它定义每个机器人分配后的延迟量。
〜rate(float,default:100.0)
- 节点循环速率(Hz)。
教程
反馈
要报告错误或建议增强功能,请在此处创建Github问题。
如果您有问题,请发表在ROS答案中,确保您的问题被rrt_exploration标记,以便我收到通知。
致谢
这个包是在我在美国沙迦大学的硕士论文中写的。我的论文顾问是Shayok Mukhopadhyay博士。
论文题目:“ 多机器人地图探索多次快速探索随机树 ”
-----
本节将展示除了包本身(rrt_exploration)和rrt_exploration_tutorials包之外,还可以安装所有内容,所需的软件包和python模块。本教程假设您已经安装了ROS,并且有一个工作区。
安装所有必需的软件包
在终端中,写下列命令:
sudo apt-get安装ros- kinetic -gmapping ros- 动力学 -导航ros- kinetic -kobuki ros- kinetic -kobuki-core ros- kinetic -kobuki-gazebo
sudo apt-get install python-opencv python-numpy python-scikits-learn
安装rrt_exploration和rrt_exploration_tutorials
假设您的工作区文件夹位于主目录中,并命名为catkin_ws(如果没有,请相应地更改命令):
-
$ cd〜/ catkin_ws / src /
-
$ git clone https://github.com/hasauino/rrt_exploration.git
-
$ git clone https://github.com/hasauino/rrt_exploration_tutorials.git
-
$ cd〜/ catkin_ws
-
$ catkin_make
就是这个!现在你可以测试包。
教程列表
在教程中,我们将使用Gazebo模拟器。您下载了rrt_exploration_tutorials软件包后,您已经拥有所有需要的文件。
1台带激光扫描仪的单机器人。
-----
凉亭模拟
在rrt_exploration_tutorials软件包附带的启动文件中,您会发现几个启动文件。在本教程中,我们将使用单机器人仿真的方法。
1 - 在终端中,运行以下命令:
roslaunch rrt_exploration_tutorials single_simulated_house.launch
这将打开凉亭和RViz。机器人设置为使用rrt_exploration软件包。主要是机器人框架以“robot_1”为前缀,对于节点和主题名称也是如此。
开始探索
我们将在rrt_exploration包中使用一个名为“single.launch”的启动文件。此启动文件启动全局和本地检测器,过滤器和分配器节点。
roslaunch rrt_exploration single.launch
故障排除
如果凉亭显示黑色的屏幕,显示如下消息:
这意味着凉亭目前正在为您下载仿真模型。如果花了太长时间,您可以离线下载所有Gazebo模型,然后手动放在“models”文件夹(路径:〜/ .gazebo / models)中,如下所示:
-
$ wget -l 2 -nc -r“http://models.gazebosim.org/”
-
$ cd models.gazebosim.org
-
$ mkdir -p〜/ .gazebo / models /
-
$ cp -r *〜/ .gazebo / models /
-----
文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。
原文链接:zhangrelay.blog.csdn.net/article/details/76850690
- 点赞
- 收藏
- 关注作者
评论(0)