上一节我们通过gmapping实现了SLAM,现在我们可以在上一节构建好的地图中导航了。
一、导航框架
导航主要分为机器人定位和路径规划两大部分。ROS分别提供了功能包
1.move_base:实现机器人导航中的最优路径规划。
2.amcl:实现二维地图中的机器人定位。
我们先用命令下载导航功能包
sudo apt-get install ros-melodic-navigation
move_base功能包和amcl功能包的参数和发布的话题大家可以去古月老师的书里看看。
二、代价地图的配置
我们打开mini_nav/config/base文件夹,里面有三个配置代价地图的文件
通用配置文件
代价地图用来存储周围环境的障碍信息,其中需要声明地图关注的机器人传感器消息,以便于地图信息的更新。针对两种代价地图通用的配置选项,创建为
costmap_common_params.yaml,代码如下:
全局规划配置文件
全局规划配置文件用于存储配置全局代价地图的参数,命名为global_costmap_params.yaml,代码如下:
本地规划配置文件
本地规划配置文件用于存储配置本地代价地图的参数,命名为local_costmap_params.yaml,代码如下:
三、本地规划器配置
本地规划器base_local_planner的主要作用是,根据规划的全局路径计算发布给机器人的速度控制指令。该规划器要根据机器人的规格配置相关参数,在
tianbot_navigation/config/tianbot文件夹创名为
base_local_planner_params.yaml的配置文件,代码如下:
该配置文件声明机器人本地规划采用Trajectory Rollout算法,并且设置算法中需要用到的机器人速度、加速度阈值等参数。
四、在gazebo中仿真机器人导航
创建move_base.launch文件
先在mini_nav/launch文件夹创建move_base.launch文件,代码如下:
move_base.launch文件里调用了上面的代价地图以及本地规划器等配置文件。
amcl.launch文件
首先我们下载amcl功能包
sudo apt install ros-melodic-amcl
amcl功能包能够让机器人在任意状态下都可以推算出自己在地图中所处的位置。ROS提供了一种自适应的蒙特卡洛定位方法(amcl),这是一种概率统计的方法,针对已有的地图使用粒子滤波器跟踪一个机器人的姿态。
在mini_nav/launch文件夹创建amcl.launch文件,代码如下:
nav_demo.launch文件
在mini_nav/launch文件夹创建nav_demo.launch文件,将上一节建好的地图和上边的move_base与amcl一同放入,代码如下:
运行效果
接下来就能用如下命令在gazebo中仿真机器人导航功能了
roslaunch mini_gazebo simulation_camera.launchroslaunch mini_nav nav_demo.launch
如下图所示,我们点击rviz中的2D Nav Goal图标,在点击rviz中的一个导航目标点,机器人可自动导航到该位置。如果你在机器人导航的时候,在它要经过的路径上放置一些障碍物,机器人会绕过障碍物继续向目标点运动,这是由move_base功能包实现的。
五、小结
本篇是tianbot_mini小车建图导航的收尾篇。讲述了小车在建好地图以后如何导航至目标点。在这次的地图中还贴有aruco码,以方便大家对机器视觉+多点导航方面的探索。示例代码也在开源的功能包中,欢迎大家继续探索更多功能。相信大家也非常好奇模型是如何贴图的吧,模型贴图非常有用,可以拓展小车在仿真中机器视觉方面的运用,下一节我会教大家如何在gazebo模型上边贴图。
参考资料
1、古月老师的<<ROS机器人开发实践>>