ADAS感知设计
ADAS传感器融合
0.传感器标定
首先标定传感器。一般可以精度高的传感标定用精度低一个数量级的传感器,如用激光雷达标定毫米波雷达。
毫米波雷达标定:可以采用激光雷达对毫米波雷达进行标定。选取一个纹理丰富的自然场景的,如有树木,电线杆和清晰车道线传感器标定。将毫米波雷达数据投影到激光雷达坐标系中,并画出相应的鸟瞰图进行辅助验证。毫米波雷达会检测到道路边沿的目标,通过判断毫米波雷达与激光雷达目标是否重合判断标定是否成功。
摄像头标定。包括摄像头的内参和外参。内参包含相机的焦距、主点和畸变系数等信息,可以用棋盘格通过OpenCV和Matlab的工具进行标定。外参为相机坐标到世界坐标,与摄像头的安装位置和角度有关,在平直道路上,利用卷尺和人的身高进行标定。
激光雷达标定。采用相机和激光雷达联合标定。
1.传感器融合
因为传感器有各自的优缺点,所以需要融合来扬长避短。摄像头与毫米波雷达是ADAS中最常用的传感器是。
摄像头 - 优势:目标识别能力强,可以对车辆,自行车,行人等目标进行分类。劣势:距离信息不是直接测量得到的。特别是在恶劣天气和光照环境环境下距离信息不准确。
毫米波雷达 - 优势:直接测量目标的位置和速度。受到天气及环境的影响小。劣势: 于雷达的信号较为稀疏,不便通过雷达进行目标识别。这些性质正好与摄像头形成互补。
信息融合又可分为目标级融合和信号级融合。
目标级融合: 每个传感器先各自处理原始信号生成目标。在目标的基础上进行融合。- 优势: 对控制器的算力和通信传输要求低。劣势: 是传感器在独立处理信号时会有信息丢失。
数据级融合: 在原始数据级就进行融合。- 优势:信息丢失少,精度高,劣势:对控制器的算力和通信传输要求高。
在架构设计时需要找到精度和算力分布的平衡点。
L2级别ADAS采用前视摄像头和雷达目标级融合的方案。雷达输出target信号,摄像头为类似mobileye的智能摄像头,输出track信号。
模块分为数据有效性验证,时间补偿,雷达聚类,目标匹配,新目标生成,航迹追踪,目标管理等子模块:
2.雷达聚类
毫米波雷达通过分析雷达反射的回波进行目标的定位测速。雷达底层信号处理回波通过快速傅里叶变换fft,反射点,恒虚警处理cfar,关键点。这些步骤一般在内雷达部件内部完成。
雷达输出的信号分为:target,object,track。target信号为未经过聚类的反射点。由于回波反射,特别是在旁边车辆,隧道,或者有路边栅栏的情况,回波多次反射噪音较大。一个目标也会出现多个target信号。
object为聚类之后的目标点。置信度高于object。track是object进行追踪后,带有ID,置信度最高, 但因为目标稳定追踪后才会输出,所以新目标出现会有延时。
-目标聚类
雷达target聚类得到object。雷达target先需要进行目标进行滤除。
因为不知道雷达簇的个数,并且对算法实时性要求高,一般采用基于距离或密度的聚类。如eclidean clustering和dbscan。
在簇核心的选择上可以选择反射能量大的点,或者以上次聚类的结果做为核心。在距离参数上,除了空间距欧式离外,或者采用马氏距离。雷达只能提供径向距离和速度,不能提供切向值。径向值较准而角度不准。在计算距离时可以根据变量的精度加权。
3.数据关联
数据关联是匹配不同传感器的目标或者匹配当前目标与前帧的航迹。
在匹配之前通过设置门限值(gate),对匹配目标进行初删选。
通过在每个track周围根据距离和速度设置门限值,只有在阈值内的目标才进行匹配。
对匹配的假设会出现多的情况一配一,一配多,多配一的情况。根据数据的情况选择匹配的假设。
以一配一的为例步骤如下:
- 计算距离矩阵。距离参数可选择,欧式距离,或者根据卡方分布计算马氏距离。计算两组需要匹配的列表中列表1中每个点到列表2中每个点的距离。如果目标门限值之外可以给距离赋一个极大值。
- 目标匹配的算法有GNN(global nearest neighbor), JPDA(joint probablity data assication),MHT(multi-hypothesis tracking)等
如果假设问题是一对一匹配可以用到线性分配(linear assignment)。匈牙利算法可以找到最优解,但算法复杂度较高的O(n4),
实际应用中如果不需要最优解并且对算法实时性要求高可以采用贪心算法。计算全局的最小值匹配,把匹配后那行和列都删掉。再在剩下的值中找最小值重复上述步骤。直到列表为空或者最小值都大于某阈值。
4. 航迹追踪
航迹与雷达和相机的匹配结构后,通过卡尔曼滤波对航迹进行追踪。
注意的是雷达只能观测到径向的距离和速度。观测矩阵是非线性的所以要用到EKF。
如果假设目标是质点运动模型,如横坐标方向匀速运动,纵坐标方向匀加速采用EKF。如果运动模型选用更复杂的非线性模型如速度航向角模型。
则需用到UKF。
卡尔曼调参
参数虽然有物理含义但是很难从理论推到得到,需要根据数据进行调试。
P(初始前验协方差):初始增益的大小可以决定初始收敛速度。
Q(过程噪音协方差):Q小时系统更依赖模型。
R(观测噪声协方差):R小时系统更依赖观测, 初始增益大,但是稳态时容易引入噪声。
特殊情况:
1.当前帧没有观测值。卡尔曼只做预测不做更新。
2.设置几套不同的参数。例如相机发现目标后2秒内目标位置速度不准确,这时可以采用较大的R
5. 难点
- 区分实际目标与路旁的障碍物。可将速度设为门限值以滤除路边静止目标。
- 并行目标区分。如果辆车并行速度相似,雷达较难区分,因为雷达角分辨率较低。可以通过相机目标识别加以区分。
- 遮挡障碍物识别。相机会被前方车辆遮挡,当前车cutout后容易发生危险。雷达有一定的穿透能力,可对遮挡的前车提前做出预警。
- 雷达误报警。雷达会识别路面上的金属目标(如井盖),产生误报警。通过相机确认目标存在。
- 漏报警。在雨天或者光照条件不好的情况下相机识别不稳定,易出现漏报的情况。而雷达性能受环境影响较小,在track丢失相机目标时可通过雷达信息进行追踪。误报漏报间存在权衡,根据功能定义在特定区域对误报漏报进行标定。如L2级ADAS系统应该首先降低误报警,因为系统安全最终由人负责,频繁的误报警会影响驾驶体验。
ADAS感知设计的更多相关文章
- ADAS感知开发问题
ADAS感知开发问题 1. 雨天相机 问题:雨天相机目标识别不稳.出现目标时断时续的情况 对策: 增加单雷达生成功能.当单雷达目标置信度高时直接由雷达生成目标. 2. 相机震动目标位置突变 问题 :相 ...
- ADAS感知算法观察
ADAS感知算法观察 如果把一台ADAS车辆比作一个人的话,那么激光雷达.毫米波雷达.摄像头.IMU及GPS等等部件就相当于人的眼睛.鼻子.耳朵.触觉及第六感等器官或系统. 环境感知作为无人驾驶的第一 ...
- ADAS系统长篇综述(下)
ADAS系统长篇综述(下) 四.ADAS架构设计的进化阶梯 前面谈到的产品的商业化推广渗透和产品的功能演进渗透,目的是让大家去概念化.当然,最后的赢家一定是实干者,能够在具体技术实现路径上进行深度耕耘 ...
- CEVA引入新的可配置传感器集线器DSP架构
CEVA引入新的可配置传感器集线器DSP架构 CEVA introduces new configurable sensor hub DSP architecture 在一个将多个传感器设计成几乎所有 ...
- Mobile First! Wijmo 5 之 架构
CSDN移动开发频道率先报道的<Mobile First!jQuery UI组件集Wijmo五年最大更新>引起开发者极大关注. 本文就开发者关心的话题之一架构,展开叙述. Wijmo 5是 ...
- 信息物理融合CPS
在阅读了自动化学报的信息物理融合专刊的两篇文章李洪阳老师等发表的<信息物理系统技术综述>一文对信息物理融合有了一个初步的了解.链接附后. 信息物理融合从字面上看好像是软件和硬件系统的融合, ...
- 设计一个简单的,低耗的能够区分红酒和白酒的感知器(sensor)
学习using weka in your javacode 主要学习两个部分的代码:1.过滤数据集 2 使用J48决策树进行分类.下面的例子没有对数据集进行分割,完全使用训练集作为测试集,所以不符合数 ...
- UI设计,使用感知分层技术
页面设计时使用感知分层技术:不同的元素用不同的颜色表示,让它看起来是位于独立的一层之上.人们在无意识的状态下,只会感知到自己关注的元素,将其他元素排除在意识之外.
- 【资讯】天啦鲁,这十余款创客设计居然由FPGA搞定 [转]
按理说‘高大上’的FPGA,多出现在航天航空(如火星探测器).通信(如基站.数据中心).测试测量等高端应用场景.但麦迪却也发现,近期,在很多创客的作品内部都有FPGA的影子.这或许也从侧面看出,打从总 ...
随机推荐
- Java实现 LeetCode_0038_CountandSay
package javaLeetCode.primary; import java.util.Scanner; public class CountandSay_38 { public static ...
- java实现第六届蓝桥杯熊怪吃核桃
熊怪吃核桃 题目描述 森林里有一只熊怪,很爱吃核桃.不过它有个习惯,每次都把找到的核桃分成相等的两份,吃掉一份,留一份.如果不能等分,熊怪就会扔掉一个核桃再分.第二天再继续这个过程,直到最后剩一个核桃 ...
- Python学习之温度转换实例分析篇
#TempConvert.py Tempstr=input('请输入要转换的温度值:') if Tempstr[-1] in ['C','c']: F=1.8*eval(Tempstr[0:-1])+ ...
- CSS清除浮动&内容居中&文字溢出
学习! 1.CSS清除浮动的方法 (1)添加标签清除浮动: 在浮动元素结尾处,并列的添加标签<div style="clear:both;"></div>. ...
- LB服务,软LB的服务能力(下)
[摘要] 现在常用的LB软件,主要是LVS和nginx.普通情况下,LVS主要负责四层负载均衡,nginx负责七层.当然,业界也有友商基于LVS做出了七层负载均衡.本篇主要讲一下LVS的工作模式及各种 ...
- list基本运用
#include<iostream> #include<list> using namespace std; list<int>list1,list2; void ...
- .Net Core 配置之long类型 前端精度丢失和时间格式设置
在很多项目中,都采用的前后端分离的方式进行开发,经常遇到后台的long精度的数据到前端丢失不准确,显示效果为long类型(19位)的后几位为000,此时需要对long的字段进行设置,改变默认的返回类型 ...
- Autoware 进行 Robosense-16 线雷达与 ZED 双目相机联合标定!
项目要标定雷达和相机,这里记录下我标定过程,用的速腾 Robosense - 16 线雷达和 ZED 双目相机. 一.编译安装 Autoware-1.10.0 我没有安装最新版本的 Autoware, ...
- CentOS7——配置阿里云镜像源
CentOS7--配置阿里云镜像源 #下载CentOS 7的repo文件 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun ...
- 【译】构造和匹配二进制(Efficiency Guide)
可以通过以下方式有效地构建二进制: my_list_to_binary(List) -> my_list_to_binary(List, <<>>). my_list ...