1、什么情况下启动恢复机制
movebase的三种状态:
enum MoveBaseState {
PLANNING,//在规划路径中
CONTROLLING,//在控制机器人运动中
CLEARING//规划或者控制失败在恢复或者清除中。
};
一般默认状态或者接收到一个有效goal时是PLANNING,在规划出全局路径后state_会由PLANNING->CONTROLLING,如果规划失败则由PLANNING->CLEARING。在MoveBase::executeCycle中,会分别对这三种状态做处理:
还在PLANNING中则唤醒规划线程让它干活
如果已经在CONTROLLING中,判断是否已经到达目的地,否则判断是否出现震动?否则调用局部路径规划,如果成功得到速度则直接发布到cmd_vel,失败则判断是否控制超时,不超时的话让全局再规划一个路径。
如果出现了问题需要CLEARING(仅有全局规划失败、局部规划失败、长时间困在一片小区域三种原因),则每次尝试一种recovery方法,直到所有尝试完
movebase为recovery行为定义了如下三种原因
enum RecoveryTrigger
{
PLANNING_R,//全局规划失败
CONTROLLING_R,//局部规划失败
OSCILLATION_R//长时间困在一片小区域
};
以下三种情况,开始clearing
(1)
//check for an oscillation condition
if(oscillation_timeout_ > 0.0 &&
last_oscillation_reset_ + ros::Duration(oscillation_timeout_) < ros::Time::now())
{
publishZeroVelo

本文解析了movebase在规划路径、控制运动和障碍清除状态下的恢复机制,重点介绍三种终止方式及如何通过参数调整。了解了当机器人遇到震荡、规划超时和控制失败时的应对策略。
最低0.47元/天 解锁文章
1995

被折叠的 条评论
为什么被折叠?



