🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 10.1 Navigation Stack ## 10.1.1 Navigation Stack Navigation Stack是一个ROS的metapackage,里面包含了ROS在路径规划、定位、地图、异常行为恢复等方面的package,其中运行的算法都堪称经典。Navigation Stack的主要作用就是路径规划,通常是输入各传感器的数据,输出速度。一般我们的ROS都预装了Navigation。 Navigation Stack的源代码位于https://github.com/ros-planning/navigation,包括了以下几个package: | 包名 | 功能 | | :------: | :------: | | amcl | 定位 | | fake_localization | 定位 | | map_server | 提供地图 | | move_base | 路径规划节点 | | nav_core | 路径规划的接口类,包括base_local_planner、base_global_planner和recovery_behavior三个接口 | | base_local_planner | 实现了Trajectory Rollout和DWA两种局部规划算法 | | dwa_local_planner| 重新实现了DWA局部规划算法| | parrot_planner| 实现了较简单的全局规划算法| | navfn| 实现了Dijkstra和A*全局规划算法| | global_planner| 重新实现了Dijkstra和A*全局规划算法| | clear_costmap_recovery| 实现了清除代价地图的恢复行为| | rotate_recovery| 实现了旋转的恢复行为| | move_slow_and_clear| 实现了缓慢移动的恢复行为| | costmap_2d| 二维代价地图| | voxel_grid| 三维小方块(体素?)| | robot_pose_ekf|机器人位姿的卡尔曼滤波| 这么多package,你可能会觉得很乱,不过担心,在使用中其实还是比较简单的,我们接下来会对常用的主要功能进行介绍。 ## 10.1.2 Navigation工作框架 机器人的自主导航功能基本全靠Navigation中的pacakge,来看这张图: ![slam_gmapping](https://img.kancloud.cn/79/cc/79cc5bec6aef534fa6806c872b9b07e2_1060x435.png) 上图中位于导航功能正中心的是`move_base`节点,可以理解为一个强大的路径规划器,在实际的导航任务中,你只需要启动这一个node,并且给他提供数据,就可以规划出路径和速度。 `move_base`之所以能做到路径规划,是因为它包含了很多的插件,像图中的白色圆圈`global_planner`、`local_planner`、`global_costmap`、`local_costmap`、`recovery_behaviors`。这些插件用于负责一些更细微的任务:全局规划、局部规划、全局地图、局部地图、恢复行为。而每一个插件其实也都是一个package,放在Navigation Stack里。 关于move_base我们后面会进一步介绍,先来看看`move_base`外围有哪些输入输出。 ### 输入 * `/tf`:提要提供的tf包括`map_frame`、`odom_frame`、`base_frame`以及机器人各关节之间的完成的一棵tf树。 * `/odom`:里程计信息 * `/scan`或`/pointcloud`:传感器的输入信息,最常用的是激光雷达(sensor_msgs/LaserScan类型),也有用点云数据(sensor_msgs/PointCloud)的。 * `/map`:地图,可以由SLAM程序来提供,也可以由`map_server`来指定已知地图。 以上四个Topic是必须持续提供给导航系统的,下面一个是可随时发布的topic: * `move_base_simple/goal`:目标点位置。 有几点需要注意: 1.move_base并不会去发布tf,因为对于路径规划问题来说,假设地图和位置都是已知的,定位和建图是其他节点的事情。 2.sensor_topics一般输入是激光雷达数据,但也有输入点云的情况。 3.图中map_server是灰色,代表可选,并不表示`/map`这个topic是可选,必须提供地图给move_base。 ### 输出 * `/cmd_vel`:`geometry_msgs/Twist`类型,为每一时刻规划的速度信息。