在看Apollo预测部分代码时,一开始被很多的模块搞晕了,一时不知从何下手。而且网上没能找到比较有价值的解析代码结构的博客,因此,在理清了预测部分的结构之后,想到写一篇博客,供同样学习预测模块的伙伴们参考。本篇博客只涉及结构解析,不进行具体的算法分析,如有错误,恳请批评指正。
预测模块的工作是预测感知模块检测到的障碍物的行为。整个模块的输入是障碍物信息(位置、速度、加速度、方位角)、本车的规划轨迹、本车定位信息; 输出是障碍物的预测轨迹及其概率。预测模块与其他模块的关系如图所示。
预测模块主要包括四个部分:container、scenario、evaluator和predictor。
其中,container负责存储输入数据,包括PoseContainer、ADCTrajectoryContainer和ObstacleContainer,分别存储本车定位信息,本车已规划的轨迹信息和障碍物信息。
scenario的作用是分析本车所处场景。
evaluator的作用是预测障碍物的路径和速度,并给出一个概率。
predictor负责生成障碍物的预测轨迹。
调用这些模块是在prediction_component.cc中,因此,学习预测模块代码首先应从prediction_component.cc开始,预测的主要工作是在函数 PredictionComponent::Proc中进行的。<