movebase导航和地图数据的使用 - 8 导航中recovery的逻辑

本文探讨了movebase导航系统中触发恢复(recovery)的情况,包括无法规划路径、局部规划器失效及机器人振荡等问题。当出现这些问题时,movebase会进入CLEARING状态并执行恢复行为,如ClearCostmapRecovery(清除障碍物图层数据)和RotateRecovery(180度旋转更新障碍物信息)。恢复过程中主要关注的是如何重新获取有效路径并避免障碍物。
摘要由CSDN通过智能技术生成

什么时候会触发recovery?

enum RecoveryTrigger

{

PLANNING_R, //无法算出plan

CONTROLLING_R, //local planner无法利用localcostmap算出一个localplan,从而无法得到速度命令

OSCILLATION_R//机器人在不断抖动

};



1. planthread里,如果发现无法算出最新的plan,就会把movebase的状态设置为CLEARING

2. MoveBase::executeCycle的循环中,在CONTROLLING状态时,即还未到达目的地并且已经获得Plan的状态下。如果长时间没有成功拿到localplanner算出的速度命令,比如localplanner无法算出速度(可能是localcostmap里有障碍物),就会设置movebase状态为CLEARING.

3. 在震动时,如果没有恢复,也会设置状态成CLEARING.

recovery时会干什么?

会执行recoverybehavior.

那么要看都建立了多少behaviors:

MoveBase::loadDefaultRecoveryBehaviors函数会加载一些defaultbehavior.

基本上两种类型:

ClearCostmapRecoveryRotateRecovery

ClearCostmapRecovery会清理从机器人所在位置开始,默认直径reset_distance_=3米的矩形范围之外costmap中数据,具体清理costmap中的哪个layer中的数据呢,默认清理obstaclelayer的数据。看ClearCostmapRecovery::runBehavior()。清理时,将地图中内容设置为未知。会把globallocalcostmap中指定的layer都清理掉。



RoateRecovery比较简单,就是让机器人旋转180度。这样就可以更新周围的障碍物数据。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值