navigation stack的move_base包中一个插件。DWA的速度空间中如果没有可行的采样点,那么机器人get stuck,触发recovery行为。
recovery行为的实质是clear out space——试图搞清楚自己的处境:
- 首先机器人会清扫地图——conservative reset
- 然后原地旋转360度,刷新处境——clearing rotation
- 如果还是导航失败,机器人会更加激进的清扫地图——aggressive reset
- 然后原地旋转360度,刷新处境——clearing rotation
- 如果仍旧失败——mission impossible
源代码在move_base.cpp里面,继承了nav_core的接口,设置在move_base_params.yaml配置文件中。
- nav_core的recovery_behavior.h封装了RecoveryBehavior类。
- move_base中创建了名为”clear_costmap_recovery/ClearCostmapRecovery”、”rotate_recovery/RotateRecovery”、”clear_costmap_recovery/ClearCostmapRecovery”的默认对象。
- move_base的主程序是一个状态机,case CLEARING就调用RecoveryBehavior的runBehavior()。