ADAS多传感器后融合算法解析-上篇

2024-03-28 02:36

本文主要是介绍ADAS多传感器后融合算法解析-上篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ADAS多传感器后融合算法解析-上篇

image

附赠自动驾驶学习资料和量产经验:链接

ADAS系统是一种高自动化的软件应用,对系统的鲁棒性与可靠性要求很高,单一传感器往往存在一定限制,此时便需要多传感器融合。多传感器融合会带来如下收益:

  • 可以在部分场景提升整体感知精度。

  • 某一传感器出现错误/失效时可以使用另一传感器进行补偿。

  • 多传感器可以扩大FOV范围。

在论文《A Review of Data Fusion Techniques》中对融合技术分类中对融合分成以下三类,可见与上面预期收益是对应的:

  • 协作型:多个输入可以组成远比原始信息更复杂的信息。

  • 冗余型:两个或多个输入提供同一个目标信息用于增强可信度。

  • 互补型:输入为同一场景的不同部分用于形成完整的全局信息。

文章将分上下两部分对ADAS中后融合相关算法策略进行介绍。

一、融合架构

如下图为不同论文介绍的融合架构,虽命名方式有所不同,但基本可以分为以下两类:

image

  • 前融合:集中式架构/low-level融合架构。

  • 后融合:分布式架构/high-level融合架构。

前融合的中心思想是将所有传感器的原始信息(点云/图像)全都传给中心融合模块,集中在融合模块做跟踪、关联与估计。前融合可以使用深度学习训练网络来实现,也可以对raw data进行关联与融合来跟踪。后者对时间的同步性有较高的要求,否则会影响关联的准确性。

后融合的中心思想是每个传感器使用其内部的滤波与跟踪算法,融合模块做的就是对多个传感器的滤波结果有效的结合起来。由于每个传感器输出已经为目标/track,因此此种融合也可以称为目标级别/track级别融合。

image

当然我们也可以选择一种折中的方法,称为feature-level。中心思想为从raw data中提取特征信息后送入融合模块进行跟踪融合。比如我们可以提取目标的轮廓信息进行扩展目标跟踪。主要缺点就是:接口不容易定义,不同传感器可能提取的特征有差异,在有新增传感器的情况下可能造成融合框架失效。

下图为low-level、feature-level与high-level三种融合架构的优缺点对比:

image

可见后融合相比前融合有如下优点:

  • 解耦性好,接口可封装,方便模块化开发。

  • 节省带宽,可以降低成本。

  • 对传感器不敏感,可保证系统稳定。

  • 牺牲一定精度情况下,降低了算法复杂度。

  • 方便问题定位回推,易于落地。

当前业界主要采用的融合框架仍为后融合框架。Tier1一般不会放弃后融合架构,因为在商业上来说后融合可以即插即用,单个产品可以卖给主机厂让他们采购别的传感器做拼接,主要还是得益于这个架构的方便落地以及良好的可扩展性。主机厂则一般会在基于后融合框架的系统稳定后,逐步向前融合探索,拿到更多的信息以提升精度。

RC后融合架构一般可达成的效果(应实现功能):

  • 目标的位置、速度等信息精度不低于最好的传感器。

  • 大大增强系统鲁棒性,如降低单camera传感器的漏检率/单Radar传感器的虚警率;对传感器模块失效可容错等。

二、接口

如上可知,后融合架构的输入为radar与camera跟踪滤波后的目标级别track信息,输出为融合模块维护的全局track。那全局track中一般包含哪些信息,不同公司有不同的接口设计。

如下为Apollo的目标接口表:

接口描述 idsensor name polygon目标点云track信息track_idtrack id tracking_time跟踪时间 latest_tracked_time最近一个更新的时间戳motion 信息motion_state"UNKNOWN = 0, MOVING = 1,STATIONARY = 2" center车中心点坐标 center_uncertainty位置不确定度 anchor_point锚点 velocity速度 velocity_uncertainty速度不确定度 velocity_converged是否收敛的flag velocity_confidence收敛可信度 acceleration三方向加速度 acceleration_uncertainty加速度不确定度 direction方向矢量 theta朝向角 theta_variance朝向角方差 drops最多100帧的历史轨迹feature 信息size长宽高 size_variance长宽高不确定度 type"UNKNOWN = 0, UNKNOWN_MOVABLE = 1,UNKNOWN_UNMOVABLE = 2,PEDESTRIAN = 3,BICYCLE = 4,VEHICLE = 5,MAX_OBJECT_TYPE = 6" type_probs每个类别的概率 sub_type"UNKNOWN = 0, UNKNOWN_MOVABLE = 1,UNKNOWN_UNMOVABLE = 2,CAR = 3,VAN = 4,TRUCK = 5,BUS = 6,CYCLIST = 7,MOTORCYCLIST = 8,TRICYCLIST = 9,PEDESTRIAN = 10,TRAFFICCONE = 11,MAX_OBJECT_TYPE = 12," sub_type_probs每个细分类别的概率 confidence存在概率其他flagb_cipvobj是否为CIPV car_light"brake_visible = 0.0f brake_switch_on = 0.0fleft_turn_visible = 0.0fleft_turn_switch_on = 0.0fright_turn_visible = 0.0fright_turn_switch_on = 0.0f"

三、后融合策略

1 无记忆策略与有记忆策略

既然融合端要输出全局track,那如何创建与维护它呢,一般有两种融合策略:

  • 无记忆融合策略

  • 有记忆融合策略

如下图为无记忆的融合策略,此框架中,不保留全局track的信息,传感器级别的数据在预设定的融合周期时进行融合。

image

融合端在kG-3时刻sensor i在ki-1时刻上报数据时,先不进行融合,而将这部分数据存储下来,在KG-2时刻收到sensor j上报的数据时,再进行融合生成全局track。自然kG-3时刻收到的sensor i的数据需要预测到kG-2时刻。如果有多个传感器,那就依次融合。因为在每个融合周期,全局track都是新生成的,和上一融合周期的全局track没有关系,所以此策略叫无记忆的融合策略。

如下图为有记忆的融合策略,此框架保留全局track的信息,在传感器数据来时,对全局track进行预测后马上融合传感器数据。

image

融合端在kG-3时刻sensor i在ki-1时刻上报数据时,立刻就进行融合了。而后将全局track数据进行预测,在kG-2时刻sensor j的数据来了,再次进行融合,以此类推。与无记忆策略相比,在于全局track在创建后进行保留维护。此策略灵活性较强,具有“即插即用”的优势,因为不同传感器数据之前被隔离开了,传感器数据没有直接接触,都是间接通过全局track进行接触,所以添加与移除某一帧传感器的数据不会对融合端造成较大影响。

当前使用这两种策略的厂商都有,Valeo一篇论文明确说明了他们使用的是无记忆融合策略,Apollo、BMW、huawei等公司使用的是有记忆的融合策略。

接下来主要介绍有记忆的融合策略,虽然这种策略使用起来不错,但是会出现两个问题,如下:

  • 相关性问题

  • 失序问题

相关性问题主要有两种:1.过程噪声相关性。2.历史信息相关性。

过程噪声相关性:一般融合都采用卡尔曼滤波框架进行预测和更新,而一次卡尔曼滤波流程,添加过程噪声次数应为一次,而实际过程中,如果两个sensor观测到同一个物体,则这个物体在不同sensor中均加过一次过程噪声,也就是两次Qi与Qj,这是不对的。为了解决这种情况,一般需要将两个sensor之间的交叉方差计算出来然后减去。

image

历史信息相关性:如下图所示在Ki-1时间时,sensori的测量信息第一次被更新在全局航迹中,此时全局航迹包含sensori从0时刻到Ki-1时刻所有的信息了。到了Ki时刻,sensori的测量又来了,此时测量含有0时刻到Ki时刻的所有信息,如果全局航迹直接使用这部分测量进行更新,相当于又一次融了一次0到Ki-1时刻的信息,实际需要的仅仅是Ki-1到Ki时刻的信息。

image

失序问题产生的原因在于测量数据可能存在延迟处理时间和通信延迟。旧数据进入新目标了,就卷起来了,引入了错误信息。如下图所示,全局track应该融合kj然后融合ki,但由于通讯延迟,变成了先融合ki再融合kj,这就出现了错误。

image

解决失序问题可用方法:

  • 软件架构层面:及时消除缓存数据

  • 框架层面:可以采用循环周期策略 + 预测传感器数据到同一节点。(下面介绍)

  • 算法层面:采用自适应卡尔曼滤波/信息矩阵融合方法

2 循环周期策略与触发式策略

在传感器端将信息上报给融合端后,那融合端如何将融合后的结果上报给后续模块呢,一般有两种策略:

  • 循环周期策略

  • 触发式策略

循环周期策略是根据传感器的上报周期以及融合处理数据时间合理制定融合应该的上报周期,比如上报周期就是60ms,那融合就每60ms发一次融合数据,风雨无阻。

循环周期策略有两种实现方式,在传感器上报到融合端后,就马上进行融合,只不过不上报,最后在对应时间周期到了时候再进行上报。如下图,在KG-3时刻上报后,Ki时刻sensor i上报信息,全局track进行预测到KG-2时刻进行融合更新,在Kj时刻sensor j上报信息,全局track预测到KG-1时刻进行融合更新,最后预测到KG时刻进行上报。

image

相比与上一种方式对全局track进行操作的方式,第二种方式则对融合周期内的传感器端结果预测到上报节点,全局track在对应时刻进行分别融合更新。如下图,KG-1时刻进行融合结果上报后,对Ki时刻的sensor i数据预测到KG时刻,Kj时刻的sensor j数据预测到KG时刻,全局track 预测到KG时刻,使用预测后的传感器数据进行两次关联与更新。此方法不会出现失序问题。

image

触发式策略是每次传感器来,就做一次融合,而后将融合后的结果上报。所谓触发就是融合上报是被传感器上报数据所触发,故得到此名字。

Apollo使用的是一种触发式策略,在Apollo 7.0中其选择了一个主传感器Lidar,只有在Lidar信息输入后,融合端在融合后才会上报。这样在传感器均正常工作的情况下,融合的上报周期和Lidar周期相同。

image

相比与循环周期策略,触发式策略更加灵活,容易处理,但是在某一传感器挂掉时候,融合对应的也挂掉了,这并不符合量产的系统稳定性需求。而循环周期测量的两种方法,精度会有差别(不同的预测手段导致),后者则会在问题回归定位时方便,可直接采用帧号对齐。

一般情况下,有记忆策略与循环周期策略/触发式策略均可配套使用,但是无记忆策略通常与循环周期策略配套使用。原因可以理解,触发式策略在任意传感器来时候进行融合而后上报,无记忆策略由于不维护全局track,需要等待两个传感器数据到齐后进行融合,二者结合不是很合适。

小结

此部分主要介绍了融合的主要架构、接口以及主要策略,这些都是正向设计时候最先应该考虑的问题。下一篇文章讲主要对后融合各功能模块进行介绍。

这篇关于ADAS多传感器后融合算法解析-上篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

dp算法练习题【8】

不同二叉搜索树 96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3输出:5 示例 2: 输入:n = 1输出:1 class Solution {public int numTrees(int n) {int[] dp = new int