·【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 发布的成本地图(即
然后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。
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算法建图过程中有一些漂移,不过最终效果还是不错的。