move_base源码分析

1. 执行逻辑与流程

move_base节点主要基于地图传感器等提供的环境信息、根据机器人当前的位姿和指定的规划器提供的规划算法,规划出一条有效的全局路径和运动速度命令,从而实现定点避障导航行驶的功能。本文着重通过图片表示整个导航的执行逻辑与流程,不对全局规划、局部规划做细节分析。


未命名文件 (2).png

整个过程包含三个状态PLANNING(规划)、CONTROLING(控制)、CLEARNING(清除障碍物)
状态切换为PLANNING的情况:
state_默认值为PLANNING, 接收到新目标位置、控制状态下局部规划失败但当前控制时耗在可接收的控制时间限制内、清除状态下清除策略未全部执行完
状态切换为CONTROLING的情况:
规划出有效路径且runPlan_为true的情况
状态切换为CLEARING的情况:
在规划状态下规划失败且规划时间消耗大于可接收的planner_patience_时间则或尝试规划次数大于所设定的最大规划次数则状态切换为清除状态、震荡超时、控制状态下局部规划失败且控制周期大于controller_patience_则切换到清除障碍物的状态
发布零速度命令的情况:
1.规划线程中判定当前阶段为规划状态,且规划已尝试的次数与规划时耗都大于所设定的值,则发布零速进入清障模式;
2.接收到新目标,进入executeCb回调则发布零速;
3.局部地图过期,安全考虑则发零速;
4.executeCycle中在控制状态下,判断震荡超时则发布零速进入清障模式;
5.局部规划失败则发布零速进入清障模式;
6.在所有调用resetState()的情况下【目标位置已达到、恢复执行完成但未成功恢复、新规划路径坐标转换失败、抢占的不是新目标、更改规划器算法参数】
分析导航不顺畅的原因:
1.不顺畅走走停停说明中间执行过发布零速停机,着重分析发布零速停机的情况,待测试补充。

你可能感兴趣的:(move_base源码分析)