ADAS可视化系统,让自动驾驶更简单 -- 入门篇

随着车载芯片的升级、技术的更新迭代,可视化ADAS逐渐变成汽车的标配走入大家的生活中,为大家的驾车出行带来切实的便捷。那么你了解HMI端ADAS的实现过程吗?作为ADAS可视化系统的入门篇,就跟大家聊一聊目前较常见的低消耗的一种ADAS可视化实现方案。
ADAS显示场景中常见的显示元素有:障碍物、车道线、车道、导航线、路面标记、TT灯等,其中非常关键的两个显示元素是障碍物和车道线,对不了解ADAS的小伙伴来说,实现起来有一定的难度,本期我们就围绕这两个元素展开。
01
开始之前我们需要先明确ADAS的显示坐标系。ADAS的显示坐标系通常是以自车中心点或自车车尾中心点作为原点,自车正前方作为X轴正方向,自车右侧方向作为Y轴正方向(也有以自车左侧方向作为Y轴正方向的)。
描述障碍物显示的数据Struct_Obstacle通常有以下成员
► id --- 障碍物编号
► type --- 障碍物种类,如:汽车、卡车、单车、行人、防撞桶等
► pos_x --- 障碍物X轴方向坐标
► pos_y --- 障碍物Y轴方向坐标
► direction --- 障碍物方向
► color --- 障碍物颜色,通常用来表示碰撞风险等级,碰撞风险等级越高颜色越醒目
障碍物显示处理通常需要两个模块
► 数据处理模块
► 界面显示模块
由于实际场景中自车智驾系统检测到的周围的障碍物是动态变化的,所以障碍物数据通常是以动态数组vector转化的json字符串或protobuf整帧传输。数据处理模块对比接收到的前后两帧障碍物数据列表,后一帧数据列表中,
● 新出现的障碍物id对应的即为新出现的障碍物,需要在界面中新增显示出来;
● 消失的障碍物id对应的即为消失的障碍物,需要在界面中将其隐藏删除掉;
● 两帧数据列表中都存在的障碍物id对应的即为持续存在的障碍物,通常需要根据需求对其进行插值处理,以便在界面显示中顺滑地变化该障碍物的位置、角度等,避免闪烁跳变
(※关于插值:智驾系统通常每100ms发送一次障碍物数据,而界面的显示帧率通常仪表端为60FPS(即16.7ms刷新一次)、中控端为30ms(即33ms刷新一次),故而在智驾系统数据更新间隔内仪表端可插值5~6次,中控端可插值2~3次。根据需求按照实际的运行帧率进行插值即可。)
通过上述描述也可以看到,障碍物数据不能是单个障碍物单独发送,因为这样无法像上面那样在前后两个智驾系统发送周期中直观地判断各个障碍物的行为。
界面显示模块控制界面障碍物的动态显示、变化,根据数据处理模块传过来的数据,或动态地生成障碍物并显示、或动态地隐藏障碍物并销毁、或更新持续存在的障碍物显示状态。在当前的绝大多数ADAS项目中,障碍物通常由3D模型来显示,资源占用较高,动态生成、销毁障碍物可确保对系统资源的合理有效利用。
02
介绍完障碍物的实现方案,我们接着看下车道线的实现方案。
描述车道线显示的数据Struct_LaneLine通常有两种,
► 一种是连续的离散点数据,需要根据离散点动态生成相应的车道线模型并显示;
► 一种是三次函数(y=C3*x^3+C2*x^2+C1*x+C0)的四个系数,即C3、C2、C1、C0;
(※本文以第二种为例。)
此外其他的数据还有:
► id --- 车道线编号
► type --- 车道线种类,如:实线、虚线等
► color --- 车道线颜色
► pos_start/pos_end --- 起止位置等
与障碍物数据传输要求一样,自车智驾系统通常将当前检测到的车道线数据以动态数组vector转化的json字符串或protobuf整帧打包发送上来,便于后续的数据分析。
车道线显示处理通常也需要两个模块
► 车道线数据处理模块,分析前后两帧或几帧的车道线数据变化分析相应的场景并进行插值等数据处理;
► 车道线显示管理模块,接收车道线数据处理模块处理后的数据,经行相关车道线的显示、隐藏、变化
其中,车道线显示、隐藏、变化插值处理与障碍物类似,不同的是通常控制车道线模型显示隐藏即可,不需要销毁模型,原因是所有的车道线可以使用同一个车道线模型,模型面片数不多,且场景中车道线的数量也不会太多。该车道线模型是一个如下图的矩形长条

● 通过在Vertex Shader中根据输入的三次函数系数C3、C2、C1、C0、车道线宽度、长度等,相应的移动模型各顶点的位置,实现车道线长宽、弯曲的变化;
● 在Fragment Shader中根据需要输入实线、虚线、双实线等不同的贴图,变更片元颜色,实现车道线种类、颜色的变化;
(※该方法同样适用于车道、用三次函数(y=C3*x^3+C2*x^2+C1*x+C0)的四个系数描述的导航线。)
需要特别注意的是,在自车变道的瞬间,智驾系统传上来的车道线数据会有一次跳变。
以左变道为例,变道后原左侧车道线L变成了右侧车道线R,原来的右侧车道线数据变成了原来的左侧车道线(即变道后的右侧车道线)数据,车道线数据发生了一次跳变。如果不加以识别处理,会导致显示界面中的车道线都闪烁一下。

那么如何识别变道并应对变道时的车道线数据跳变?
变道场景的识别逻辑比较简单,
● 可以根据最后几帧的车道线数据中的C0(在界面显示中代表与自车Y轴方向的距离)值变化判断自车变道趋势(向左还是向右);
● 如果最后两帧数据同一车道线的C0变化超出一定范围(可以是半个车道宽度),可以判断为变道,结合前面的自车变道趋势即可确定是左变道还是右变道
关于应对在变道的场景下车道线数据的跳变,我们仍以左变道为例。
左变道场景中,变道后的右侧车道线R与变道前的左侧车道线L是同一条车道线,记住这一点,我们接下来就会用到。

其实方法很简单,在代码中对每根车道线都需要有容器(例如map<id,Struct_LaneLine>)来存储车道线数据,这些容器都有相应的车道线标记,根据车道线标记接收对应车道线数据。在判断出是左变道后,将原车道线标记为L的容器的标记变换为R,其他的容器也依次相应变换车道线标记,这样每个容器接受的还是之前同一根车道线的数据。界面中显示的车道线组件也需要类似地变换车道线标识,进而可以确保界面中显示的车道线接收的数据是连续的、不会出现跳变的情况。
03
介绍完障碍物、车道线这两个ADAS关键显示元素的实现方案,不知道您有没有感觉ADAS也没有想象中的那么难了。后续我们会持续推出根据离散点数据动态生成车道线、导引线、车道(包括匝道、十字路)模型的实现方案,欢迎关注我们,避免错过后面的精彩内容。
相关文章:
ADAS可视化系统,让自动驾驶更简单 -- 入门篇
随着车载芯片的升级、技术的更新迭代,可视化ADAS逐渐变成汽车的标配走入大家的生活中,为大家的驾车出行带来切实的便捷。那么你了解HMI端ADAS的实现过程吗?作为ADAS可视化系统的入门篇,就跟大家聊一聊目前较常见的低消耗的一种ADA…...
探索低代码技术
低/无代码的高速发展,属于软件市场的选择,相较于传统编写代码的开发方式,低/无代码开发效率高、投入成本低、技术门槛也更低,未来更多软件应用将使用低/无代码技术完成,这也是趋势。 身为开发人员经常需要花大量时间在…...
头歌的数据库的第二次作业的答案
目录 MySQL-视图 第1关:创建所有保险资产的详细记录视图 第2关:基于视图的查询 MySQL数据库 - 连接查询 第1关:内连接查询 第2关:外连接查询 第3关:复合条件连接查询 MySQL数据库 - 子查询 第1关:…...
基于R329 SOC智能音响开发编译环境搭建
R329智能音响开发编译环境搭建 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务, R329编译命令 source build/envsetup.sh lunch make -j4 pack 编译工程选择 baidu_panshan...
libplctag开源库的API介绍
文章目录 1 开源库概要2 API介绍2.1 Tag Model(标签模型)2.2 Status Codes(状态码)2.3 Versions and Checking Library Compatibility(版本和检查库的兼容性)2.4 Tag Life Cycle(标签生命周期&a…...
智能化安全巡更巡查系统—提升安全管理效率
传统的巡检都是手工完成,记录、拍照,回到办公室打印表单再交给作业队伍整改,再去现场核实复查,流程繁琐,效率低。而且大部分工地为了减少麻烦,人员往往都是口头沟通,存在很大质量风险࿰…...
SAP MM学习笔记36 - 释放支付保留的发票
SAP中,请求书照合之后,发现不一致,就会支付保留。 支付保留,可以参考如下文章。 SAP MM学习笔记34 - 请求书照合中的支付保留(发票冻结)_东京老树根的博客-CSDN博客 当然发现不一致之后,如果不…...
MySQL数据库的ID列添加索引
要为MySQL数据库的ID列添加索引,可以使用以下语法: ALTER TABLE table_name ADD INDEX index_name (id);其中,table_name是要添加索引的表名,index_name是索引的名称,id是要添加索引的列名。 例如,如果要…...
LuaJIT编写的解析十六进制数据
以下是使用LuaJIT编写的解析十六进制数据并将uint16转换为JSON的示例代码: local ffi require("ffi") local bit require("bit") local cjson require("cjson")-- 定义结构体 ffi.cdef[[typedef struct {uint16_t value;} uint16…...
【SA8295P 源码分析 (一)】09 - XBL Loader 加载 QSEE、SEC、CPUCPFW、QHEE、APPSBL过程分析
【SA8295P 源码分析】09 - XBL Loader 加载 QSEE、SEC、CPUCPFW、QHEE、APPSBL过程分析 一、QSEE二、SEC三、CPUCPFW四、QHEE五、APPSBL系列文章汇总见:《【SA8295P 源码分析 (一)】系统部分 文章链接汇总 - 持续更新中》 本文链接:《【SA8295P 源码分析 (一)】09 - XBL Load…...
封装一个Element-ui生成一个可行内编辑的表格(vue2项目)
这个封装的是一个供整个项目使用的表格,可多次复用.放在一个全局使用的公共组件文件下. 大致功能介绍,封装自定义指令,点击获得焦点,显示输入框,失去焦点显示文本内容,类型是字典决定类型,图片可以显示图片名还是上传图片 子组件 <script> export default {props: {//生…...
hanniman 1v1 咨询
一共4种可选方案,3个To C(面向AI产品经理的职业规划诊断、求职内推套餐、模拟面试),1个To B(面向AI企业/投资机构/券商等)。 方案A:职业规划诊断 适合人群:AI产品经理 or 想转型A…...
变更管理制度
1、总则 1.1、目的 为规范XXXXX单位各信息系统需求变更操作,增强需求变更的可追溯性,控制需求变更风险,特制定本制度。 1.2、范围 本制度适用于XXXXX单位应用系统、网络系统等已开发或采购完毕并正式上线、且由软件开发组织移交给应用管理…...
电源特性测试之电源模块负载调整率测试方法及测试条件
负载调整率是衡量电源好坏的重要指标,它反映的是当负载电流变化时,稳压电源输出电压相应的变化情况。好的电源负载变化时引起的输出变化较小,通常是在3%-5%。负载调整率是电源模块测试的一个重要步骤,今天纳米软件将为大家介绍负载…...
基于单片机的双交通灯控制设计
目录 摘要...................................................................................... 2 第一章 绪论........................................................................ 5 1.1 研究课题背景....................................................…...
StarUML的介绍与使用
文章目录 简介视图StarUML创建视图类图用例图时序图 简介 UML:统一建模语言,用模型元素组成的不同视图从各个维度来描述系统 StarUML为常用系统建模工具之一 视图 常见视图的概念可参考:UML常见的几种视图 包括:用例图、顺序图…...
GPT4 Advanced data analysis Code Interpreter 做行业数据分析、可视化处理图像、视频、音频等
1. 跨境电商如何用ChatGPT选品 ChatGPT Jungle scout 案例:跨境电商如何用ChatGFT选品 ChatGPTJungle scout 素材和资料来自: Jungle ScoutEM, Michael Soltis 和 文韬武韬AIGC 1.1 从Jungle scout上下载数据 Date Range > Last 90 days Downlo…...
软考高级信息系统项目管理师系列论文五:论信息系统项目的质量管理
软考高级信息系统项目管理师系列论文五:论信息系统项目的质量管理 一、质量管理相关知识点二、摘要三、正文四、总结一、质量管理相关知识点 软考高级信息系统项目管理师系列之十五:项目质量管理...
多线程处理文件集合,先拆分,在执行
try {File file new File(path);File[] files file.listFiles();log.info("当前共有文件 "files.length"个");List<File> filesList new ArrayList<>(Arrays.asList(files));List<List<File>> dividedLists SplitListUtils.sp…...
将excel表中的英文自动翻译成中文
某乎上垃圾内容太多,要么是复制粘贴的youdao翻译,要么是某网络函数库的软广。这里提供office的原生方法,需要用到word(不适合数据量太大的情况) 方法 复制需要翻译的列到word选择审阅 -> 翻译 -> 翻译文档 -&g…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
