培训型网站建设,网站建设课程思政,网站建设有哪些费用,关键词统计工具有哪些随着车载芯片的升级、技术的更新迭代#xff0c;可视化ADAS逐渐变成汽车的标配走入大家的生活中#xff0c;为大家的驾车出行带来切实的便捷。那么你了解HMI端ADAS的实现过程吗#xff1f;作为ADAS可视化系统的入门篇#xff0c;就跟大家聊一聊目前较常见的低消耗的一种ADA… 随着车载芯片的升级、技术的更新迭代可视化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通常有两种
► 一种是连续的离散点数据需要根据离散点动态生成相应的车道线模型并显示
► 一种是三次函数yC3*x^3C2*x^2C1*xC0的四个系数即C3、C2、C1、C0
※本文以第二种为例。
此外其他的数据还有
► id --- 车道线编号
► type --- 车道线种类如实线、虚线等
► color --- 车道线颜色
► pos_start/pos_end --- 起止位置等
与障碍物数据传输要求一样自车智驾系统通常将当前检测到的车道线数据以动态数组vector转化的json字符串或protobuf整帧打包发送上来便于后续的数据分析。
车道线显示处理通常也需要两个模块
► 车道线数据处理模块分析前后两帧或几帧的车道线数据变化分析相应的场景并进行插值等数据处理
► 车道线显示管理模块接收车道线数据处理模块处理后的数据经行相关车道线的显示、隐藏、变化
其中车道线显示、隐藏、变化插值处理与障碍物类似不同的是通常控制车道线模型显示隐藏即可不需要销毁模型原因是所有的车道线可以使用同一个车道线模型模型面片数不多且场景中车道线的数量也不会太多。该车道线模型是一个如下图的矩形长条 ● 通过在Vertex Shader中根据输入的三次函数系数C3、C2、C1、C0、车道线宽度、长度等相应的移动模型各顶点的位置实现车道线长宽、弯曲的变化
● 在Fragment Shader中根据需要输入实线、虚线、双实线等不同的贴图变更片元颜色实现车道线种类、颜色的变化
※该方法同样适用于车道、用三次函数yC3*x^3C2*x^2C1*xC0的四个系数描述的导航线。
需要特别注意的是在自车变道的瞬间智驾系统传上来的车道线数据会有一次跳变。
以左变道为例变道后原左侧车道线L变成了右侧车道线R原来的右侧车道线数据变成了原来的左侧车道线即变道后的右侧车道线数据车道线数据发生了一次跳变。如果不加以识别处理会导致显示界面中的车道线都闪烁一下。 那么如何识别变道并应对变道时的车道线数据跳变
变道场景的识别逻辑比较简单
● 可以根据最后几帧的车道线数据中的C0在界面显示中代表与自车Y轴方向的距离值变化判断自车变道趋势向左还是向右
● 如果最后两帧数据同一车道线的C0变化超出一定范围可以是半个车道宽度可以判断为变道结合前面的自车变道趋势即可确定是左变道还是右变道
关于应对在变道的场景下车道线数据的跳变我们仍以左变道为例。
左变道场景中变道后的右侧车道线R与变道前的左侧车道线L是同一条车道线记住这一点我们接下来就会用到。 其实方法很简单在代码中对每根车道线都需要有容器例如mapid,Struct_LaneLine来存储车道线数据这些容器都有相应的车道线标记根据车道线标记接收对应车道线数据。在判断出是左变道后将原车道线标记为L的容器的标记变换为R其他的容器也依次相应变换车道线标记这样每个容器接受的还是之前同一根车道线的数据。界面中显示的车道线组件也需要类似地变换车道线标识进而可以确保界面中显示的车道线接收的数据是连续的、不会出现跳变的情况。
03
介绍完障碍物、车道线这两个ADAS关键显示元素的实现方案不知道您有没有感觉ADAS也没有想象中的那么难了。后续我们会持续推出根据离散点数据动态生成车道线、导引线、车道包括匝道、十字路模型的实现方案欢迎关注我们避免错过后面的精彩内容。