当前位置: 首页 > ops >正文

Apollo10.0学习——planning模块(8)之Frame类

Apollo自动驾驶平台中的Frame类是Planning模块的数据中枢,负责存储和管理单个规划周期内的所有相关数据,为路径生成、速度优化和决策任务提供统一的数据访问接口。


一、核心功能

  1. 数据整合中枢
    Frame类整合了来自多个模块的输入数据,包括:

    • 感知数据:包含障碍物信息(prediction_obsetacle)和红绿灯状态(traffic_light)。
    • 定位与车辆状态:车辆当前位置(localization_estimate)、速度、加速度等(vehicle_state)。
    • 导航信息:路由模块提供的全局路径(routing_response)。
    • 高精地图数据:通过ReferenceLineProvider生成的参考线(reference_line_info)。
  2. 规划上下文管理

    • 存储当前规划周期的中间结果,如参考线优化后的路径(ReferenceLineInfo)、障碍物的决策标签(Obstacle类中的ObjectDecisionType)。
    • 支持开放空间(OpenSpace)与非结构化道路(OnLane)两种规划模式,通过InitForOpenSpace方法适配不同场景。
  3. 跨阶段状态传递

    • 通过mutable_reference_line_info()等方法允许修改参考线信息,支持变道、避障等动态调整。
    • 记录调试信息(RecordInputDebug),用于规划过程的日志分析与问题排查。

二、数据结构与关键成员

  1. 核心成员变量

    成员变量类型描述
    sequence_num_uint32_t规划帧的唯一序列号,标识不同周期的数据。
    local_view_LocalView输入数据集合,包含感知、定位、底盘信息及路由响应。
    reference_line_info_std::list<ReferenceLineInfo>参考线列表,每条参考线包含路径、速度剖面及障碍物避让决策。
    open_space_info_OpenSpaceInfo开放空间规划所需的特殊数据,如泊车目标点、轨迹优化配置。
    planning_start_point_common::TrajectoryPoint规划轨迹的起点,通常为车辆当前位置或上一周期轨迹的终点。
  2. 关键方法

    • 初始化方法
      • Init():初始化结构化道路规划数据,加载参考线和导航路径段。
      • InitForOpenSpace():为泊车等场景初始化开放空间数据。
    • 数据访问接口
      • FindDriveReferenceLineInfo():选择成本最低且可行驶的参考线,用于路径跟踪。
      • Find(const std::string &id):根据ID查询障碍物对象,支持动态避障。
    • 状态管理
      • RecordInputDebug():记录输入数据到调试信息,用于可视化与日志分析。
      • ComputedTrajectory():获取待发布的最终轨迹,供控制模块执行。

三、设计特点与关联模块

  1. 性能优化设计

    • 序列号标识(sequence_num_:确保多线程环境下数据一致性,避免新旧帧数据混淆。
    • 参考线动态更新ReferenceLineProvider异步生成参考线,与主流程并行提升效率。
  2. 安全冗余机制

    • 障碍物决策擦除与重标记:在Process任务中可重置障碍物标签(如ignore),防止误判。
    • 终点距离校验:在IsTransferable方法中检查车辆到终点的距离,避免无效路径规划。
  3. 模块交互

    • 上游依赖:接收LocalizationPredictionRouting模块的数据,封装至local_view_
    • 下游输出:通过PublishableTrajectory发布轨迹至控制模块(Control)。
    • 场景切换:与Scenario类协作,根据交通状态切换变道、跟车等场景。

四、典型应用流程

以**车道跟随(LaneFollow)**场景为例,Frame类的工作流程如下:

  1. 数据注入:通过LocalView聚合感知、定位和路由数据。
  2. 参考线生成:调用ReferenceLineProvider生成车道级参考线。
  3. 任务链执行:依次执行LANE_CHANGE_DECIDERPATH_OPTIMIZER等任务,各任务通过Frame访问共享数据。
  4. 轨迹发布:最终轨迹存入ComputedTrajectory,经校验后发送至控制模块。

五、扩展对比

感知模块的Frame类(如SensorFrame)不同,Planning的Frame强调时序连续性:

  • 时间窗口管理:保存历史轨迹状态以实现平滑过渡。
  • 多参考线支持:候选参考线并行优化,通过成本函数选择最优解。

总结Frame类是Apollo Planning模块的数据枢纽,通过高效整合多源输入、管理规划上下文,确保决策与轨迹生成的一致性。其设计兼顾实时性与扩展性,是复杂交通场景下安全导航的核心基础。

http://www.xdnf.cn/news/7505.html

相关文章:

  • 使用VGG-16模型来对海贼王中的角色进行图像分类分类
  • python打卡day31
  • SQLynx 团队协作实践:提升数据库开发效率的解决方案​
  • 4-5月份,思科,华为,微软,个别考试战报分享
  • Axure中使用动态面板实现图标拖动交换位置
  • C++23 新增扁平化关联容器详解
  • 微小店推客系统开发:构建全民营销矩阵,解锁流量增长密码
  • Java EE进阶1:导读
  • Spring Cloud Gateway深度解析:原理、架构与生产实践
  • 根据当前日期计算并选取上一个月和上一个季度的日期范围,用于日期控件的快捷选取功能
  • MySQL 8.0 OCP 英文题库解析(七)
  • 在 Git 中添加子模块(submodule)的详细步骤
  • kotlin 将一个list按条件分为两个list(partition )
  • 漏洞检测与渗透检验在功能及范围上究竟有何显著差异?
  • iOS Runtime与RunLoop的对比和使用
  • 基于flask+vue的电影可视化与智能推荐系统
  • PostgreSQL架构
  • HTML应用指南:利用POST请求获取全国申通快递服务网点位置信息
  • 华为云鲲鹏型kC2云服务器——鲲鹏920芯片性能测评
  • 【EI会议火热征稿中】第二届云计算与大数据国际学术会议(ICCBD 2025)
  • 程序运行报错分析文档
  • 使用 adb 命令截取 Android 设备的屏幕截图
  • CentOS 7连接公司网络配置指南
  • BERT 作为Transformer的Encoder 为什么采用可学习的位置编码
  • 打破次元壁,VR 气象站开启气象学习新姿势​
  • 使用SQLite Studio导出/导入SQL修复损坏的数据库
  • 面试突击:消息中间件之RabbitMQ
  • 流复备机断档处理
  • 开疆智能Profinet转RS485网关连接温度送变器配置案例
  • Pytorch分布式训练,数据并行,单机多卡,多机多卡