汽车驾驶模拟器控制系统的设计与实现

2020-03-09 13:12
计算机测量与控制 2020年2期
关键词:模拟信号模拟器方向盘

(长安大学 汽车学院,西安 710064)

0 引言

汽车驾驶模拟器是一种能够正确模拟汽车驾驶动作,使驾驶者有实车驾驶感受的仿真设备[1]。驾驶者通过操纵汽车驾驶模拟器上的人机交互设备来感受类真实的汽车驾驶状态,通过场景建模、音效渲染等虚拟现实技术获得良好的沉浸感。汽车驾驶模拟器不仅能够模拟科目二、科目三、城市工况、高速工况、环山路等多种道路状况,还能够模拟夜晚、雨雪、雾天等多种天气状况[2],使驾驶者在操作过程中熟悉驾驶环境,提高适应能力及反应速度。由于汽车驾驶模拟器安全高效、节能环保等优点,目前被广泛用于驾驶员模拟考试、科研及教学等多种领域[3]。

汽车驾驶模拟器系统可分为视景仿真系统、软件设计系统、硬件控制系统三大部分,其中硬件控制系统主要包括模拟器数据采集系统、数据通信系统、仪表控制系统、力反馈系统等。控制系统能够实时地采集驾驶者的操作状态数据并实现与主控计算机的通信、仪表盘控制及方向盘回正[4],是实现人机交互的重要基础。因此,为了保证模拟器有良好的沉浸感、交互性与实时性,应对控制系统进行合理设计。

本文设计的汽车驾驶模拟器控制系统具有精确度高、扩展性强、成本低等特点。其中数据采集系统基于ATmega2560单片机进行设计,能够获取汽车踏板、方向盘、安全带、点火开关、照明灯光、转向灯光、危险报警闪光灯、换挡机构、手刹、喇叭、雨刷、后视镜位置等状态信息。使用Arduino UNO R3开发板、电机扩展板、步进电机实现了车速表和转速表的控制,并借助VS2010完成了与主控计算机之间的通信,确保模拟器的工作实时、高效、准确。

1 系统方案设计

设计汽车驾驶模拟器控制系统,首先需要明确其功能需求,根据需求确定系统总体方案设计[5]。该系统需要考虑的功能需求主要如下:

图2 数据采集系统硬件设计框图

1)能精确实现基本驾驶操作。由于科目二考试练习需要,方向盘、离合踏板、制动踏板、加速踏板、后视镜位置调节旋钮等模拟信号传输应较为精准,结合车辆动力学模型呈现出较高质量的车辆半联动状态。车辆起步、行驶和停车时用到的安全带、点火开关、手刹、换挡机构、喇叭、左右转向灯、危险报警闪光灯及特殊天气时使用的雾灯、示廓灯、远近光灯、雨刷等信号传输应高效可靠。驾驶模拟器结构组成应符合行业标准JT/T 378-2014《汽车驾驶培训模拟器》的要求。此为汽车驾驶模拟器最基本且最重要的任务;

2)车辆状态显示。在汽车行驶过程中需要实时监控车辆速度及发动机转速,设计仪表盘实物可以更加直观地显示车辆状态,并使驾驶员养成良好的驾驶习惯。

3)实时响应、安全可靠。延时响应不仅影响到驾驶者的体验感,还可能使科目二、科目三模拟考试无法正常进行,因此所有的硬件设备都应快速响应,分离数字信号和模拟信号,尽量减少模拟信号收到的干扰源,并优化串口通信,给驾驶者更好的交互感和沉浸感。

为实现上述功能需求,本方案基于开源平台、低功耗的AVR单片机设计了数据采集系统,将采集到的设备操作状态分为模拟信号和数字信号分别处理,数据以数据帧的方式传输给主控计算机。主控计算机根据串口通信协议读取各类数据,结合动力学模型、视景平台和音效完成模拟驾驶功能。然后,主控计算机将动力学模型计算得到的车速和发动机转速等信息生成数据帧写入仪表控制系统,驱动步进电机旋转。系统总体结构框图如图1所示。

图1 系统总体结构框图

2 硬件设计

2.1 数据采集系统硬件设计

根据需求分析,汽车驾驶模拟器数据采集系统共需6路模拟输入,23路数字输入。而ATmega2560单片机有100个管脚,其中包括16路模拟输入,54路数字输入/输出,4路UART接口[5],适合本系统大量IO接口的设计需求。

本系统采用ATmega2560单片机为主控制器,并设计了电源电路、时钟电路、复位电路、数据采集电路、滤波电路、串行接口电路[6],其与主控计算机的通信采用UART(Universal Asynchronous Receiver and Transmitter)接口, USB转TTL设备采用以CH340芯片为核心的集成模块,单片机烧录程序采用ICSP(In-Circuit Serial Programming)接口[7]。具体硬件设计框图如图2所示。下文着重设计了电源电路及数据采集电路。

2.1.1 电源电路设计

电源模块可为系统提供5 V和3.3 V电源,电源电路包括外接电源供电电路、电源滤波电路、电源稳压电路、USB供电电路、电源切换电路等。在此电路中当运算放大器输入端V+V-时,即外接电源VIN>6.6V时使用低压差稳压器NCP1117稳压后的5 V进行供电。3.3 V由低压差稳压器LP2985-33稳压5V后得到。另外,可在USB供电电源与P型MOS管的D极之间接一个自恢复保险丝,起到过流时保护电路的作用[8-9]。电源电路如图3所示。其中接插件P4外接以USB总线转接芯片CH340为核心的集成模块,将该模块的TX、RX接口与ATmega2560的RX、TX接口分别连接,二者的GND引脚相连,并将集成模块的5V电源作为单片机的供电电源,在电源与地间接一个0.1 μF的去耦电容。

图3 电源电路

2.1.2 模拟信号电路设计

模拟信号的采集使用了线性型霍尔传感器、电位器和PS2操纵杆。由于科目二考试中车辆大部分时间处于半联动状态,因此对方向盘和三踏板的精确度要求比较高,为了更好地模拟考试评分制度,需要此类模拟信号稳定且准确。除了传感器标定及动力学模型搭建以外,数据采集系统硬件滤波电路也是不可缺少的。本系统在模拟输入端加入电源去耦电容及输出端对地的滤波电容。考虑到科目二考试中需用到后视镜调节按钮,PS2操纵杆可提供上下、左右两个方向的模拟信号,能够模拟真实车辆中手动型后视镜调节按钮。模拟信号电路如图4所示。

图4 模拟信号电路

2.1.3 数字信号电路设计

数字信号的采集使用了开关型霍尔传感器和开关控制电路两大类。换挡机构使用集成的开关型霍尔传感器模块,其本质为数字信号输出,相当于6个开关信号,操纵杆摆动到相应挡位时,此挡位输出为高电平,其余挡位输出为低电平。其余数字信号本质也为开关量,根据电路系统本身需要设计为上拉电阻或下拉电阻式开关控制电路。以转向灯信号为例,左、右转向灯信号输出端对地各接一个10 k Ω的下拉电阻,与电源之间接各有一个开关,当某一转向灯开启时,对应的开关闭合,完成输出信号由低电平到高电平的变化。危险报警闪光灯开启时,两个开关同时闭合。相应的开关控制电路如图5所示。

图5 开关控制电路

2.2 仪表控制系统硬件设计

步进电机28BYJ-48电机是永磁型单极性四相步进电机,电机工作电压为5~12 V。控制器选用Arduino UNO R3开发板,具有6路模拟输入,14路数字输入/输出。28BYJ-48步进电机有5个引脚,需接入4路数字信号,1路GND,由此可知开发板满足仪表控制系统硬件需求。配套使用Arduino AFMotor电机扩展板,并外接12 V直流电源供电,扩展板带有两个L293D芯片,可驱动两个电机同时转动。L293D是一种双桥驱动芯片,每一个L293D可同时驱动1路步进电机或者2路直流电机[10],连接示意图如图6所示。

图6 步进电机驱动电路连接示意图

3 软件设计

硬件设计保证了信号传输的可靠性,而软件设计可以保证汽车驾驶模拟器具体动作的准确性、实时性。软件设计分为单片机程序设计和串口通信设计两部分,本系统中单片机程序设计采用Arduino平台的开发工具Arduino IDE,通过C++语言编程,可直接将程序烧写进单片机。ATmega2560带有ICSP在线串行编程功能,通过VCC、MISO、MOSI、SCK、GND、RESET等6个接口为单片机烧录程序,通过UART实现与主控计算机的通信功能。Arduino UNO R3开发板则通过开发板上的USB接口芯片ATmega16U2实现与主控计算机的通信功能。主控计算机程序用VS2010开发,用于处理单片机发送的数据帧,提取各模拟信号值和数字信号值并代入车辆动力学模型。

3.1 数据采集系统软件设计

单片机的主要功能包括定义引脚、数据采集与处理、信号滤波、生成数据帧等,数据采集系统软件控制流程图如图7所示。其中决定汽车驾驶模拟器真实感的部分是数据的采集与处理[11],尤其是模拟信号量的处理方式,所以需对模拟信号增加软件滤波设计,使信号更加稳定。由于ATmega2560内置模数转换功能,能将输出的模拟信号转变为数字量,且线性型霍尔传感器和电位器的模拟信号量都呈线性变化,可以用map()函数作映射。数字信号用一位或多位开关量表示。模拟信号通过analogRead()读取信号值,数字信号需用pinMode(pin,INPUT)设置引脚为输出模数,再通过digitalRead()读取信号值,最后数据帧以数组的形式发送。需注意在Arduino IDE中设置的波特率要与主控计算机程序的波特率一致。

图7 数据采集系统软件控制流程图

3.2 仪表控制系统软件设计

本系统软件设计主要用到三部分:1)Arduino第三方库AccelStepper,使开发板可以同时控制两个28BYJ-48步进电机;2)第三方库AFMotor,使步进电机可以在AFMotor电机扩展板的配合下进行工作;3)定时中断函数。仪表控制系统软件控制流程如图8所示。

步进电机驱动程序的设计过程中需要解决以下问题:1)由于数据帧发送频率很快,电机还未转到目标位置时就会得到下一帧的目标位置,容易出现电机指针抖动或者错乱的现象; 2)若下一帧目标位置与上一帧相同,电机会返回位置0重新转动。为解决这些问题,保证数据稳定,需在电机未到目标位置时关闭串口,且在检测到下一帧目标位置与上一帧目标位置相同时开启定时中断,每100ms检测一次,直到目标位置不同时,通过moveTo()函数赋予电机输出轴目标位置,再用run()函数执行转动指令。

3.3 串口通信设计

单片机向主控计算机实时发送数据帧,数据帧由帧头和数据信息构成[12],每一类信号都由信号位置标识符、分隔符和信号输出值组成,使数据信息能够被主控计算机分类提取[13]。数据帧格式如表1所示。

表1 数据帧格式

采用UART通信,在Arduino IDE中查看当前设备的COM口编号,在VS2010环境下编程,首先由com[0].Open()函数设置波特率并打开串口,设置缓冲器长度,由com[0].Read()函数读取数据帧信息,然后根据数据帧中信号位置标识符和分隔符读取各信号值[14]。同时将动力学模型中的车速和发动机转矩提取出来,发送给Arduino UNO R3开发板,查看COM口编号,由com[1].Open()函数设置波特率并打开串口,经过开发板上的USB接口芯片,用com[1].Write()函数完成通信。变量的信号输出值范围示例如表2所示。

表2 变量的信号输出值范围示例

4 实验验证

为了验证本系统的准确度与实时性,在驾驶模拟器上进行实验,实验结果表明:23路数字信号响应迅速、准确,离合、制动、加速踏板能实现汽车半联动的状态,但在倒车入库、侧方停车等项目中发现方向盘精度不够高,从而影响模拟科目二考试结果。因此需要对方向盘进行准确标定。汽车方向盘可旋转1 080°,设最左边为-540°,最右边为540°,以每10°为单位测量线性型霍尔传感器的模拟信号值,并做5次实验求取平均值,得到图9实线部分。

图9 方向盘标定结果

由图9实线部分可知,方向盘在转动的过程中并不完全是线性变化的,尤其在右转弯时会有较大的偏差。由实验值拟合的一元二次函数:

y=0.501 5x+370

(1)

引入误差指标R2来评价拟合曲线的精确度,其范围为0-1,越接近1说明拟合曲线的精确度越高。R2能够通过如下公式得到:

(2)

由此公式得到拟合函数的R2为0.98902,为使方向盘完全准确,拟合函数的R2应尽量接近1,可采用分段函数的方式,在拟合产生较大偏差时断开,从而使拟合曲线与实验测量值的误差保持在一定范围内。经过多次试验,确保方向盘每90°的模拟信号值尽量准确,所得的分段函数为:

y=

(3)

如图9所示,分段拟合后的函数值基本与实验平均值完全重合,分段后R2为0.999 79,信号处理过程优化前后对比如表3所示。证明优化后方向盘在转动过程中,角度与模拟信号值的对应关系较为准确,由此可根据单片机发送的模拟信号值得到方向盘转动角度,将此数值代入汽车动力学模型中,根据方向盘和车轮转动角度的比例关系,可以得到当前状态车轮的转动角度。

表3 方向盘信号处理过程优化前后对比

优化后的汽车驾驶模拟器控制系统在功能的实现方面满足行业标准(JT/T 378-2014),且准确性和实时性较好。在真实驾考场地等比例还原的仿真视景平台中实验,该系统可以完成倒车入库、侧方停车、坡道起步、直角转弯、S弯等所有科目二考试科目,且能够在多种工况中稳定行驶,即使在崎岖的环山路中也能保持良好的实时性及沉浸感。经多次实验,模拟信号和数字信号传输准确率达100%。另外,车速表和转速表在低速工况下表现较好,但高速时稍有延迟。对于此问题,需要通过优化仪表控制系统软件程序来解决。本系统在驾驶模拟器实验平台上验证如图10所示。

图10 本系统在驾驶模拟器实验平台上验证

5 结语

本文设计开发了一种基于单片机的汽车驾驶模拟器硬件控制系统,分为数据采集系统和仪表控制系统两部分。对汽车驾驶模拟器进行需求分析后,基于Arduino平台设计了数据采集电路、数据处理程序及电机控制程序,并优化了方向盘的信号传输精度,符合行业标准JT/T 378-2014《汽车驾驶培训模拟器》的功能要求。且硬件电路简单、可靠性好、成本低。并通过串口通信使主控计算机同时完成读写,最后在汽车驾驶模拟器上对该系统进行多次实验验证。实验结果表明:系统实时性、稳定性和沉浸感较好,取得了理想效果。

猜你喜欢
模拟信号模拟器方向盘
草鱼养殖难,“钱”途何在?老渔医教您如何握好“方向盘”,走上高效路
某轻型卡车方向盘抖动问题处理分析
基于CAN总线的车身控制模拟信号采集程序设计
驾驶模拟器转向系统的设计与研究
盲盒模拟器
方向盘松了
采埃孚开发新概念方向盘
中国首个自主研发的地球模拟器投入使用
基于PCIe总线的专用高速信号采集卡设计
数字电子技术的应用与发展研究