【SLAM】基于explore_lite的移动机器人自主建图

系列文章目录

·【SLAM】基于explore_lite的移动机器人自主建图

·【SLAM】基于rrt_explore的移动机器人自主建图

·【问题解决】rrt_exploration功能包使用过程中报错处理​​​​​​​


前言

机器人自主建图有很多方式,比如基于位置边界的map-explore,基于快速搜索树的rrt-explore,指定区域自主探索建图frontier-explore,这几种方法各有优劣,博主接下来将对每种方法进行简单介绍、使用实现,和比较测评

一、简介

explore-lite提供了贪婪的基于边界的探索。当节点运行时,机器人会贪婪地探索它的环境,直到找不到边界,它的移动命令会发送至move-base节点。

explore_lite不会创建自己的成本图,这使得配置更容易,效率更高(资源更少)。Node 只是订阅nav_msgs/OccupancyGrid消息。机器人移动命令发送到move-base节点。

节点可以进行边界过滤,甚至可以在非膨胀地图上操作。目标黑名单允许处理机器人无法进入的地方,也就是说可以在move-base的的代价地图层中配置禁止层参数,explore-lite也会识别到,并不去探索这部分边界。

二、安装

对于explore-lite的安装有两种方式

自动安装:

sudo apt-get install ros-noetic-explore-lite

手动安装:

git clone  https://github.com/hrnr/m-explore.git

这个功能包的使用也很简单,src中是源码,include中是头文件,而我们使用时只需配置好相应的launch文件即可。

三、架构

 explore_lite订阅nav_msgs/OccupancyGrid和map_msgs/OccupancyGridUpdate消息来构建一个地图,它会在其中寻找边界,可以使用 move_base 发布的成本地图(即<move_base>/global_costmap/costmap),也可以使用由SLAM算法构建的地图。

然后explore-lite算法发布move-base移动指令给move-base节点,控制小车运动

需要提供的tf变换:global_frame → robots_base_frame

这种变换通常由映射算法提供。这些框架通常称为map和base_link。可以在launch文件中调整robot_base_frame名称。不需要设置global_frame。global_frame的名称将自动来自costmap_topic。

四、参数配置

explore.launch配置文件如下,其中需要注意的是costmap_topic 和 costmap_updates_topic。

<launch>
<node pkg="explore_lite" type="explore" respawn="false" name="explore" output="screen">
  <!--机器人底盘坐标系-->
  <param name="robot_base_frame" value="base_link"/>
  <!--地图主题-->
  <param name="costmap_topic" value="map"/>
  <!--地图更新,如果地图来源始终发布完整更新,即不提供此主题,则不需要-->
  <param name="costmap_updates_topic" value="map_updates"/>
  <!--指定是否发布可视化边界-->
  <param name="visualize" value="true"/>
  <!--计算新边界并重新考虑目标的速率(Hz)-->
  <param name="planner_frequency" value="0.33"/>
  <!--时间以秒为单位,当机器人在 progress_timeout 内没有任何进展时,将放弃当前目标-->
  <param name="progress_timeout" value="30.0"/>
  <!--用于加权边界,这个乘法参数影响边界权重的边界潜在分量(到边界的距离)-->
  <param name="potential_scale" value="3.0"/>
  <!--用于加权边界,该乘法参数影响前沿权重的前沿方向分量,此参数当前不执行任何操作,仅提供前向兼容性-->
  <param name="orientation_scale" value="0.0"/>
  <!--用于加权边界。,乘法参数影响边界权重(边界大小)的边界增益分量-->
  <param name="gain_scale" value="1.0"/>
  <!--变换机器人姿势时使用的变换容差-->
  <param name="transform_tolerance" value="0.3"/>
  <!--将边界视为探索目标的最小边界大小。以米为单位-->
  <param name="min_frontier_size" value="0.75"/>
</node>
</launch>

explore_costmap.launch的配置文件如下,与explore.launch相比只是关于地图话题costmap_topic 和 costmap_updates_topic做了修改,改为了move_base发布的地图话题,然后对最后一个参数进行了修改,因为move_base的代价地图有障碍物膨胀系数,所以将这个参数进行了略微扩大。

五、仿真实验

我这里是手动下载了explore_lite的功能包,我发现它的功能包文件夹名称和package.xml文件中定义的不一致,于是先将文件夹名称进行了修改。

 然后当我编译完工作空间的时候,运行这个功能包总会报错说:这个功能包无法定位

这时可以使用下面的代码解决:

catkin_make -DCATKIN_WHITELIST_PACKAGES=explore_lite

上面是编译自主建图的功能包,下面是地图融合的功能包。

catkin_make -DCATKIN_WHITELIST_PACKAGES=multirobot_map_merge

进行完这些步骤之后,我们就可以依次运行gazebo仿真、slam建图程序、move-base导航程序、rviz可视化界面、自主建图程序。

roslaunch kbot_gazebo view_kbot_with_laser_gazebo.launch    #启动gazebo仿真环境
roslaunch kbot_slam gmapping.launch    #启动gmapping建图算法和move_base
roslaunch kbot_slam view_slam.launch    #启动rviz可视化节点
roslaunch explore_lite explore.launch    #启动自主建图算法

实验效果如下:

 这是最终的建图效果,使用的是gmapping,基于滤波器的slam算法建图过程中有一些漂移,不过最终效果还是不错的。

移动机器人项目组任务安排表 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.完成代码整理,说明文档撰写。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值