一、PanoSim简介
PanoSim是一款面向汽车自动驾驶技术与产品研发的一体化仿真与测试平台,集高精度车辆动力学模型、高逼真汽车行驶环境与交通模型、车载环境传感器模型和丰富的测试场景于一体,支持与Matlab/Simulink联合无缝仿真,提供包括离线仿真、实时硬件在环仿真(MIL/SIL/HIL/VIL)和驾驶模拟器等在内的一体化解决方案;支持包括ADAS和自动驾驶环境感知、决策规划与控制执行等在内的算法研发与测试。PanoSim具有很强的开放性与拓展性,支持定制化开发,操作简便友好,已在美国通用汽车、德国戴姆勒汽车、上汽集团和东风汽车等企业和科研院所广泛使用。
PanoSim汽车智能驾驶一体化仿真测试平台具备功能强大且齐全的模型库和仿真测试工具链,结合灵活开放的云端一体软件架构,为自动驾驶行业测试机构和产业链正向开发提供全流程实践支撑。
二、AEB简介
AEB是Autonomous Emergency Braking的缩写,就是自动紧急制动系统,装备了这一系统的车辆会在车辆遇到突发情况时,视情况发出预警或是采取不同程度的制动,以至于完全刹停,以此来避免事故发生或是降低事故损失,从而提高汽车安全性。
自动紧急制动(Autonomous Emergency Braking),是基于环境感知传感器(如:毫米波雷达或视觉摄像头)感知前方可能与车辆、行人或其他交通参与者所发生的碰撞风险,并通过系统自动触发执行机构(如:电子稳定程序ESP®)来实施制动,以避免碰撞或减轻碰撞程度的主动安全功能。自动紧急制动AEB为一项重要的主动安全类ADAS功能,随着E-NCAP、C-NCAP的推动,得到了越来越广泛的应用配置,所以为了能够在驾驶过程中更好的保护驾驶员的安全,AEB算法需要应用于ADAS中, AEB通过毫米波雷达、摄像头等传感器做为感知层的数据,经过探测主要得到目标数以及目标速度和距离,经过运算后得到TTC值,进行判断以及分级控制。从而避免发生碰撞或减轻碰撞损害程度。能够在本车与前方车辆存在追尾风险时,产生预警信号、自动制动等方式避免碰撞或减轻碰撞的程度; AEB干预策略分为三级:一级常规(驾驶员正常行驶,不会触发任何报警,不影响用户正常操作),二级干预(轻度制动,通过计算TTC值发现其需要开始制动,表现为预制动,制动力不大,但是能够一定程度减低车速),二级干预(紧急制动,表明TTC已经很小,如果不及时制动,存在着较大风险,控制力很大), 具备制动辅助功能,即当驾驶员制动力不足时,AEB系统能够估算出车辆安全制动所需的最优制动力。
三、AEB开发背景
AEB的作用有数据佐证。有研究数据表明,装备了AEB可减少27%的事故发生率,其中追尾减少率为38%,并能明显减少事故伤亡。欧洲Euro-NCAP机构近日正式发布消息会在2014年的评分规则里添加自动紧急刹车系统Autonomous Emergency Braking,简称AEB。
这项AEB紧急刹车技术将和ESP电子稳定系统一样成为5星级评价里的加分项目。现在沃尔沃、奔驰、大众、福特、斯巴鲁等品牌都已经装备了这种自动紧急刹车系统。利用雷达、超声波、摄像头等设备侦测前方道路,侦测到有碰撞风险后车载电脑会自动紧急刹车。这项技术还没有一个业界统一标准,各家品牌的命名也不同。比如沃尔沃名为城市安全系统、奔驰名为Pre-safe。现阶段这些自动刹车系统的工作时速范围普遍在30km/h以下。
已拥有类似技术的沃尔沃、奔驰等厂商也会致力于提高自动刹车的工作范围和准确性。在海外马自达CX-5、福克斯、思域、大众微型车up!都普通品牌车型都在高配或选装部分里提供这项AEB自动刹车技术。可见AEB在将来很快会成为ABS、ESP等我们熟知的汽车安全名词。
中国在这一领域法规相对滞后,C-NCAP于2018版测试项目中正式加入对AEB的测试。对于国内车市,Euro-NCAP这项举措有助于提升进口车和一些豪华品牌车型的安全性能。我们很期待那些普通品牌也能在国内车型上引进这项技术。至于自主品牌车型这项技术很难通过第三方购得,如博世的ESP电子稳定系统。毫无疑问会在安全性能上面临差距扩大的状况需要投入大量经费来追赶海外先进科技。
四、AEB控制系统接口
下图为PanoSim传感器配置UI界面,能够直接将所需要的模块直接拖至图中即可搭载对应的传感器,并且在Simulink中完成链接,AEB主要需要用到车道传感器,毫米波雷达传感器完成链接后,即可在总线中读取相应数据车道传感器(如LDW告警中所述)用以拟合车道多项式的参数,毫米波雷达(目标标号,横向纵向距离,横向纵向速度)用以控制AEB,并且将其所得数据计算得到TTC后用于判断,再将控制命令发送给总线,从而优化汽车制动的距离最终用于算法的计算去做判断。
Simulink
而主要的控制信号同样封装于Simulink当中,需要从总线中读出,主要包括有油门,刹车,方向盘,挡位等多种控制方式,用于控制车本身的状态,并且在设计过程中考虑到部分变量需要做为全局变量用以调用,所以PanoSim在开发时候预留了八个全局变量(GlobalVariable)用于参数调用,在LDW开发过程中就是将第八个全局变量做为了报警信号交互的通道。
五、AEB算法设计
在AEB开发过程中,对于TTC的计算是一个非常关键,且影响整个算法开发的步骤,首先需要用传感器获得从车相对主车的X,Y轴位置,横向纵向速度等信息,横向的信息主要用于判断是否会相撞,比如主车在从车右方5m处,并且主车和从车的相对速度在纵向上保持较小的数据,这种情况下是不会发生碰撞的,所以无论主车和从车的纵向位置有多近,速度多快,理论上都不会触发AEB。但如果在满足横向距离的情况,即在已经两车横向距离和横向速度时会有很大概率碰撞,这时候即需要考虑纵向距离和速度去计算TTC值,然后在一定区间内进行判断,最终控制全局变量的变化即刹车的量级变化,最终完成AEB的三级控制。
在计算TTC之前,首先需要判断车辆的行驶状态,即汽车姿态角等特征以用于在横向控制时候做以补偿效果,然后需要计算横向纵向偏移从而计算得到补偿以用于AEB控制效果。
六、横向距离推算
首先需要通过毫米波雷达得到的主车与从车的相对距离然后通过偏移的角度去计算两者在横向和纵向的偏移,得到两者某时刻的相对位置后,还要通过航偏角Yaw和相对车速,在AEB当中用横向控制去检测是否会碰撞,如果两者横向差距较大,计算纵向距离很小也不会碰撞,而纵向距离是和相对速度一起来计算TTC的,当然这块计算时候用了比较基本的物理知识,
通过航偏角和两者的相对位置和速度去计算两者是否会发生碰撞,其基本思想就是通过VX乘以航偏角将速度分成X,Y两个轴上速度,然后去计算碰撞时间,利用该时间去计算横向偏移量,其中R_Host是汽车根据汽车行径路径得到一个参数,简单来说就是通过Y轴加速度来计算的,直线时候为999,有转向过程时为一个小于100的数字。
if R_Host >= 300: # common state,未转弯lateral_offset = abs(Obj_y) #横向控制longitudinal_offset = Obj_x #纵向控制
else: #Abnormal state 转弯的过程中theta = ego_yawVr_x = Vr_obj*math.sin(theta)Vr_y = abs(Vr_obj*math.cos(theta))Obj_t = Obj_x/Vr_xlateral_offset =abs(Obj_y-Obj_t*Vr_y)longitudinal_offset = Obj_x
七、通过纵向距离和纵向速度计算TTC
TTC是AEB计算过程最关键的一部分,在上述的横向偏移和纵向偏移计算完成后,满足一定条件即会进行TTC的计算,TTC计算过程较为简单,有两个形参s和v,在实际使用过程中只需要将相对位置和相对速度当作实参输入,即可得到一个TTC值,该值代表着用户的一个反应时长,在分级控制中主要是用该参数进行的。
def cal_ttc(s, v):ttc = 4 #反应时if v < 0.1: #从车慢于主车才有可能碰撞ttc = - (s - 4) / v #减去车身长度if ttc > 4: #控制时间大于4s保持为4sttc = 4return ttc
TTC
得到TTC后,我们就要通过TTC进行控制作用,在设计中我们以60km/h为基准即16.6m/s,然后通过计算如果TTC在1.25s时基本开始触发一级控制效果,即brake为3,如果TTC小于1或者为负数时候即要触发急刹即二级控制,该时刻brake为6,其控制命令的发送和LDP一样,通过给固定数据赋值,然后通过userData发送到自身控制的总线上即可控制最终效果。
if (Vr_obj/-16.6 < TTC < Vr_obj/-11.06) :throttle = 0brake = 3steer = deltavalid = 1print('l1')userData['ego_control'].writeHeader(*(userData['time'], valid, throttle, brake, steer, mode, gear))Warning(userData, 2, 'AEB')
#强化AEB,如果TTC很小时候接近于1时候强化控制
elif TTC < Vr_obj/-16.6:throttle = 0brake = 6steer = deltavalid = 1print('l2')userData['ego_control'].writeHeader(*(userData['time'], valid, throttle, brake, steer, mode, gear))Warning(userData, 2, 'AEB')
八、泛化性测试
在代码编写过程中,使用了60km/h及16.6m/s的特殊工况去做测试的,但是在实际过程中速度不可能如此特殊,所以需要对其设定不同速度,测试其具体性能。
在测试过程中如果每次修改速度看效果的方法是非常低效的,这里就用到了PanoSim内置的TextBuilder模块,TestBuilder是PanoSim的自动化测试管理模块,支持对实例的参数泛化、批量运行测试、云平台仿真测试及评价。只需要选择对应的Agent命名和Evaluator评价其即可完成配置,然后将我们在测试中的实验拖入Textbuilder当中即可完成需求。
在测试当中主要需要对其速度进行泛化,我们选择了30-80的范围,10为步长进行多级别速度测试,其具体操作界面如下。
其终测试的结果如下,可以在UI界面中看到6次试验都通过了,并且还带有结果的CSV文件如图,其结果雷同。
九、FCW的验证开发
前方碰撞预警FCW能够通过雷达时刻监测前方车辆,判断本车与前车之间的距离、方位及相对速度,当系统判断存在潜在碰撞危险时,将对驾驶者进行警告。FCW系统本身不会采取任何制动措施去避免碰撞或控制车辆。FCW具体的实现方法和AEB类似,一种可以使用毫米波雷达获得与前车距离,角度,速度等信息进行综合判断,最终实现效果只是将AEB制动功能去掉,单纯使用分级警告功能。
当然在如今无线通信技术高速发展的时代,仅仅基于本身感知去做判断会存在一定的局限性,无线通信技术诸如V2X的技术能够更高实时的对多车进行信息交互从而更好的完成多智能体路径规划等工作,这里简单介绍一下使用V2X技术实现FCW的思路。
使用了V2X技术,从车也可以当作主车来看,如果单纯靠主车搭载的毫米波雷达传感器有时并不能精确的获得从车信息,很多运动状态是通过相应计算得到的,但是如果两车都装载了V2X,从车自身的姿态,位置,运动状态等信息可以一并打包发送给主车。
在FCW报警时主要还是利用到了AEB中共用的TTC值来评估碰撞的情况,那么TTC值计算过程中最主要的就是两个变量距离和速度,对于距离来说有了V2X技术两车每时刻的位置都可以得到,再通过勾股定理即可计算出两者的直线距离和每个横向纵向距离。在计算速度前,还要获得主车的航偏角完成速度的分解,具体分解方法与AEB设计过程中类似,然后可以通过速度差得到两车纵向相撞时间,从而推送横向的距离差,得到该值后用纵向距离和速度进行TTC判断,完成最终的无警告,预警,警告的三级提示作用。