第三节、用navigation包做运动规划仿真
英文地址。英文教程里先介绍了turtlebot仿真建图、存图、装载地图并仿真运动规划,然后同样的流程介绍mybot的仿真过程。我们这里不再介绍turtlebot相关部分,直接测试mybot的仿真过程。
参考教程:
1、配置导航功能包。
2、用turtlebot例程建图。
3、一个turtlebot教程社区。
4、amcl的使用和介绍。
在进行测试之前,我们要把当前仓库切到navigation分支
fc@fc-msi:~/ROSWorkspace/src/mybot_ws$ git checkout navigation
切换到分支 'navigation'
您的分支与上游分支 'origin/navigation' 一致。
fc@fc-msi:~/ROSWorkspace/src/mybot_ws$ git branch
base
base_sensors
* navigation
一、建图Mapping
首先我们用Laser传感器把环境地图构建出来,打开一个终端
roslaunch mybot_gazebo mybot_world.launch
在另一个终端中开始构建地图
roslaunch mybot_navigation gmapping_demo.launch
gmapping包是一种SLAM建图包,采用粒子滤波方法构建未知环境的二维地图。
手动控制建图过程,初级教程里跟玩机器人小龟一样,上下左右前进后退转弯,建图需要一段时间
roslaunch mybot_navigation mybot_teleop.launch
在rviz中查看建图效果并做调整
roslaunch mybot_description mybot_rviz_gmapping.launch
二、保存地图
rosrun map_server map_saver -f /path/to/your/workspace/maps/test_map
三、装载地图
打开gazebo仿真环境
roslaunch mybot_gazebo mybot_world.launch
用amcl包开始导航定位,amcl是机器人二维环境下的概率定位系统,采用自适应的蒙特卡洛方法,针对已有地图系统采用粒子滤波器跟踪机器人的姿态。
roslaunch mybot_navigation amcl_demo.launch
在rviz中观察定位导航效果
roslaunch mybot_description mybot_rviz_amcl.launch
当你看到测试结果后,来重点剖析下这个amcl_demo.launch文件,
第一步是创建一个map_server节点加载我们制作好的地图。
第二步创建一个map_odom_broadcaster节点,将地图的坐标系和机器人里程计坐标系的变换关系确定,这里的参数意思就是两个坐标系完全一样。
第三步是创建一个amcl节点,具体的配置如图,scan参数为gazebo中发布的laser/scan,接收激光雷达数据;里程计坐标系为小车里程计坐标系,基础坐标系为小车的chessis.
第四步是最关键的move_base节点,关于move_base的这些yaml配置文件应当去参考Navigation工具包配置。
最后终端键入rqt_graph命令查看此时所有的Topics和Nodes之间的关系图
gazebo_gui节点暂时不理会,我们看到,有一个gazebo节点,它接收move_base节点发出的cmd_vel话题驱动小车运动,同时它发布/mybot/klaser/scan话题和/odom话题、tf话题供amcl节点使用;
amcl节点综合激光点云数据和tf数据作出姿态估计和结算,并更新tf话题,更新后的tf话题被送到move_base节点;
move_base节点根据/mybot/laser/scan话题、tf话题、odom话题和加载的map话题,还有用户指定的2d Navigation Goal,然后做global_plan和local_plan,并将结果通过action_topics回传给move_base节点。move_base提供了ROS导航的配置、运行、交互接口,它主要包括两个部分:
(1) 全局路径规划(global planner):根据给定的目标位置进行总体路径的规划;
(2) 本地实时规划(local planner):根据附近的障碍物进行躲避路线规划。