求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
要资料
 
追随技术信仰

随时听讲座
每天看新闻
 
 
目录
Autoware.Auto
安装
系统依赖性和目标环境
使用 ADE 安装
使用 ADE 安装 arm64 系统
没有使用 ADE 安装
SVL 仿真器
使用
自动代客泊车示范
F1Tenth 演示1
F1Tenth 演示2
启动和测试行为计划
启动和测试全局计划
地图创建
初始化 NDT 定位器
运行 EKF 过滤器进行本地化
3D感知堆栈
记录/回放计划
使用rosbag进行本地化演示
Autoware Auto启动场景仿真器
建立
设计
Autoware Auto常见的设计-1
Autoware Auto常见的设计-2
Autoware.Auto 控制器设计
Autoware.Auto 驱动程序设计
Autoware.Auto 设计融合
Autoware.Auto 本地化
Autoware.Auto 的地图
Perception设计
Autoware.Auto 的 设计计划
Autoware.Auto 的 设计跟踪
Autoware.Auto 的 预测
Autoware.Auto 的系统
Autoware.Auto 的工具
Autoware.Auto 提供的指南
 
 
Autoware.Auto 的预测
李澎涛,俎涛 翻译(火龙果软件工程)
771 次浏览
1次  

域描述

该 prediction 子目录包含节点和库,这些节点和库提供在未来某个时间段内检测到的对象的位置估计。

子页面

预测架构

预测模块的目的是提供场景中与规划相关的动态对象的未来轨迹。

范围

本文档概述了 Autoware.Auto 中开发的货物交付 ODD 预测模块。

假如说

  • 与城市内机器人出租车应用相比,ODD 在预测需求方面的复杂性是有限的,
  • 没有为 ODD 训练机器学习模型的大型数据集

建议采用基于规则的方法作为实现工作与预期系统性能的良好权衡。

需求

  1. 在预测的每个阶段都使用一致的输入; 例如
    1. 1 输入和输出转换应该基于相同的信息; 即,使用相同的定位和测距信息,即使在输入转换之后但在执行输出转换之前对其中任何一个的更新变得可用
  1. 每个对象都针对可配置的时间范围进行预测。
  1. 整个模块的运行时间应保持在 ~50 ms 以下
  1. 轻松适应国家/地区不同的驾驶规则; 例如左手与右手驾驶。

设计

假设

随着预测的改进,需要在子组件内传播更多信息。 因此,最好将它们放入从一个 ROS2 节点调用的单独 C++ 库中。

预测依赖于高清地图的存在,并且在内部在参考地图框架中工作。

输入和输出的转换可以在单独的节点中完成,最好在同一个 ECU 上运行,甚至作为核心预测处理。 转换节点需要确定性策略来选择与地图坐标的转换,以满足 一致的输入 要求。 但是如果 tf2 使用,转换可能会在背景中发生变化,而预测节点不会意识到这一点。 因此,更容易在预测节点拥有的单个 C++ 对象中实现转换。

预测模块位于从跟踪器接收输入并将输出发布到规划和控制模块的管道中。

地图

地图需要提供具有中心线和边界的车道,以便能够确定对象是在给定区域内还是在给定区域外。

输入/输出/API

输入

  • 在里程计框架中 触发跟踪的动态对象
  • Lanelet2高清地图
  • 本土化
  • 交通信号状态
  • 以前的自我计划

一旦非触发输入的样本到达并且组件达到稳定状态,当跟踪的动态对象到达时开始新的预测迭代,并在可用时为其他输入获取样本。

输出

  • 在主题的里程计框架中预测动态对象 /prediction/predicted_objects

内部工作/算法

预测在概念上分为三个阶段

  1. 场景解读
  2. 孤独的世界预测
  3. 解决冲突

在第一阶段,处理可用的输入以提取更高级别的特征并为后续预测设置阶段。

在第 2 阶段,考虑到与意图相关的未来行为

  • 对象的当前(估计)状态
  • 基本运动学约束
  • 地图

好像物体是场景中唯一的动态物体; 即,在一个孤独的世界。 换句话说,其他对象的意图和状态 在这个阶段被 忽略了。

阶段 2 的输出是跨越时间范围的每个动态对象的每个意图的预测运动状态序列。

在阶段 3. 中,根据交通规则和简单的启发式方法解决自我车辆与阶段 2. 中产生的其他对象之间的冲突或碰撞。

场景解读

场景解释库可以用于多种用途:

  1. 协作
    1. 给定车道关联,为每个动态对象推断一个或多个操作或意图。 例如,对于在红绿灯处等待的车辆,其意图可能是直行或右转。 对于靠近但不在人行横道上的行人,选择是过马路或走不同的路径。 这可以概括为一个或多个lanelet ID 序列。
    2. 使用地图信息选择需要修改或可以跳过预测的动态对象; 例如停放的汽车,远离任何车道的行人。

场景解释的输出包括一条 PredictedDynamicObjects 消息,其中在适用的情况下填充了信息。 附加输出包括任何其他信息,例如地图上物体与车道的关联,从而简化下一步的预测。

预测的世界

在基于规则的方法中,预测轨迹是根据规则和启发式方法创建的。 预测主要有两大类:

  1. 基于地图的预测:对象跟随地图中的车道。 应用于映射到车道的车辆、摩托车、卡车等。
  2. 基于运动的预测:对象选择一条路径,而不考虑车道。 适用于车道上的行人和与任何车道无关的车辆。

作为实践中一种简单但有效的策略,在车道上的车辆预计将遵循运动学约束的中心线。 预计到中心线的横向距离会随着时间的推移而随着时间的推移而减少,这是随着具有启发式选择的衰减常数的指数衰减。

在第一次迭代中,仅使用对象的几何中心进行预测。 这会导致与点状几何形状显着不同的对象(例如铰接对象)出现问题。

对于基于运动的预测,最简单的方法是在当前速度的方向上推断当前位置。 这会导致车道附近的行人出现问题,尤其是当他们的方向无法可靠估计时。 这些问题可以通过冲突解决部分缓解。

解决冲突

冲突解决考虑了在孤独世界预测过程中产生的自我车辆与其他对象之间的冲突或碰撞,并根据交通规则和简单的启发式方法解决它们。

忽略其他代理之间的冲突; 这对于货物交付 ODD 中的缓慢行驶应该足够好,并且可以加快组件的速度。

该模块将先前的自我路径作为输入。 这减少了不确定性,因为车道关联不会面临任何歧义,并且规划的路径应该比使用更简单模型的预测更准确。

冲突解决的主要用例是

  1. 在未受保护的十字路口遵守交通规则,以便自我车辆让行并让行,
  2. 避免与自我背后的汽车发生虚拟冲突,例如在等待交通信号灯时。

例如,如果 ego 想要直行通过交叉路口,而迎面而来的车辆想要左转,这样预测的路径就会发生碰撞,那么其他车辆的预测路径会被修改为让 ego 让行。

交通规则和本地爱好。

在依靠地图获取有关车道优先级的信息时,如果地图过时,可能会遇到麻烦。 但这允许通过简单地交换适当的地图来适应各种 ODD 中的不同驾驶规则(例如左手驾驶与右手驾驶)。

每当处理本地偏好所需的行为预测存在差异时,它们应该可以通过参数进行配置。 例如,如果预测车辆在多车道道路上更喜欢右车道,那么“右”应该是至少在模块初始化时可以更改的参数。

已知限制/未决问题

  1. 不考虑其他流量代理之间的交互
  2. 自我和其他交通代理之间的交互被简化为冲突解决,并且不处理需要合作的场景,这样自我和另一个代理必须离开他们想要的轨迹才能共同达到他们的目标。
  3. 很难预测铰接式车辆,例如急转弯的拖拉机拖车。 这需要良好的感知能力才能将两个对象组合成一个良好的运动模型。 这是基于规则的方法被延伸的地方,使用机器学习方法可能更容易解决。
  4. 只有最佳估计是输出,输入或输出不使用不确定性。
  5. 未考虑静态障碍物
  6. 不考虑遮挡。 遮挡区域可以存储为占用网格,但目前在 Autoware.Auto 中不可用。
  7. 该地图被视为静态环境,因为目前没有来自感知的动态推断。

错误检测和处理

待定

未来的扩展/未实现的部分

机器学习

在基于规则的预测系统变得无法管理之前,可以向其添加多少规则是有限度的。 一个渐进的步骤是使用数据驱动的方法添加和替换架构的某些部分。 例如,场景解释可以基于 决策树 或神经网络推断意图。 另一种选择是使用神经网络来生成一个或多个轨迹或估计 描述轨迹的高斯分布的 参数。 这篇评论文章 全面介绍了基于深度学习的方法 。 本报告 对一些选定的模型进行了更深入的分析 。

下一个复杂级别是省略孤独世界的预测并直接考虑交互,例如在像 GRIP++ TraPHic 这样的深度神经网络中。

在需要解决其他交通代理与自我交互的场景中更好的性能需要放弃模块化方法并将预测与规划相结合,以便规划者调用预测来模拟不同的场景或规划和预测同时进行,更加紧密一体化。 后者的一个例子可以使用强化或 模仿学习

集成的最后一步是进行端到端学习,直接从传感器输入创建控制输出。

预测节点

这是 prediction_nodes 包装的设计文件。

目的/用例

该软件包包含一个以 autoware::prediction::PredictionNode .

例如,使用提供的启动文件启动它:

$ ros2 启动 prediction_nodes prediction_nodes.launch.py

设计

输入/输出/API

输入参数

  • time_step_ms ,默认值:50 毫秒
  • time_horizo​​n_ms ,默认值:3000 毫秒

有关更多详细信息,请查看 Lonely-world prediction autoware::prediction::Parameters .

输入

输入主题 输入类型 笔记
触发 /tracked_objects TrackedObjects
/route Route
/tracked_signals TrafficSignalArray

该节点还连接到提供 HADMapService .

输出

输出主题 输出类型
/prediction/predicted_objects PredictedObjects

未来的扩展/未实现的部分

Prediction 架构 相比,该节点目前缺少以下内容:

  1. 使用地图
  2. 转换输入
  3. 基于地图和运动的孤独世界预测
  4. 场景解读
  5. 解决冲突

相关问题

  • #986 添加包的初始版本

Lonely-world prediction

这是 lonely_world_prediction 包装的设计文件。

目的/用例

作为 预测架构 的一部分,孤独世界预测的目的是预测动态对象,就好像它们没有相互交互一样。

这个包提供了从 ROS 节点调用的 C++ 函数。

设计

输入/输出/API

在第一次迭代中,只能预测物体是静止的。 包括主标题

#include "lonely_world_prediction/lonely_world_prediction.hpp

并打电话

无效 predict_stationary ( autoware_auto_perception_msgs::msg::PredictedObjects & predict_objects, const autoware::prediction::Parameters & parameters);

输入 predicted_objects 已就地修改并包含返回时的预测路径。 每个路径由每个时间步的初始姿势的副本组成。 初始状态的任何速度或加速度都保留在输出中,但出于预测目的而忽略; 即,预测可能是非物理的。

PredictedObjects 可以从 TrackedObjects 使用 初始化

// #include "lonely_world_prediction/init_from_tracked.hpp" autoware_auto_perception_msgs::msg::PredictedObjects from_tracked ( const autoware_auto_perception_msgs::msg::TrackedObjects &);

参数 定义 _

  1. 时间步长 :两个连续预测姿势之间的时间差
  2. 时间范围 :从现在到未来的时间差,直到预测对象

如果 horizon MOD step > 0 ,则将额外的姿势添加到预测路径中,以便始终覆盖地平线。

假设/已知限制

  1. 由于物体方向的未知符号导致的不确定性不会被传输
  2. 预测的路径只有一个姿势,即使对象有多种形状。 这与跟踪器的已知限制相匹配

未来的扩展/未实现的部分

  1. 基于运动的预测
  2. 基于地图的预测

相关问题

  • #986 添加包的初始版本
欢迎参加课程:
MBSE(基于模型的系统工程)
系统思维与系统工程
系统工程方法与实践