recovery behavior

navigation stack的move_base包中一个插件。DWA的速度空间中如果没有可行的采样点,那么机器人get stuck,触发recovery行为。

recovery行为的实质是clear out space——试图搞清楚自己的处境:

  1. 首先机器人会清扫地图——conservative reset
  2. 然后原地旋转360度,刷新处境——clearing rotation
  3. 如果还是导航失败,机器人会更加激进的清扫地图——aggressive reset
  4. 然后原地旋转360度,刷新处境——clearing rotation
  5. 如果仍旧失败——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()。