基于rrt_exploration实现自主建图(ros)

提示:本篇博客适用于想在ros中使用rrt_exploration功能包的人参考。

在ros当中使用rrt_exploration来实现自主建图,官方文档(http://wiki.ros.org/rrt_exploration)说得比较清楚,这篇博客简单地讲解一下流程,主要是针对一些容易掉进坑的地方说明一下,给大家排排雷。

 

一.下载rrt_exploration功能包

1.打开终端

2.进入你的工作空间/src文件下

$ cd catkin_ws/src        #将命令中的catkin_ws更换为你个人的工作空间名

3.下载rrt_exploration功能包

$ git clone https://github.com/hasauino/rrt_exploration.git

 

二.下载相关依赖包(ros版本为kinetic)

OpenCV(cv2)

$ sudo apt-get install python-opencv

Numpy

$ sudo apt-get install python-numpy

Sklearn

$ sudo apt-get install python-scikits-learn

gmapping

$ sudo apt-get install ros-kinetic-gmapping

navigation

$ sudo apt-get install ros-kinetic-navigation

 

三.编译工作空间

1.进入你的工作空间

$ cd catkin_ws        #将命令中的catkin_ws更换为你个人的工作空间名

2.编译

$ catkin_make

到这一个步骤,如果没有错误,那么rrt_exploration功能包的下载安装已经全部完成,接下来就到了使用阶段,在此,我推荐创建一个launch文件来达到使用自主探索建图功能的目的。我把自主探索建图功能分为两个模块,一个是自主探索功能,一个是建图功能,自主探索功能需要rrt_exploration和move_base,建图这里就采用gmapping。因此你的launch文件内需要包含3个内容:

① rrt_exploration

② move_base

③ gmapping

四.创建自主建图launch文件

1.随意在一个功能包内创建launch文件夹,并在launch文件夹中建立一个rrt_slam.launch文件

文件内容如下:

<launch>

    <include file="$(find rrt_exploration)/launch/simple.launch"/> 
    <include file="$(find tiprobot_slam)/launch/tiprobot_gmapping.launch"/> 

    <node pkg="rviz" type="rviz" name="rviz" required="true" args="-d $(find tiprobot_slam)/rviz/tiprobot_explore.rviz"/>

    <node pkg="move_base" type="move_base" respawn="false" name="move_base_node" output="screen">
      <param name="footprint_padding" value="0.01" />
      <param name="controller_frequency" value="5.0" />
      <param name="controller_patience" value="3.0" />
      <param name="oscillation_timeout" value="30.0" />
      <param name="oscillation_distance" value="0.5" />
      <param name="planner_patience" value="1" />
      <param name="controller_patience" value="1" /> 
      <param name="recovery_behavior_enabled" value="false" />
      <rosparam file="$(find tiprobot_slam)/config/costmap_common_params.yaml" command="load" ns="global_costmap" />
      <rosparam file="$(find tiprobot_slam)/config/costmap_common_params.yaml" command="load" ns="local_costmap" />
      <rosparam file="$(find tiprobot_slam)/config/local_costmap_params.yaml" command="load" />
      <rosparam file="$(find tiprobot_slam)/config/global_costmap_params.yaml" command="load" />
      <rosparam file="$(find tiprobot_slam)/config/base_local_planner_params.yaml" command="load" />
      <param name="global_costmap/global_frame" value="/map"/>
      <param name="global_costmap/robot_base_frame" value="/base_link"/>
      <param name="global_costmap/laser_scan_sensor/sensor_frame" value="/base_scan"/>
      <param name="global_costmap/laser_scan_sensor/topic" value="/scan"/>    
      <param name="local_costmap/global_frame" value="/map"/>
      <param name="local_costmap/robot_base_frame" value="/base_link"/>
      <param name="local_costmap/laser_scan_sensor/sensor_frame" value="/base_scan"/>
      <param name="local_costmap/laser_scan_sensor/topic" value="/scan"/>
      <param name="local_costmap/obstacle_layer/laser_scan_sensor/topic" value="/scan"/>
      <remap from="cmd_vel" to="cmd_vel"/>
    </node>
</launch>

文件内容讲解

rrt_exploration

直接使用include包含就行,simple.launch是单机器人使用rrt_exploration的launch文件。

gmapping

也是直接使用include包含就行,gmapping的配置各种参考文档都很多,这里不过多讲解。

move_base

这部分要重点讲解一下,虽然rrt_exploration为单机器人创建了simple.launch文件,但大部分人使用依然会出现问题。原因这里就直接说明了。

<node pkg="move_base" type="move_base" respawn="false" name="move_base_node" output="screen">

大部分使用出现问题都在于这一句,注意到name="move_base_node"这一段,这就是问题根源,rrt_exploration作者是根据这一个命名来写代码的,但大部分ros使用者都是使用move_base这个命名,而作者的源代码采用的是move_base_node(很好奇作者为什么不走寻常路),而且没有在launch文件中给出接口来更改move_base的命名,因此大部分人在使用rrt_exploration的时候会发现move_base无法和rrt_exploraiton连接,导致自主探索功能失败,有两种解决办法:

①像我这样在launch文件中将move_base节点命名为move_base_node,这是最简单快捷的方法,也是我推荐的方法。

②在源代码中修改move_base_node名,这个我不推荐,因为涉及的地方很多,如果有人需要,可以评论在下方,我可以给出更改的位置

move_base配置部分:

本地规划器作者采用的是base_local_planner,我尝试使用过dwa_local_planner,但效果没有base_local_planner好,建议大家也使用base_local_planner。

      <param name="footprint_padding" value="0.01" />
      <param name="controller_frequency" value="5.0" />
      <param name="controller_patience" value="3.0" />
      <param name="oscillation_timeout" value="30.0" />
      <param name="oscillation_distance" value="0.5" />
      <param name="planner_patience" value="1" />
      <param name="controller_patience" value="1" /> 
      <param name="recovery_behavior_enabled" value="false" />

这一段是作者配置的参数,应该是作者根据算法作出的调试,建议大家就使用作者默认的这一套参数。

      <param name="global_costmap/global_frame" value="/map"/>
      <param name="global_costmap/robot_base_frame" value="/base_link"/>
      <param name="global_costmap/laser_scan_sensor/sensor_frame" value="/base_scan"/>
      <param name="global_costmap/laser_scan_sensor/topic" value="/scan"/>    
      <param name="local_costmap/global_frame" value="/map"/>
      <param name="local_costmap/robot_base_frame" value="/base_link"/>
      <param name="local_costmap/laser_scan_sensor/sensor_frame" value="/base_scan"/>
      <param name="local_costmap/laser_scan_sensor/topic" value="/scan"/>
      

这一段是全局代价地图和本地代价地图的设置

全局代价地图和本地代价地图的参数类似

它们前四个参数分别代表

全局坐标名:在作者的设置中全局代价地图采用的是map,本地代价地图采用的是odom,我测试之后感觉本地代价地图改为map效果要好一些,所以我这里采用的是map。

机器人基坐标:这个基本上大家都类似,一般都是base_link或者base_footprint。

传感器坐标名:这个可能会有些区别,可以使用rosrun rqt_tf_tree rqt_tf_tree命令来查看激光的tf名,根据自己机器人的命名情况来修改。

传感器数据话题名:这个大部分应该都是scan,也是根据自己机器人的命名情况来修改。

五.使用基于rrt_exploration的自主探索功能

这里简单地给大家展示一下,跑一跑流程。我这里采用的是turtlebot3的仿真来测试一下。

1.启动turtlebot3仿真

$ roslaunch turtlebot3_gazebo turtlebot3_stage_4.launch
$ roslaunch turtlebot3_bringup turtlebot3_remote.launch

2.启动rrt_slam.launch

$ roslaunch rrt_exploration rrt_slam.launch

我这里是把这个launch文件放在rrt_exploration功能包里面的,根据个人情况调整命令即可。

通过rviz中的Publish Point设置四个点(推荐为一个矩形区域的四个顶点)为探索的范围,第五个点设置在机器人附近。

效果展示:

自主探索建图的效果还是不错的。

移动机器人项目组任务安排表 Day 01 上午 1.gmapping参数配置(李超) 2.总体launch文件的编写(钟浩) 3.机器人tf,状态,滤波器launch文件的编写(李博) 4.移动机器人调试(李超,钟浩,李博) 5.完成gmapping建图修图(李超,钟浩,李博) 下午 1.move_base参数配置(李超,钟浩) 2.amcl参数配置(李博) 3.调试机器人导航参数(李超,钟浩,李博) 4.在rviz中完成机器人单点导航(李超,钟浩) 5.记录多个导航目标点(李超,钟浩) 6.查阅随机循环导航函数的资料(李博) 7.完成随机循环导航功能节点函数(李超,钟浩,李博) 8.完成随机循环导航功能测试(李超,钟浩,李博) 里程碑事件: 1.完成gmapping建图修图 2.调试机器人导航参数 3.完成随机循环导航功能测试 Day 02 上午 1.完成循环导航代码的编写(李超,钟浩,李博) 2.调试循环导航功能(李超,钟浩,李博) 下午 1.完成自主探索建图代码的编写(李超,钟浩,李博) 2.调试自主探索功能(李超,钟浩,李博) 3.优化自主探索功能代码(李超,钟浩,李博) Day 03 上午 1.完成初始化位姿功能 2.完成里程计清零功能 下午 1.完成可设置循环次数导航功能 2.调试初始化位姿,里程计清零,循环导航功能 Day 04 上午 1.完成单点设定导航插件 下午 1.完善单点设定导航插件 2.调试单点设定导航插件功能 Day 05 上午 1.完成多导航点记录插件 2.完成多点循环导航节点 下午 1.完成多点循环导航插件 2.调试多点循环导航插件功能 Day 06 上午 1.查找关于巡墙算法的解决方案 2.完成rrt_exploration(快速随机搜索树)的下载和demo测试 下午 1.修改rrt_exploration接口 Day 07 上午 1.修改rrt_exploration接口 下午 1.修改rrt_exploration接口 Day 08 上午 1.在仿真机器人上完成快速随机搜索树自主探索建图功能 2.优化导航UI界面 下午 1.在真实机器人上完成快速随机搜索树自主探索建图功能 2.优化导航UI界面 Day 09 上午 1.分别完成导航和自主建图的move_base参数的配置 下午 1.完成rviz中marker标记 Day 10 上午 1.将marker功能添加到真实机器人上,并完成各项参数优化。 下午 1.完成代码整理,说明文档撰写。
评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值