Apollo10.0学习——planning模块(8)之Frame类
Apollo自动驾驶平台中的Frame
类是Planning模块的数据中枢,负责存储和管理单个规划周期内的所有相关数据,为路径生成、速度优化和决策任务提供统一的数据访问接口。
一、核心功能
-
数据整合中枢
Frame
类整合了来自多个模块的输入数据,包括:- 感知数据:包含障碍物信息(
prediction_obsetacle
)和红绿灯状态(traffic_light
)。 - 定位与车辆状态:车辆当前位置(
localization_estimate
)、速度、加速度等(vehicle_state
)。 - 导航信息:路由模块提供的全局路径(
routing_response
)。 - 高精地图数据:通过
ReferenceLineProvider
生成的参考线(reference_line_info
)。
- 感知数据:包含障碍物信息(
-
规划上下文管理
- 存储当前规划周期的中间结果,如参考线优化后的路径(
ReferenceLineInfo
)、障碍物的决策标签(Obstacle
类中的ObjectDecisionType
)。 - 支持开放空间(OpenSpace)与非结构化道路(OnLane)两种规划模式,通过
InitForOpenSpace
方法适配不同场景。
- 存储当前规划周期的中间结果,如参考线优化后的路径(
-
跨阶段状态传递
- 通过
mutable_reference_line_info()
等方法允许修改参考线信息,支持变道、避障等动态调整。 - 记录调试信息(
RecordInputDebug
),用于规划过程的日志分析与问题排查。
- 通过
二、数据结构与关键成员
-
核心成员变量
成员变量 类型 描述 sequence_num_
uint32_t
规划帧的唯一序列号,标识不同周期的数据。 local_view_
LocalView
输入数据集合,包含感知、定位、底盘信息及路由响应。 reference_line_info_
std::list<ReferenceLineInfo>
参考线列表,每条参考线包含路径、速度剖面及障碍物避让决策。 open_space_info_
OpenSpaceInfo
开放空间规划所需的特殊数据,如泊车目标点、轨迹优化配置。 planning_start_point_
common::TrajectoryPoint
规划轨迹的起点,通常为车辆当前位置或上一周期轨迹的终点。 -
关键方法
- 初始化方法
Init()
:初始化结构化道路规划数据,加载参考线和导航路径段。InitForOpenSpace()
:为泊车等场景初始化开放空间数据。
- 数据访问接口
FindDriveReferenceLineInfo()
:选择成本最低且可行驶的参考线,用于路径跟踪。Find(const std::string &id)
:根据ID查询障碍物对象,支持动态避障。
- 状态管理
RecordInputDebug()
:记录输入数据到调试信息,用于可视化与日志分析。ComputedTrajectory()
:获取待发布的最终轨迹,供控制模块执行。
- 初始化方法
三、设计特点与关联模块
-
性能优化设计
- 序列号标识(
sequence_num_
):确保多线程环境下数据一致性,避免新旧帧数据混淆。 - 参考线动态更新:
ReferenceLineProvider
异步生成参考线,与主流程并行提升效率。
- 序列号标识(
-
安全冗余机制
- 障碍物决策擦除与重标记:在
Process
任务中可重置障碍物标签(如ignore
),防止误判。 - 终点距离校验:在
IsTransferable
方法中检查车辆到终点的距离,避免无效路径规划。
- 障碍物决策擦除与重标记:在
-
模块交互
- 上游依赖:接收
Localization
、Prediction
和Routing
模块的数据,封装至local_view_
。 - 下游输出:通过
PublishableTrajectory
发布轨迹至控制模块(Control
)。 - 场景切换:与
Scenario
类协作,根据交通状态切换变道、跟车等场景。
- 上游依赖:接收
四、典型应用流程
以**车道跟随(LaneFollow)**场景为例,Frame
类的工作流程如下:
- 数据注入:通过
LocalView
聚合感知、定位和路由数据。 - 参考线生成:调用
ReferenceLineProvider
生成车道级参考线。 - 任务链执行:依次执行
LANE_CHANGE_DECIDER
、PATH_OPTIMIZER
等任务,各任务通过Frame
访问共享数据。 - 轨迹发布:最终轨迹存入
ComputedTrajectory
,经校验后发送至控制模块。
五、扩展对比
与感知模块的Frame类(如SensorFrame
)不同,Planning的Frame
强调时序连续性:
- 时间窗口管理:保存历史轨迹状态以实现平滑过渡。
- 多参考线支持:候选参考线并行优化,通过成本函数选择最优解。
总结:Frame
类是Apollo Planning模块的数据枢纽,通过高效整合多源输入、管理规划上下文,确保决策与轨迹生成的一致性。其设计兼顾实时性与扩展性,是复杂交通场景下安全导航的核心基础。