autoware decision maker.cpp代码学习-01

有一点首先要明确,本文只是讲述autoware里面op_planner里面决策模块。

一个behavior 状态机的实现在behaviorstatemachine.cpp中,主要介绍了不同行为状态下的相互流向关系,如果写过matlab stateflow的人肯定一看就明白。代码也并不复杂,复杂的是对一个状态机是根据不同条件来驱动的,要想改好状态机,需要熟悉整个机器大程序的数据流向,和具体每个条件的定义。那这些一个个条件就在decision maker.cpp里被定义,所以改之前第一件事就是先梳理条件。

BehaviorStateMachine* SwerveState::GetNextState()
//这是转向状态
{
  if(UtilityH::GetTimeDiffNow(m_StateTimer) < decisionMakingTime)
    return this;


  PreCalculatedConditions* pCParams = GetCalcParams();

  if(pCParams->distanceToNext > 0
        && pCParams->distanceToNext < m_pParams->minDistanceToAvoid//
        && !pCParams->bFullyBlock
        && pCParams->iCurrSafeTrajectory != pCParams->iPrevSafeTrajectory)
    return FindBehaviorState(this->m_Behavior);

  else
    return FindBehaviorState(FORWARD_STATE);//这是向前状态
}

这是状态机里面的一个状态,转向状态,当机器执行到这个状态下的时候,需要判断条件的输入,好确定是继续在这个状态下执行,还是执行下一个状态(向前)

return FindBehaviorState(Forward_state)

首先看条件:

1

pCParams->distanceToNext > 0

2

pCParams->distanceToNext < m_pParams->minDistanceToAvoid

3

!pCParams->bFullyBlock

4

pCParams->iCurrSafeTrajectory != pCParams->iPrevSafeTrajectory)

四个条件相互关系都是与,那么接下来去decisionmaker中找每个条件啥意思。

 
  

你可能感兴趣的:(c++,其他,经验分享)