上海硅步ROS连载系列46期 移动机器人导航
转载 2018-04-14 10:06 上海硅步 来源:上海硅步移动机器人的自主定位导航过程如下:
1)采用激光扫描仪或深度相机创建地图;
2)定位:机器人根据传感器的信息并采用自适应蒙特卡罗定位算法计算机器人在地图中的当前位置。
3)全局路径规划:采用Dijkstra(迪杰斯特拉)算法规划出机器人从当前位置到目标位置的全局最优路径,该算法以起始点为中心向外层扩展,直到扩展到终点为止。
4)控制机器人运动:采用动态窗口法计算出控制命令并发送给移动平台,使其沿规划的路径前进,如图1所示。
图1移动机器人的导航定位
下面将以TurtleBot机器人为例,介绍实现自主定位导航的方法。
1导航仿真
为了简单,我们使用采用rbx1_nav/maps中的地图进行定位导航仿真实验。
在终端窗口中,分别运行下面的命令:
$ roslaunch rbx1_bringup fake_turtlebot.launch
$ roslaunch rbx1_nav fake_amcl.launch map:=test_map.yaml
$ rosrun rviz rviz -d `rospack find rbx1_nav`/amcl.rviz
其中fake_amcl.launch文件位于rbx1_nav/launch目录下,它的作用是加载地图、启动并配置move_base节点、运行fake_location节点。
运行结果如图2所示:
图2启动定位导航
使用rviz工具栏上的2DNav Goal,为机器人设置目标位姿(绿色箭头),运行效果如图3所示。
图3定位导航仿真
2导航实测
在实际中,控制TurtleBot需要两台PC,即TurtleBotPC与用户PC,其中TurtleBot PC主要用于控制TurtleBot机器人的运动,用户PC是人机交互端,可显示TurtleBotPC发送过来的图像信息以及向TurtleBot PC发送控制命令,两个PC之间通过无线网络并以主题的形式进行通信。
首先配置TurtleBotPC与用户PC的IP地址,使两者接入同一无线网络。
然后在TurtleBotPC上分别运行命令:
$ roslaunch turtlebot_bringup minimal.launch
$ roslaunch turtlebot_bringup 3dsensor.launch
其次在用户PC上运行如下命令,启动Rviz:
$ roslaunch turtlebot_rviz_launchers view_robot.launch
运行结果如图4所示
图4启动TurtleBot导航实验
在用户PC中启动Rviz之后,可在Rviz上看到TurtleBot周围有一簇绿色的小箭头,如图5所示。这些绿色的箭头是amcl反馈的机器人的位姿范围,箭头越分散说明位姿越不确定。因此,我们需要在地图中设置TurtleBot机器人的实际位置和方向,即TurtleBot在环境中的实际位姿与地图中的位姿相匹配,以保证准确的定位。首先点击Rviz工具栏上的2DPose Estimate,然后点击地图上TurtleBot实际所在的大概位置点,调整绿色箭头的方向,使其与TurtleBot的实际方向一致。如果激光扫描的结果与环境边界重合,则说明TurtleBot在地图上的位姿与实际相符,否则重新调整。
图5 TurtleBot初始状态
设置TurtleBot的初始位姿之后,可以使用2DNav Goal工具设置TurtleBot的目标位姿。TurtleBot机器人的导航定位结果如图6所示。
图6 TurtleBot导航实验结果
由图6可知,TurtleBot能够较准确的到达目标位姿,说明ROS的导航功能包集能够实现移动机器人的自主导航定位。