本文共 631 字,大约阅读时间需要 2 分钟。
4.2.2 global planner Thread工作过程
Global planner的处理过程定义在函数 void MoveBase::planThread()中。
工作流程如下:
1 此线程启动之后,会处理等待状态,直到action server接收到goal请求或者自己等待时间到期后把它唤醒。
两个线程之间通过runPlanner 变量进行同步,action server会把它置为true。
2 获取goal信息,将路径规划的buffer清空
3 调用makePlan()函数选择全局路径
MoveBase::makePlan()函数最终会调用配置的全局路径规划器的makePlan()函数进行实际的全局路径计算
bool MoveBase::makePlan()
{
}
4 如果得到了全局路径规划,则
赋值最新的路径规划到latest_plan_
把new_global_plan_置为true
state_ = CONTROLLING;
5 如果没有得到全局路径,并且state_==PLANNING
机器人此时没有处于运动中。
如果planning_retries_没有超过配置值,则
回到步骤1,重新选路。
如果超过了配置值,则
state_ = CLEARING;
runPlanner_ = false;
publishZeroVelocity();
6 根据planner_frequency_做sleep
回到步骤1,重新循环。
转载地址:https://blog.csdn.net/lclfans1983/article/details/106731220 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!