工作流程:
机器人发布nav_msgs/Odometry格式的里程计信息,相应的TF变换给导航功能包,然后导航功能包输出geometry_msgs/Twist格式的控制指令,最终通过这些指令控制机器人完成相应的运动。
在机器人导航过程中,有定位和路径规划两大部分。
自主导航:
机器人能够自主进行定位和导航,不需要过多的人为干预,在地图中设置一个目标点的集合,然后从中随机产生当前目标点,是机器人自主导航到达目标,并在短暂停留后继续循环前往下一个目标点。
请依据具体项目撰写和补充。
硬件清单如下:
具体说明如下:
使用注意:
请依据具体硬件撰写和补充。
总体软件框图如下:
导航软件框图如下:
右部:节点map_server 将地图信息,节点sensor sources将雷达信息、点云信息传至已在ROS系统中集成好的工装包集中,生成全局代价地图和局部代价地图。
左部:提供定位和TF变换,将TF信息,和里程计信息,传至框内。amcl 是一个用于二维移动机器人的概率定位系统。它实现了自适应(或 KLD 采样)蒙特卡洛定位方法(如 Dieter Fox 所述),该方法使用粒子滤波器来跟踪机器人相对于已知地图的姿态。
上部:目标点信息 goal。
框内:全局代价地图进行全局路径规划;局部代价地图进行局部路径规划;先全局路径规划,后局部路径规划,最后控制机器人底盘信息,即控制机器人移动。
重要知识点如下:
全局路径规划:接受的信息包括全局的地图以及起点和目标点。ROS官方导航功能包有Dijkstra和A*算法,默认Dijkstra。Dijkstra广度优先,A深度优先,Dijkstra算法计算源点到其他所有点的最短路径长度,A关注点到点的最短路径(包括具体路径),Dijkstra算法的实质是广度优先搜索,是一种发散式的搜索,所以空间复杂度和时间复杂度都比较高。对路径上的当前点,A*算法不但记录其到源点的代价,还计算当前点到目标点的期望代价,是一种启发式算法。
局部路径规划:接收全局路径规划器生成的路径,以及里程计的信息,地图信息,输出的是底盘运动的速度信息。先有全局路径规划器规划一条大致的路径,局部路径规划器把它分割成很多小段,再进行局部路径规划。在全局规划时对地图保存过的障碍物进行避障,在局部路径规划的时候会对新增的障碍物信息,也可以对运动的物体进行避障。DWA都是状态采样,先假设小车在什么位置,再根据这个位置的一系列状态信息,包括与退点的距离,与起点的距离,终点的距离,周围障碍物的信息等。
AMCL:自适应蒙特卡洛定位,粒子滤波就是用了蒙特卡洛思想的方法,把粒子滤波用到定位上就叫做蒙特卡洛定位,粒子滤波包括初始化计算权重、重采样、状态转移。
请依据具体软件撰写和补充。
实际导航支持算法较多,此处以默认算法演示为主。
1 打开终端输入以下命令:运行迷你机器人驱动
roslaunch tianbot_mini bringup.launch
2 打开新终端输入以下命令:运行雷达驱动
roslaunch tianbot_mini lidar.launch
3 打开新终端输入以下命令:运行SLAM
roslaunch tianbot_mini slam.launch
4 打开新终端输入以下命令:运行键盘遥控
roslaunch tianbot_mini teleop.launch
实际效果如下:
请依据具体导航实践撰写和补充。
五、讨论
项目完成过程中遇到的问题和积累的解决问题的经验,项目改进的方向,即体会和收获。
六、参考文献
1. [EB/OL]:doc.tianbot.com/tianbot_mini/2565840