一种基于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_exploration22
wiki页面的第7节专门用于教程。

Github链接:
- 软件包本身:https//github.com/hasauino/rrt_exploration2
- 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节点占用占用网格,并找到边界点(它们是勘探目标)。它发布检测到的点,以便过滤器节点可以处理。在多机器人配置中,其目的是仅具有该节点的单个实例运行。
如果需要,运行全球前沿检测器的附加实例可以提高边界点检测的速度。

订阅主题

mapnav_msgs / OccupancyGrid

  • 主题名称由〜map_topic参数定义。它是节点将在其上接收地图的主题名称。

clicked_pointgeometry_msgs / PointStamped

  • global_rrt_frontier_detector节点需要定义要探索的区域。该主题是节点收到定义该区域的五个点。前四点是四个定义要探索的正方形区域,最后一个点是树的起点。在发表了关于这个话题的五点后,RRT将开始检测边界。这五点是由Rviz使用按钮发布的。

发表主题

detected_pointsgeometry_msgs / PointStamped

  • 节点发布检测到边界点的主题。

〜形状visualization_msgs /标记

  • 在此主题中,节点发布线形状,以使用Rviz可视化RRT。

参数

〜map_topicstring,default:“/ robot_1 / map”)

  • 此参数定义节点将在其上接收地图的主题名称。

〜etafloat,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”)上发布检测到的边界点。

订阅主题

mapnav_msgs / OccupancyGrid

  • 主题名称由〜map_topic参数定义。它是节点将在其上接收地图的主题名称。

clicked_pointgeometry_msgs / PointStamped

  • lobal_rrt_frontier_detector也预订了与global_rrt_frontier_detector类似的主题。

发表主题

detected_pointsgeometry_msgs / PointStamped

  • 节点发布检测到边界点的主题。

〜形状visualization_msgs /标记

  • 在此主题中,节点发布线形状,以使用Rviz可视化RRT。

参数

〜/ robot_1 / base_linkstring,default:“/ robot_1 / base_link”)

  • 机架附着的框架。每当树复位时,它将从从此框架获取的当前机器人位置开始。

〜map_topicstring,default:0.5)

  • 此参数定义节点将在其上接收地图的主题名称。

〜etafloat

  • 该参数控制用于检测边界点的RRT的增长率,单位为米。该参数应根据地图大小进行设置,非常大的值将导致树长得更快,从而更快地检测边界点,但是增长速度很大也意味着树将在地图中缺少小角。

frontier_opencv_detector

该节点是另一个边界检测器,但不是基于RRT。该节点使用OpenCV工具来检测边界点。它旨在单独运行,并且在多机器人配置中,只应运行一个实例(运行此节点的附加实例没有任何区别)。
最初这个节点被实现为与基于RRT的前沿检测器进行比较。沿着RRT检测器(局部和全局)一侧运行该节点可以提高检测点的速度。
注意:您可以运行任何类型和任意数量的检测器,所有检测器将发布在过滤器节点(将在下一节中介绍)正在订阅的相同主题上。另一方面,

订阅主题

mapnav_msgs / OccupancyGrid

  • 主题名称由〜map_topic参数定义。它是节点将在其上接收地图的主题名称。

发表主题

detected_pointsgeometry_msgs / PointStamped

  • 节点发布检测到边界点的主题。

形状visualization_msgs /标记

  • 在此主题上,节点使用Rviz发布要进行可视化的检测点。

参数

〜map_topicstring,default:“/ robot_1 / map”)

  • 此参数定义节点将在其上接收地图的主题名称。

过滤

滤波器节点从所有检测器接收检测到的边界点,对点进行滤波,并将它们传递给分配器节点以指令机器人。过滤包括旧点和无效点的选择,也是冗余点。

订阅主题

mapnav_msgs / OccupancyGrid

  • 主题名称由〜map_topic参数定义。它是节点将在其上接收地图的主题名称。

robot_x / move_base_node / global_costmap / costmapnav_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参数定义。这是滤波器节点接收检测到的边界点的主题。

发表主题

边界visualization_msgs /标记

  • 过滤器节点发布接收的边界点以在Rviz上进行可视化的主题。

质心visualization_msgs /标记

  • 过滤器节点仅在Rviz上发布用于可视化的过滤边界点的主题。

filtered_points(MsgLink的无效消息类型(msg / type))

  • 所有过滤的点作为一个点阵列发送到该主题上的分配器节点。

参数

〜map_topicstring,default:“/ robot_1 / map”)

  • 此参数定义节点接收地图的主题名称。该地图用于知道哪些点不再是边界点(旧点)。

〜costmap_clearing_thresholdfloat,default:70.0)

  • 占用率大于此阈值的边界点将被视为无效。占用价值是从成本图中获得的。

〜info_radiusfloat,default:1.0)

  • 用于计算边界信息增益的信息半径。

〜goals_topicstring,default:“/ detected_points”)

  • 定义节点接收到被检查边界点的主题。

〜n_robotsfloat,default:1.0)

  • 机器人数量

〜ratefloat,default:100.0)

  • 节点循环速率(Hz)。

分配器

该节点接收目标探测目标,即目标探测目标,即过滤节点发布过滤的边界点,并相应地命令机器人。分配器节点通过move_base_node命令机器人。这就是为什么你在机器人上引导导航堆栈。

订阅主题

mapnav_msgs / OccupancyGrid

  • 主题名称由〜map_topic参数定义。

过滤的边界点主题nav_msgs / OccupancyGrid

  • 主题名称由〜frontiers_topic参数定义

目标主题(MsgLink的无效消息类型(msg / type))

  • 主题名称由〜goals_topic参数定义。这是滤波器节点接收检测到的边界点的主题。

参数

〜map_topicstring,default:“/ robot_1 / map”)

  • 此参数定义节点接收地图的主题名称。在单机器人情况下,本主题应设置为机器人的地图主题。在多机器人的情况下,此主题必须设置为全局合并映射。

〜info_radiusfloat,default:1.0)

  • 用于计算边界信息增益的信息半径。

〜info_multiplierfloat,default:3.0)

  • 单位是米。该参数用于重视成本上的边界点的信息增益(到前沿点的预期行驶距离)。

〜hysteresis_radiusfloat,default:3.0)

  • 单位是米。该参数定义了滞后半径。

〜hysteresis_gainfloat,default:2.0)

  • 单位是米。该参数定义滞后增益。

〜frontiers_topicstring,default:“/ filtered_points”)

  • 分配器节点接收过滤边界点的主题。

〜n_robotsfloat,default:1.0)

  • 机器人数量

〜delay_after_assignementfloat,default:0.5)

  • 单位是秒。它定义每个机器人分配后的延迟量。

〜ratefloat,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 /

-----

ROS功能包- rrt_exploration的更多相关文章

  1. 在ros功能包CMakeLists.txt中获取所在功能包的路径 便于添加第三方库的相对路径

    在 ros 功能包中要使用第三方的动态库,将其放在系统默认库路径和使用绝对路径均不可取,这样的话可移植性较差,将该功能包移到其它电脑时要重新配置依赖库的路径,太麻烦了. 于是找到下面这个方法,解决了R ...

  2. ROS-3 : Catkin工作空间和ROS功能包

    一.创建一个Catkin工作空间 步骤一:构建catkin工作空间 安装完成ROS版本后,设置好环境变量:$ source /opt/ros/kinetic/setup.bash.然后即可创建一个ca ...

  3. 创建ROS功能包(四)

    为了方便直接用ROS的create-pkg命令行工具 roscreate-pkg chapter2_tutorials std_msgs rospy roscpp std_msgs 包含了常见的消息类 ...

  4. (转)-编写第一个ROS(创建工作空间workspace和功能包package)

    原文网址:http://www.cnblogs.com/liuamin/p/5704281.html 刚接触ROS,学着写了第一个程序,怕以后忘记,就将其步骤记录下来.. 首先你必须保证你电脑已安装配 ...

  5. 编写第一个ROS(创建工作空间workspace和功能包package)

    刚接触ROS,学着写了第一个程序,怕以后忘记,就将其步骤记录下来.. 首先你必须保证你电脑已安装配置好ROS. 1.创建工作空间(workspace) 我们所创建功能包package,应该全部放到一个 ...

  6. 在github上最热门好评高的ROS相关功能包

    在github上最热门最受欢迎的ROS相关功能包 下面依次列出,排名不分先后: 1  Simulation Tools In ROS https://github.com/ros-simulation ...

  7. ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS)

    ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS) 1. 网站资源: ROSwiki官网:http://wiki.ros.org/cn GitHub    ...

  8. 4.1 ROS元功能包

    4.1 ROS元功能包 场景:完成ROS中一个系统性的功能,可能涉及到多个功能包,比如实现了机器人导航模块,该模块下有地图.定位.路径规划...等不同的子级功能包.那么调用者安装该模块时,需要逐一的安 ...

  9. ROS知识(3)----功能包package编译的两种方式

    ROS的包编译有两种方法(我知道的),一种是用rosmake,这种方法简单:另一种是用catkin_make,这种方法更方便包的管理和开发.这两种方法都是先建立工作空间workspace(类似于vs下 ...

随机推荐

  1. HDU 1043 Eight(双向BFS+康托展开)

    http://acm.hdu.edu.cn/showproblem.php?pid=1043 题意:给出一个八数码,求出到达指定状态的路径. 思路:路径寻找问题.在这道题里用到的知识点挺多的.第一次用 ...

  2. JS进阶系列之作用域链

    在之前写的进阶系列里面,提到了执行上下文在创建阶段,要创建变量对象.确定作用域链还有确定this的指向,本次将重点讲解一下作用域链. JavaScript代码的执行过程 在讲解作用域链之前,首先了解一 ...

  3. Unity3d 常用的方法

    1.创建物体 2.加载物体 3.寻找物体 4.添加脚本 1.创建物体 GameObject go; // Use this for initialization void Start () { go ...

  4. Linux(CentOS 6.5) 下安装MySql 5.7.18 二进制版本粗浅攻略

    鉴于Linux和mysql因不同版本,安装方式也不同,所以在阅读本攻略前,请确保各位同学的版本和我的Linux.MySql 版本一致. 如果不一致,只能参考. 我的版本: Linux CentOS 6 ...

  5. ORACLE 多表查询优化收集整理

    搞WEB的离不开数据库,在一个层面上,对数据库的熟练程度决定了很多的事情. 本文就大家都纠结的ORACLE多表查询的性能问题给出一系列个优化方法,那这些都是项目中长期用到的,所以很熟,很熟,已经成为习 ...

  6. 《WAP》团队第三次作业--团队项目的原型设计与开发

    一· 目 录 第一部分 · 结 对 成 员 明 细 第二部分 · NABCD 模 型 第三部分 · 原 型 设 计 第四部分 · P S P  第五部分 · 结 对 过 程 第六部分 · 心 得 总 ...

  7. Linux忘记root登录密码解决方法

    有时候由于长时间米有登录linux系统,等需要用的时候突然忘记root密码,怎么办?下面简单介绍解决方法. redhat 和 centos 6.5 可以,7.0以上未测 在系统重启后,不停地按”e”键 ...

  8. thinkphp5开发的网站出现”No input file specified”(php版本5.6.27)

    thinkphp5开发的网站出现”No input file specified”(php版本5.6.27) 一.总结 一句话总结:搜索引擎一定要用google,比百度节约时间一万倍,google啊, ...

  9. LeetCode--203--删除链表中的节点

    问题描述: 删除链表中等于给定值 val 的所有节点. 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3 ...

  10. LeetCode--069--x的平方根

    问题描述: 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: ...