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也没有想象中的那么难了。后续我们会持续推出根据离散点数据动态生成车道线、导引线、车道(包括匝道、十字路)模型的实现方案,欢迎关注我们,避免错过后面的精彩内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/157889.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM应用架构 LLM application architectures

在本课程的最后一部分&#xff0c;您将探讨构建基于LLM的应用程序的一些额外考虑因素。首先&#xff0c;让我们把迄今为止在本课程中所见的一切汇总起来&#xff0c;看看创建LLM驱动应用程序的基本组成部分。您需要几个关键组件来创建端到端的应用程序解决方案&#xff0c;从基…

【学习笔记】minIO分布式文件服务系统

MinIO 一、概述 1.1 minIO是什么&#xff1f; MinIO是专门为海量数据存储、人工智能、大数据分析而设计的对象存储系统。&#xff08;早前流行的还有FastDFS&#xff09; 据官方介绍&#xff0c;单个对象最大可存储5T&#xff0c;非常适合存储海量图片、视频、日志文件、备…

HTML-注册页面

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>注册页面</title> </head> <body><from action"#" method"get"><table border"1" align&q…

估算总体标准差的极差均值估计法sigma = R/d2

总体标准差的估算值可以通过将平均极差除以合适的常数因子d2来计算。这个估算方法是用于估算总体标准差的一种常见方法&#xff0c;尤其在质量控制和过程监控中经常使用。 总体标准差的估算值 (平均极差) / d2 其中&#xff1a; "总体标准差的估算值" 表示用极差…

《Python基础教程》专栏总结篇

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

有关范数的学习笔记

向量的【范数】&#xff1a;模长的推广&#xff0c;柯西不等式_哔哩哔哩_bilibili 模长 范数 这里UP主给了说明 点赞 范数理解&#xff08;0范数&#xff0c;1范数&#xff0c;2范数&#xff09;_一阶范数-CSDN博客 出租车/曼哈顿范数 det()行列式 正定矩阵&#xff08;Posit…

【iOS】Mac M1安装iPhone及iPad的app时设置问题

【iOS】Mac M1安装iPhone及iPad的app时设置问题 简介一&#xff0c;设置问题二&#xff0c;适配问题 简介 由于 苹果M1芯片的Mac可用安装iPhone以及iPad应用&#xff0c;因为开发者并没有适配Mac&#xff0c;因此产生了很多奇怪问题&#xff0c;这里总结归纳Mac M1安装iPhone和…

机器学习基础之《回归与聚类算法(2)—欠拟合与过拟合》

一、背景 1、上一篇说正规方程的时候&#xff0c;实际情况中使用很少&#xff0c;主要原因它不能解决过拟合。 2、训练集上表现的好&#xff0c;测试集上表现不好—过拟合 二、欠拟合和过拟合 1、欠拟合 训练集&#xff1a;有3个训练集&#xff0c;告诉机器都是天鹅 机器学…

力扣164最大间距

1.前言 因为昨天写了一个基数排序&#xff0c;今天我来写一道用基数排序实现的题解&#xff0c;希望可以帮助你理解基数排序。 这个题本身不难&#xff0c;就是线性时间和线性额外空间(O(n))的算法&#xff0c;有点难实现 基数排序的时间复杂度是O(d*(nradix))&#xff0c;其中…

如何快速区分GPT-3.5 与GPT-4?

GPT 3.5 和 GPT-4 有什么区别&#xff1f; GPT-3.5 在经过大量数据训练后&#xff0c;成功地发展到可以考虑 1750 亿个参数以响应提示。这使其具备令人印象深刻的语言技能&#xff0c;以非常人性化的方式回应各种查询。然而&#xff0c;GPT-4 在更为庞大的训练数据基础上进行了…

数学术语之源——“齐次(homogeneity)”的含义

1. “homogeneous”的词源 “homogeneous”源自1640年代&#xff0c;来自中古拉丁词“homogeneus”&#xff0c;这个词又源自古希腊词“homogenes”&#xff0c;词义为“of the same kind(关于同一种类的)”&#xff0c;由“homos”(词义“same(相同的)”&#xff0c;参见“ho…

用wpf替代winform 解决PLC数据量过大页面卡顿的问题

winform 由于不是数据驱动, 页面想刷新数据必须刷新控件, wpf则不用. 可以利用wpf 的数据绑定和IOC, 页面中的消息传递, itemscontrol 实现大量数据刷新, 上位机页面不卡顿 跨页面传值, 可以用两种方法: Toolkit.Mvvm中的Message和IOC. 下面是代码: using Microsoft.Extensio…

allure测试报告生成逻辑--解决在Jenkins里打开allure报告页面后空白显示无数据问题(以window环境为例)

前言 相信大家在用Jenkins持续集成+ant自动构建+jmeter接口测试+pytest代码.xml文件转化+allure测试报告为一体的接口自动化测试构建过程中,都会遇到Jenkins里打开allure报告页面后空白显示无数据问题这一现象级问题,今天Darren洋就给大家分享一下如何讲讲allure测试报告生成…

【(数据结构) —— 顺序表的应用-通讯录的实现】

&#xff08;数据结构&#xff09;—— 顺序表的应用-通讯录的实现 一.通讯录的功能介绍1.基于动态顺序表实现通讯录(1). 功能要求(2).重要思考 二. 通讯录的代码实现1.通讯录的底层结构(顺序表)(1)思路展示(2)底层代码实现(顺序表&#xff09; 2.通讯录上层代码实现(通讯录结构…

angular项目指定端口,实现局域网内ip访问

直接修改package.json文件 "dev": "ng serve --host 0.0.0.0 --port 8080"终端运行npm run dev启动项目。 这里就指定了使用8080端口运行项目&#xff0c;同时局域网内的其他电脑可以通过访问运行项目主机的ip来访问项目 例如项目运行在ip地址为192.168.2…

ChatGPT角色扮演教程,Prompt词分享

使用指南 1、可直复制使用 2、可以前往已经添加好Prompt预设的AI系统测试使用 https://ai.idcyli.comhttps://ai.idcyli.com 雅思写作考官 我希望你假定自己是雅思写作考官&#xff0c;根据雅思评判标准&#xff0c;按我给你的雅思考题和对应答案给我评分&#xff0c;并且按…

[科研琐事] 安装服务器到机柜的二三事

1. 机柜参数 宽度&#xff1a;一般机器都是符合的&#xff1b; 深度&#xff1a;对应服务器最长的那个边&#xff1b; 厚度&#xff08;高度&#xff09;&#xff1a;1/2/3/4U&#xff0c;就是机柜上写的刻度数字&#xff0c;1U1.75英寸。 1U4.45cm 2U4.45cm * 2 3U4.45cm * …

【踩坑】hive脚本笛卡尔积严重降低查询效率问题

前一阵子查看我们公司的大数据平台的离线脚本运行情况, 结果发现有一个任务居然跑了一天多, 要知道这还只是几千万量级的表, 且这个任务是每天需要执行的 于是我把hive脚本捞出来看了下, 发现无非多join了几个复杂的子查询, 应该不至于这么久, 包括我又检查了是不是没有加上每…

微信小程序 在bindscroll事件中监听scroll-view滚动到底

scroll-view其实提供了一个 bindscrolltolower 事件 这个事件的作用是直接监听scroll-view滚动到底部 但是 总有不太一样的情况 公司的项目 scroll-view 内部 最下面有一个 类名叫 bottombj 的元素 我希望 滚动到这个 bottombj 上面的时候就开始加载滚动分页 简单说 bottombj这…

dockerfile 搭建lnmp+wordpress,docker-compose搭建lnmp+wordpress

目录 dockerfile 搭建lnmpwordpress 部署nginx&#xff08;容器IP 为 172.18.0.10&#xff09; 部署mysql&#xff08;容器IP 为 172.18.0.20&#xff09; 部署php&#xff08;容器IP 为 172.18.0.30&#xff09; docker-compose搭建lnmpwordpress dockerfile 搭建lnmpword…