我是靠谱客的博主 动人蚂蚁,最近开发中收集的这篇文章主要介绍基于PanoSim仿真开发平台BSD和RCTA的构思,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、PanoSim简介
PanoSim是一款面向汽车自动驾驶技术与产品研发的一体化仿真与测试平台,集高精度车辆动力学模型、高逼真汽车行驶环境与交通模型、车载环境传感器模型和丰富的测试场景于一体,支持与Matlab/Simulink联合无缝仿真,提供包括离线仿真、实时硬件在环仿真(MIL/SIL/HIL/VIL)和驾驶模拟器等在内的一体化解决方案;支持包括ADAS和自动驾驶环境感知、决策规划与控制执行等在内的算法研发与测试。PanoSim具有很强的开放性与拓展性,支持定制化开发,操作简便友好,已在美国通用汽车、德国戴姆勒汽车、上汽集团和东风汽车等企业和科研院所广泛使用。
在这里插入图片描述

PanoSim汽车智能驾驶一体化仿真测试平台具备功能强大且齐全的模型库和仿真测试工具链,结合灵活开放的云端一体软件架构,为自动驾驶行业测试机构和产业链正向开发提供全流程实践支撑。

二、BSD简介
盲区监视系统BSD(Blind Spot Detection)是目前市场上配置率较高的一项ADAS功能,其主要通过装备在车辆后部的两颗毫米波雷达探测后视镜盲区范围,当探测到盲区内存在其它道路使用者时向驾驶员发出警告,辅助驾驶行车或变道。

驾驶员在行驶过程需要变道时,由于汽车后视镜所得后方视线会被汽车机身遮挡形成一定的视野盲区,导致用户仅依靠汽车所提供视眼,没有办法完全做出很好的决策。于此同时,存在一定的自然因素包括大雨,降雪、雾天以及冰雹等情况,这些特殊天气状况将会大大增加用户的决策难度,会使汽车在变道过程中更容易出现刮擦,碰撞等现象,这将大大降低用户的驾驶安全性。汽车盲区监测提示系统(Automotive blind spot monitoring prompt system)安装在汽车尾部或其它能够获得较好观察角度地方来获得汽车后方的信息,如果汽车正后方,左右后方有汽车、摩托车等物体靠近时,会根据用户需求输入进行判断和运算,如果出现危险状况汽车盲区监测提示系统会通过蜂鸣器和LED报警提醒用户危险状况或在危险情况下进行自动控制。
BSD基本功能及拓展盲区监视系统BSD的所有功能均是建立在后部两颗毫米波雷达对盲区探测的基础上的,其基本功能包括BSD(盲区监视)和LCA(变道辅助),具体功能描述为: BSD:通过两颗毫米波雷达实时监视驾驶员视野盲区,并在规定盲区内出现其它道路使用者时发出警告; LCA:通过两颗毫米波雷达实时监视驾驶员视野盲区,在车辆变道过程中,如果判断车辆侧方或后方出现可能与本车发生碰撞危险的其它道路使用者时,发出警告。
在这里插入图片描述

三、BSD开发背景
众所周知,机动车经过一百多年的改进与发展,ADAS也逐渐成为人们所热议的话题,但是存在着一个比较重要的问题困扰着汽车设计工程师,就是由于汽车后视镜与汽车支架会使用户驾驶过程中存在视眼盲区,由于该风险的存在促使车辆在进行变道或超车等一系列动作时候极易发生碰撞或者刮擦等交通事故。于此同时,存在一定的自然因素包括大雨,降雪、雾天以及冰雹等情况,这些特殊天气状况将会大大增加用户的决策难度,会使汽车在变道过程中更容易出现刮擦,碰撞等现象,这将大大降低用户的驾驶安全性。最近,由于毫米波雷达,激光云点雷达技术得到不断的发展,对这个百年难题工程师们有一个更加完美的方案。

盲点监测系统,英文简称BSD,该系统是安装在汽车上的一款为综合提高驾驶安全和稳定性的高技术含量的配置。该系统主要功能是扫除后视镜所存在的视盲区,通过毫米波雷达和激光云点雷达探测汽车辆两侧的后视镜盲区中的车辆和移动人员或物体,综合处理后进行声光报警以提示用户,因此用来避免用户在驾驶过程中由于汽车后视镜视眼盲区而发生事故。

盲点监测产品在当前销售市场上多以并线辅助,再加上开门防撞预警功能为主,在绝大部应用于实际高端车型(玛莎拉蒂,宾利,阿斯顿马丁,兰博基尼,保时捷等)配置的盲点监测的功能不仅局限于上述,还有很多新增的功能。同时,一些高端车配置的系统还具有倒车防撞预警功能和主动超车预警功能。对于倒车防撞预警功能和主动超车预警功能的具体实现对于毫米波雷达产品硬件及软件设计要求极高,现行的技术基本全在德国和美国的绝大部公司中。但是,中国也不断孕育着可以与这些国外品牌抗衡的产品。

作为厂家必须要专注于汽车人工智能安全驾驶及辅助自动驾驶系统产品研发、设计和生产,需要拥有一支开发能力过关的技术团队,完全掌握汽车总线技术和主动安全驾驶辅助系统核心算法技术、车身安全预警模块等多项关键核心技术,以传感器为核心,自主开发并设计提出领先世界水平的汽车电子安全驾驶整体解决方案。

对于汽车盲区的定义,其大致用着这样方式去定义,Subject和Object car分别表示主车与从车,然后盲区定义为如下图。
在这里插入图片描述

四、BSD控制系统接口
下图为PanoSim中SensorBuilder传感器配置UI界面,能够直接将所需要的模块直接拖至图中即可搭载对应的传感器,并且在Simulink中完成链接,BSD主要需要用到激光雷达传感器,完成链接后,即可在总线中读取相应数据(目标数目,目标位置,目标速度,目标类别等信息),当然也需要用到车道线传感器用以拟合车道多项式的参数,并且将其所得数据封装发送给总线,从而进行主车后方车辆信息的获取,最终用于算法的计算去做判断。
在这里插入图片描述

而主要的控制信号同样封装于Simulink当中,需要从总线中读出,主要包括有油门,刹车,方向盘,挡位,齿轮等多种控制方式,用于控制车本身的状态,并且在设计过程中考虑到部分变量需要做为全局变量用以调用,所以PanoSim在开发时候预留了八个全局变量(GlobalVariable)用于参数调用。
在这里插入图片描述
VehicleBuidler界面用于从系统数据库加载已有车辆动力学。用户可以点击"Vehicle "按钮来加载车辆信息。点击后,会在右侧"Vehicle Dataset"属性面板显示PanoExp数据库中所含的所有车辆名称,用户可以通过拖到车辆到中间区域,然后点击左侧的树中的参数即可对应修改参数以满足不同试验背景下的参数。其丰富的动力学参数在仿真验证时候能够更好的满足虚拟仿真到真实验证的需求。
在这里插入图片描述

五、BSD算法开发
在这里插入图片描述

在BSD的开发过程中,主要需要考虑两方面的确定以及代码的落地,首先第一块是盲区的定义,合理设计好盲区的范围,对进入范围内的车辆进行检测,并且得到最接近车辆的编码,因为对其进行检测是首要的步骤,。第二步就是分级检测报警部分,汽车位于盲区当中不一定会对用户驾驶产生威胁,如果从车与主车保持同一速度行驶,那么即使从车位于主车侧前方,主车也不应该会对从车的运动状态进行报警提示,所以这里运用到了AEB当中的TTC值来判断两者是否存在相撞的风险,与AEB雷同,主要是通过激光雷达获得主车与从车的相对速度和相对距离将其沿着X,Y轴分解,然后通过找到最近车辆横向和纵向的距离除以相应的速度即可得到两个轴上的TTC,因为已经在盲区中,任何一个方位的碰撞都会造成危险,所以需要计算出最小TTC,用该TTC值做为分级控制的参数该值意味着出现风险的可能性,以提示用户。

六、BSD盲区的定义
BSD盲区可大致表述为驾驶员在驾驶过程中由于汽车本身机架和后视镜限制导致部分区域的不可见,从而在驾驶过程中会对驾驶员左右转,超车等主动行为构成一定的威胁,影响驾驶的安全性,在本文章中我们将主车后方0米到10米,左右方4米内定义为汽车视眼盲区,其大致范围如下。
在这里插入图片描述

在应用当中只需要去遍历激光雷达所有检测到的目标,然后去判断是否存在横向距离和纵向距离都满足要求的目标,然后去找到最近的目标以达到最接近目标的响应

for i in range(width):
if (np.abs(y[i]) < 4.0) and (-10<x[i]<0): #x[i]小于零,表示主车在前方,而abs(y[i])表示目标车相对于主车同一方向车道的后方
distance = np.abs(x[i])
if distance <= Min_range:
#找到最小的距离
Min_range = distance
ID = i #反馈索引

当然这块在使用时候也可以考虑用到摄像头和毫米波雷达,激光云点雷达可以获得以主车为圆心直接50m-100m目标级物体的位置速度等,而在实车中也可以使用两个毫米波雷达去获得右后方和左后方目标物体的距离和速度结合摄像头获得物体在图片中的定位去完成算法的控制效果。该段代码是Arduino端C语言的控制代码,其定位信息是通过OpenMV跑tensorflow网络得到目标位置信息通过编码成json格式发送给Arduino解码并且结合用户需求和距离进行综合处理,形成报警。

 if (steer == 0){
//steer为0表示方向盘左转
if ((carlocate == 0)or(motorcyclelocate == 0))//locate=0 表示目标车辆位于图片左边
{if (dis0<=10){ //dis0是汽车左后方的毫米波雷达测得的距离数据
WarmLeft();}
//对应位置警告
}
}
if (steer == 1){
//steer为1表示直行
if ((carlocate == 1)or(motorcyclelocate == 1))//locate=1 表示目标车辆位于图片正中间
{if (dis<=10){ //dis是汽车正后方的毫米波雷达测得的距离数据
WarmMiddle();}
//对应位置警告
}
}
if (steer == 2){
//steer为2表示方向盘右转
if ((carlocate == 2)or(motorcyclelocate == 2)) //locate=2 表示目标车辆位于图片右边
{if (dis2<=10){ //dis2是汽车右后方的毫米波雷达测得的距离数据
WarmRight();}
//对应位置警告
}
}

七、BSD三级报警
BSD三级报警的工作状态与AEB算法的三级控制效果雷同,也是通过计算TTC值完成基本的控制效果,但是在AEB当中是通过横向距离去判断是否存在碰撞的可能性,而纵向距离是用来计算TTC值完成三级控制的效果,而在BSD当中,由于汽车已经经过上述盲区范围的判断,已经处于盲区当中,在该时刻下再去进行BSD三级报警,所以无论横向距离还是纵向距离都存在很大的可能性造成风险,所以该情况下两者都是需要经过TTC计算,然后需要得到最小的TTC值用来进行下部分的判断工作,所以这块的思路大致如下,通过遍历激光雷达目标,找到最近目标的横向纵向TTC最小值,如果没有找到目标,TTC置为默认值即可,并且对标志位进行置位。

if ID == -1:
#激光雷达或者毫米波雷达未找到车辆
TTC = 999
IsDetective = 0
else:
IsDetective = 1 #激光雷达找到车辆,检测出来之后才会有作用
TTCx = np.abs(x[ID] / rvx[ID]) #横向距离除以横向速度得到一个横向运动时间
TTCy = np.abs(y[ID] / rvy[ID]) #纵向距离除以纵向速度得到一个纵向运动时间
TTC = min(TTCx, TTCy)
#得到最小的运动时间

该段思想是结合上述得到的标志位TTC值等多个参数,通过TTC的大小进行分级警告,最终通过不同的warning_level,该值做为一个全局变量影响着主车控制端的报警状况,在主车控制当中通过这个warning_level进入不同的告警状态从而完成分级警告的思想,其具体警告方式与前两章内容类似,通过调用warning完成分级告警的功能。

 if IsDetective != 0 and TTC <= 3 and ID >= 0:
warning_code = 109
Type = Class[ID]
if (TTC <= 2) and (TTC > 1): #1<TTC<=2
warning_level = 1
elif (TTC <= 1) and TTC > 0: #0<TTC<=1
warning_level = 2
else:
warning_level = 0

八、RCTA的设计与开发
后方交叉路口预警RCTA在车辆倒车时,同样通过安装在车辆后方的两颗毫米波雷达实时监测车辆后方横穿的道路使用者,当判断有风险时向驾驶员发出报警。主要用主车处于车尾向外倒车出库过程中,在车尾部一定范围内,若两侧有车辆驶进本车时,系统需项驾驶员报警

RCTA控制系统接口,传感器配置,主要代码设计部分与BSD相同,即通过合理设计盲区以及对于TTC值的计算,去预估出警告等级。其具体函数的调用与BSD一样通过激光云点雷达获得从车的位置,速度,编号等信息得到最近的目标物体,通过纵向和横向速度得到最小的接近时间,用该时间去做分级判断,做出不同的警告信号,通过waring发送给数据总线信号,同时也对相应标志位赋值,通过发送到主车控制总线完成对应状态的控制,做到RCTA的控制效果。

if warning_code == 109:
if warning_level != 0 :
warning(userData, warning_level, "RCTA")
valid = 1
mode = -1
userData['ego_control'].writeHeader(*(userData['time'], valid, throttle_last, brake_last, steer_last, mode, gear_last))

最后

以上就是动人蚂蚁为你收集整理的基于PanoSim仿真开发平台BSD和RCTA的构思的全部内容,希望文章能够帮你解决基于PanoSim仿真开发平台BSD和RCTA的构思所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(96)

评论列表共有 0 条评论

立即
投稿
返回
顶部