(转)Apollo 2.0 框架及源码分析(三) | 感知模块 | Radar Fusion

2023-11-23 00:08

本文主要是介绍(转)Apollo 2.0 框架及源码分析(三) | 感知模块 | Radar Fusion,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://zhuanlan.zhihu.com/p/33852112

preview

文章提到了几个点:

一、雷达radar部分:

Apollo 2.0 的坐标体系是以 Lidar 为基准的。Apollo 可能认为 Velodyne 的位置是最准确的,因此 Camera 的位置标定参考 Velodyne, Radar 的标定参考 Camera。

阿波罗的感知几乎都依赖高精地图预先做ROI处理,以减少传感器数据处理的计算量浪费。

radar部分的代码,用到了一些方法来判断radar返回的对象是不是背景杂波。

Apollo 推荐使用的毫米波为Continental 的 ARS 408-21。ARS 408-21的介绍文档里也有简单提到,它可以对障碍物进行分类。但可靠性未知。该radar能追踪120个objects:大陆的Radar能够detect到超过120个object(没有进行过fusion的只有一点的cluster single point cluster)。 这种量产的Radar一般自带简单的detection和tracking算法。所以raw_object会有id,一般自带的算法会有 id, heading, velocity,object size, distance这些信息。在实际的测试过程中,该ID号是不能够作为跟踪关联的依据的,因为ID号在障碍物交叉的时候会出错。因此还应该再做一次关联!

preview

二、融合部分(radar 和 lidar):

object-level 的数据融合,该部分的输入为各传感器处理后的得到的object。

preview

 

多源信息的数据融合中,根据数据抽象层次,融合可分为三个级别:

  • 数据级融合 传感器裸数据融合,精度高、实时性差,要求传感器是同类的
  • 特征级融合 融合传感器抽象的特征向量(速度,方向等),数据量小、损失部分信息
  • 决策级融合 传感器自身先做出决策,融合决策结果,精度低、通信量小、抗干扰强

Apollo 应该是在特征层面对 objects 进行了融合。每当节点收到新的一帧数据的时候,融合部分就被调用。融合部分的输入为 SensorObjects, 输出为融合后的 object, 其大体的流程如下图所示。

preview

传感器的数据融合有两部分内容比较重要,即 数据关联 和 动态预估

数据关联用的是基于几何距离的HM匈牙利算法。

动态预估用的是:使用了非简化的估计误差协方差矩阵 \mathbf {P} _{k|k} 更新公式:

  • 标准卡尔曼滤波:{\displaystyle \mathbf {P} _{k|k}=(\mathbf{I-\mathbf {K} _{k}\mathbf {H} _{k}})\mathbf {P} _{k|k-1}}
  • Apollo:{\displaystyle \mathbf {P} _{k|k}=(\mathbf{I-\mathbf {K} _{k}\mathbf {H} _{k}})\mathbf {P} _{k|k-1}}(\mathbf{I-\mathbf {K} _{k}\mathbf {H} _{k}})^{\mathbf{T}}+ \mathbf{K}_{k}\mathbf{R}_{k}\mathbf {K} _{k}^{\mathrm {T}}

结合 Wikipedia 上关于卡尔曼滤波的介绍,我先总结下该问题的背景:

  1. Apollo 使用的估计误差协方差矩阵 \mathbf {P} _{k|k} 的更新公式是所谓的 Joseph form,而标准卡尔曼滤波通常使用的是简化版的更新公式
  2. 简化版的更新公式计算量小,实践中应用广,但只在 卡尔曼增益为最优 时有效
  3. 必须使用 Joseph form 的两种情况:
  • 使用了非最优卡尔曼增益
  • 算法精度过低,造成了数值稳定性相关的问题

阿波罗平台的计算力强大,因此为了算法精度,选择了非简化的P

 

 

三、总结:

preview

 

这篇关于(转)Apollo 2.0 框架及源码分析(三) | 感知模块 | Radar Fusion的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/413892

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

Python sys模块的使用及说明

《Pythonsys模块的使用及说明》Pythonsys模块是核心工具,用于解释器交互与运行时控制,涵盖命令行参数处理、路径修改、强制退出、I/O重定向、系统信息获取等功能,适用于脚本开发与调试,需... 目录python sys 模块详解常用功能与代码示例获取命令行参数修改模块搜索路径强制退出程序标准输入

Python pickle模块的使用指南

《Pythonpickle模块的使用指南》Pythonpickle模块用于对象序列化与反序列化,支持dump/load方法及自定义类,需注意安全风险,建议在受控环境中使用,适用于模型持久化、缓存及跨... 目录python pickle 模块详解基本序列化与反序列化直接序列化为字节流自定义对象的序列化安全注

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2

python pymodbus模块的具体使用

《pythonpymodbus模块的具体使用》pymodbus是一个Python实现的Modbus协议库,支持TCP和RTU通信模式,支持读写线圈、离散输入、保持寄存器等数据类型,具有一定的参考价值... 目录一、详解1、 基础概念2、核心功能3、安装与设置4、使用示例5、 高级特性6、注意事项二、代码示例