陆一弘
(同济大学汽车学院,上海 201804)
日前,得益于高速发展的经济,我国的汽车工业也迅速发展,已成为重要的支柱产业。在汽车工业的发展过程中,计算机仿真技术得到了广泛的应用。使用仿真技术,可以大大缩短产品的开发周期,降低开发成本,提高产品的可靠性[1]。目前,PreScan、CarSim与Simulink都是汽车工程中被广泛使用的仿真软件。然而,这些软件都有其各自的功能与侧重点:PreScan适合行车场景的搭建;CarSim适合动力学模型的建立;Simulink适合控制算法的设计及信号通讯。在整车动力学控制相关研究中,已有人使用CarSim与Simulink联合仿真的方法[2];在智能汽车环境感知的相关研究中,已有人使用PreScan与Simulink联合仿真的方法[3-4]。随着汽车智能化的大力发展,综合应用环境感知以及控制决策的研究势必越来越受到重视,联合上述三种软件进行仿真研究是一个可行的方法。然而,已有文献很少有相关的研究内容,因此对于三者联合仿真方法的研究显得十分必要。
PreScan是一款汽车驾驶仿真软件产品,是一个可以快速搭建无人车测试场景的平台。该软件具有良好的图形交互界面,能提供多种传感器模型,支持摄像头、雷达、GPS、车联网等多种应用功能的开发运用。软件不仅提供多种可视化模型,还可以设置天气状况,场景的逼真程度良好。然而,软件提供的车辆动力学模型非常简单,无法全面真实地反映车辆实际的动力学特性。
CarSim是一款系统动力学的仿真软件。由于该软件保留了实际汽车动力学特性,软件中提供的车辆动力学模型能够较真实地反映汽车横向、纵向与垂向的动力学特性,故利用CarSim可以很好的对汽车的动力学、制动性、操纵稳定性、平顺性等进行研究。然而,CarSim提供的只是较为真实的车辆动力学被控对象,若要利用该被控对象进行深入地研究分析,往往需要结合其他仿真软件联合仿真。
Simulink是MATLAB软件中的一种可视化仿真工具,为模型的设计、测试、计算和仿真提供了图形化的运行环境,可以满足时变系统与多种动态系统的建模仿真。Simulink的应用领域非常广,例如控制算法设计、信号处理与通讯、图像与视频处理等诸多领域,远不局限于汽车领域。此外,Simulink往往可以作为与其余软件联合仿真的平台,Simulink与上述的PreScan、CarSim等软件均可以实现联合仿真。
为了顺利实现三种软件之间的联合仿真,首先需要分别实现PreScan/Simulink与CarSim/Simulink的联合仿真。在此基础上,打通三种软件之间的壁垒,实现联合仿真。仿真所用的典型软件版本为:Matlab:R2018a;PreScan:8.4.0;Carsim:8.0.2。
首先在PreScan的GUI界面中完成车辆环境场景的搭建,例如车辆、道路、楼房等,如图1(a)所示。搭建完成后,在工具栏中点击Build进行编译。若编译通过,继续点击Invoke Simulink Run Mode按钮,PreScan将自动生成可执行的Simulink文件。(两按钮在图1(b)中分别用数字1和2标出)
图1 PreScan的GUI界面及工具栏放大图
生成的Simulink模型包含封装完成的执行器(例如车辆、摄像头等)。运行程序,即可获取执行器输出的物理量。
首先在CarSim的Test Specifications部分设置车辆的参数(例如车身参数、动力总成参数、轮胎参数等)以及行驶工况参数(例如车辆初速度、路面类型等)。设置完成后,在Run Control with Simulink部分配置与Simulink联合仿真有关的参数,内部界面如图2所示。
图2中,1部分设置Simulink的工作空间以及对应的Simulink模型目录,同时选择操作系统的位数;2部分设置仿真步长(包括数学模型步长以及输出文件步长),需注意与Simulink的步长匹配;3部分设置CarSim与Simulink的交互变量,包括输入变量(例如车轮转角、车轮转矩等)和输出变量(例如质心速度、车轮转速等)。设计交互变量的目的,一方面可以用Simulink编写的模块来替代或完善CarSim自带的动力学模型,另一方面可以输出车辆的参数,在Simulink中实现动力学控制。
图2 CarSim中的Simulink模型设置界面
参数配置完毕后,在CarSim的主界面点击Send to Simulink按钮,编译完成后,Simulink模型中CarSim S-Function模块即是先前所设计的动力学模型。该模块的输入、输出均为向量类型,维数与CarSim中的输入、输出变量个数需分别保持一致。
2.1节与2.2节分别介绍了PreScan/Simulink与CarSim/Simulink的联合仿真方法。在智能汽车的研究领域,为了通过环境感知得到的信息来进行车辆的动力学控制,通常需要同时运用以上三种软件。图3是联合仿真研究时典型的闭环流程图。
图3 联合仿真闭环流程图
由图3可以看出,研究时在PreScan中建立车辆的环境场景,搭载在车辆上的虚拟传感器(例如摄像头、雷达、GPS等)实时地将信号发送给Simulink;Simulink对接收到的感知信息通过一定的算法进行处理,获取对动力学控制有效的信息;控制算法利用该有效信息,计算出执行器的期望输入,发送给CarSim的动力学系统;动力学系统将运动状态实时地输出至PreScan虚拟场景中,形成一个闭环。
然而在联合仿真实验时,若直接按照2.1与2.2节论述的方法来进行联合仿真,并不能直接贯通三种软件。这是因为,PreScan与Simulink联合仿真时,Simulink需要由PreScan触发,可生成的Simulink文件必须为slx类型,CarSim与Simulink联合仿真时,Simulink需要由CarSim触发,可生成的Simulink文件必须为mdl类型,两种类型不统一。此外,由PreScan触发的Simulink模型,不能通过其他方式打开,否则无法运行。为了解决上述问题,联合仿真的步骤如下:
(1)在PreScan的GUI中设置完场景及仿真条件后,发送给Simulink生成可执行的slx文件;
(2)在该Simulink模型下搭建感知信息处理算法与动力学控制算法;
(3)新建一mdl类型的Simulink空白文件,添加CarSim S-Function模块,在CarSim中设置完整车参数及接口后,发送至此Simulink,搭建动力学系统(可辅助用Simulink模块来替代或完善该动力学模型);
(4)将动力学系统模型拷贝至步骤(1)中的Simulink文件中,进行联合仿真;
(5)若改变整车参数及车辆初始条件,则重新执行步骤(3)与步骤(4);若改变PreScan仿真场景,则只需在上述Simulink里点击封装完成的regenerate按钮,无需重新关联CarSim。
此外,需注意PreScan、CarSim与Simulink的仿真步长。PreScan与CarSim的仿真步长必须均为Simulink步长的整数倍。例如,若PreScan的步长为0.05s,CarSim的步长为0.001s,则可设置Simulink的步长为0.001s。
本节按照2.3节提出的联合仿真方法,以基于摄像头的电动汽车避撞控制算法为例,进行说明。
PreScan的场景如图1(a)所示。电动汽车在直线道路上行驶,前方有一障碍物,同时在车身前部安装了摄像头。算法要实现的功能是:在行驶过程中,若摄像头检测到汽车与障碍物的距离较近时,汽车将采取制动,停在障碍物前方,否则保持匀速行驶。
本案例研究的思路与图3的联合仿真闭环流程图一致:汽车在行驶时,PreScan中的摄像头实时地发送图像信息给Simulink(环境场景);Simulink里的图像测距算法实时计算汽车与障碍物之间的距离(感知信息处理);根据计算得到的距离,结合一些虚拟传感器的信息,控制器计算得到轮毂电机的期望输入转矩(控制算法);CarSim动力学系统根据物理规律输出车辆的运动状态至PreScan(动力学系统)。
按照2.3节的方法在Simulink平台下搭建模型。模型中的车辆模块由PreScan生成,其内部模块如图4所示。
图4 PreScan生成的车辆内部模块
图4中,1部分是车辆的轨迹计算模块,用于输入车辆在场景中的运动状态;2部分是车辆运动状态的输出模块;3部分是摄像头采集模块,以矩阵形式实时输出采集得到的图像。其中,1部分中车辆运动状态的设定是关联PreScan、Simulink与CarSim的关键。
图5是搭建完成后的轨迹计算模块内部结构。其中,1部分是PreScan自带的部分,需要将速度变量选择为从外部输入;2部分是图像的测距算法;3部分是汽车速度控制算法;4部分是汽车的动力学系统。可以看到,摄像头输出的图像矩阵与测距算法产生关联;测距算法输出的距离与速度控制算法产生关联;控制算法输出的期望转矩与动力学系统产生关联;动力学系统输出的速度与PreScan模块产生关联。由此形成了一个仿真闭环。
图5 轨迹计算模块内部结构
图6是联合仿真过程中的PreScan场景,展示了汽车逐渐靠近障碍物行驶的过程。
图6 仿真过程中的PreScan场景
图7是联合仿真过程中,汽车速度的变化曲线。可以看到,汽车在距离障碍物较远时保持匀速行驶,当摄像头检测到障碍物后开始制动,随后减速度逐渐减小直至停在障碍物前侧。
图7 汽车速度变化曲线
综上所述,通过PreScan/CarSim/Simulink三者的联合仿真,基于摄像头的电动汽车避撞控制算法实现了预期的功能,说明了联合仿真的方法是可行的。
以基于摄像头的电动汽车避撞控制算法为例,实现了PreScan/CarSim/Simulink三者的联合仿真,为综合研究智能汽车的环境感知以及控制决策提供了一种可行的方法。应用该研究方法,还可以研究自适应巡航、自动泊车、弯道避撞控制、车道保持算法等汽车高级驾驶辅助系统的功能,具有重要的意义。