机器人ROS自主导航 – navigation
导航是在给定环境中将机器人从一个位置移动到指定目的地,上一章我们介绍了通过gmapping建图,导航需要使用上一章建好的地图,通过amcl寻找位置,move_base路径规划从而实现机器人自主导航。
启动底盘通讯与雷达节点
在主控节点启动与底盘的通讯与雷达,同时程序会将IMU姿态与位置融合发布odom位置信息
roslaunch lingao_bringup robot.launch
等待IMU校准后出现First IMU message received
并且没有错误基本上就是启动成功
启动navigation导航包
在主控节点启动nav导航包,并且导入名字是map的地图
roslaunch lingao_navigation navigate.launch
通过下图可以看到没有error报错即,最后出现odom received!是启动成功
- 使用其他名字地图进行导航
我们地图默认保存在lingao_navigation/maps/
,如果你保存其他名字地图并且需要使用该地图导航只需要设置map_name
参数即可,例如使用地图名为map2进行导航见以下示例
roslaunch lingao_navigation navigate.launch map_name:=map2
启动本地可视化rviz
在本地PC主机启动rviz在窗口,打开导航设置
roscd lingao_navigation/rviz/
rviz -d navigate.rviz
现在可以看到地图已经载入,出现机器人tf位置,但是机器人位置不对
初始姿势位置
在运行导航之前,必须执行初始姿势估计,因为此过程将初始化对导航至关重要的AMCL参数。必须将机器人正确放置在地图上,并且雷达数据应与显示的地图完全重叠。
在设置小车初始位置后amcl会释放很多粒子,需要通过控制小车以缩小定位误差。
- 单击RViz菜单中的按钮
2D Pose Estimate
- 单击实际机器人所在的地图,然后将绿色的大箭头对向机器人车头方向拖动。
- 重复步骤1和2,直到雷达传感器覆盖地图对应位置。
- 通过来回移动机器人以收集周围的环境信息,并缩小小车在地图上的估计位置,该地图上会显示绿色小箭头。
粒子收敛前:
移动小车粒子收敛后:
设定导航目标
- 单击RViz菜单中的按钮
2D Nav Goal
- 在地图上单击以设置机器人的目的地,然后拖动鼠标,出现红色的大箭头对应车头位置,松开鼠标后即开始导航
放置导航目标位置:
正在导航:
到达位置: