王绅同,苏清华,王立勇,张鹏博,王弘轩,姜海燕
(北京信息科技大学 现代测控技术教育部重点实验室,北京 100192)
近年来,随着科技不断进步,无人驾驶汽车(unmanned autonomous vehicle,UAV)技术飞速发展[1]。为促进我国UAV产业和无人驾驶技术发展,2017年中国汽车工程学会成功举办首届中国大学生无人驾驶方程式大赛(formula student autonomous China,FSAC)[2],引起国内各大高校与汽车相关企业的密切关注。为保证UAV在运行时的安全,必须开发远程监控与数据管理系统。
车辆远程监控系统应用研究已经具有一定规模,已有许多科研团队针对不同种类车辆进行相关远程监控系统研究。张海逢[3]提出一套基于控制器局域网(controller area network,CAN)总线与Android技术的车辆数据采集与远程监控系统,实现对普通乘用车的运动轨迹回放、数据分析、数据展示等监控功能。王奇等[4]以STM32F103 单片机为主控制器,采用 CAN 总线传输,应用多种传感器融合技术,实现对胡萝卜联合收获作业的实时监测与夹持输送带带速自动控制。在无人驾驶领域,赵丹丹[5]将全球定位系统(global positioning system,GPS)、地理信息系统 (geographic information system,GIS)、通用分组无线业务 (general packet radio service,GPRS)/3G无线网络集成为一体,实现数据通信功能,使用Visual Basic 6.0设计远程监控系统,使监控人员通过观察监控界面对无人车进行实时监视和科学的控制管理。曹国浩[6]采用客户端/服务器(client-server,C/S)模式,将无人驾驶智能车系统和监控终端作为客户端,采集各种传感器信息,通过4G网络与服务器系统之间进行信息传递,实现对无人驾驶智能车远程监控。
目前研发的移动端远程监控系统多基于Android或iOS系统等,基于我国自主研发的鸿蒙系统的车辆无线监控系统仍是空白。针对无人方程式赛车的远程监控系统,目前没有相应的研究。因此,本文基于鸿蒙系统[7],结合CAN总线、蓝牙通信、Spring Boot框架、MySQL数据库等技术设计了无人方程式赛车远程监控与数据管理系统。
基于鸿蒙系统的无人方程式赛车远程监控与数据管理系统整体架构如图1所示,主要由移动端、云数据库和远程监控平台3部分组成。移动端负责通过蓝牙通信接收蓝牙CAN卡转发的无人方程式赛车CAN总线上的电机、电池箱、位移传感器、压力传感器、霍尔传感器和其他传感器数据;将解析后的CAN数据通过5G移动网络上传到云数据库和显示到移动端设备界面;接收远程监控平台的控制指令并转发给无人方程式赛车。云数据库负责接收移动端发送到的数据并将其存储;存储远程监控平台的控制记录信息;根据远程监控平台发来的数据请求,通过互联网将数据回传到远程监控平台。远程监控平台负责将接收到的传感器数据进行展示,实现对无人方程式赛车的状态、故障信息的远程监控。车队队员可以通过网页实时查看无人方程式赛车的状态和故障信息数据,在赛车出现故障时通过远程操作将紧急制动指令发送到移动端,从而确保人车安全。
图1 系统整体架构Fig.1 Overall system architecture
移动端软件采用华为鸿蒙系统,并使用华为一站式集成开发环境DevEco Studio软件进行设计与开发。移动端软件采用多线程模式进行开发,分为主线程、蓝牙数据接收线程、解析数据发送线程、远程数据接收线程、蓝牙数据发送线程。各线程之间互不影响、独立工作,无数据时进入休眠期,可实现数据实时接收、准确解析、实时发送。
主线程负责建立蓝牙连接、更新页面用户界面(user interface,UI),以及调用子线程。
蓝牙通信使用鸿蒙系统传统蓝牙模式蓝牙协议2.0版本进行开发,并使用鸿蒙系统中的USE_BLUETOOTH、DISCOVER_BLUETOOTH、MANAGE_BLUETOOTH权限分别获取允许查看蓝牙配置、允许查找远端设备、允许配对蓝牙设备等权限,实现开启和关闭蓝牙扫描、获取已配对设备列表、查询远端蓝牙设备名称和媒体访问控制(media access control,MAC)地址、获取配对状态、发起蓝牙设备配对、获取通用唯一标识符(universally unique identifier,UUID)、使用蓝牙读写功能、建立蓝牙Socket通信等。蓝牙连接模块流程如图2所示。进入程序后可自动检测是否打开蓝牙,并提示是否打开蓝牙,管理蓝牙状态。连接后,自动获取蓝牙设备的MAC地址,显示蓝牙连接成功,并调用蓝牙数据接收线程。
图2 蓝牙连接模块流程Fig.2 Bluetooth connection module process
主线程与子线程之间使用鸿蒙系统线程间通信处理机制EventHandler来处理获取最新数据。当数据解析线程解析数据后,通过EventHandler将数据传递给主线程,主线程将数据从相应的数组中取出用于更新界面。
蓝牙Socket通信建立后,数据接收线程激活,开始接收并解析数据,蓝牙数据接收流程如图3所示。接收到数据帧后,按照定义的CAN协议判断数据帧是否为空、数据帧头格式是否正确,若不正确则丢弃该帧数据。当数据帧头正确时,按照如表1所示的CAN协议解析传感器数据信息。当数据解析并滤波后,存入到设置的数组CarInfoBean的相应变量中用于传递到主线程与解析数据发送线程。
表1 CAN通信部分协议Table 1 Part of CAN communication protocol
图3 蓝牙数据接收线程流程Fig.3 Bluetooth data receiving thread process
数据解析后,考虑到霍尔传感器数据容易受到电磁干扰、油门踏板在有人驾驶模式下使用频率较高,故对霍尔传感器数据、油门踏板位移传感器数据使用扩展卡尔曼滤波(extended Kalman filter,EKF)算法进行数据处理。相较于标准卡尔曼滤波,EKF算法的主要优势在于其能够处理非线性系统。
EKF算法的状态方程如式(1)所示,用于进行预测,根据先前的状态估计和控制输入,预测系统的下一个状态。
xk=f(xk-1)
(1)
式中:xk为k时刻系统的状态向量;f(xk-1)为描述状态演化的函数。
测量方程如式(2)所示,用于将系统状态的预测与实际观测数据进行比较,并校正状态估计。
zk=h(xk)
(2)
式中:zk为k时刻的测量值;h(xk)为测量函数,描述测量值和状态之间的关系。
以下为EKF算法的迭代过程,分为预测和更新2个步骤。这2个步骤交替进行,形成迭代循环,用于逐步估计系统的状态,从而逐步提高对系统的状态估计。
预测步骤中的状态预测方程如式(3)所示,用于预测当前时刻的系统状态。通过将先前时刻的状态估计和控制输入传递给状态转移函数,可以获得对当前时刻状态的预测。
(3)
预测步骤中的协方差预测方程如式(4)所示,用于在没有新观测数据的情况下,估计下一时刻系统状态的协方差,并在后续的更新步骤中继续使用。
(4)
更新步骤中的卡尔曼增益计算如式(5)所示,用来在状态更新步骤中权衡系统模型预测和观测数据之间的不确定性,以及它们的相对权重,从而获得对系统状态更准确的估计。
(5)
式中:Kk为卡尔曼增益;Hk为测量方程在k时刻状态预测下的雅可比矩阵;Rk为测量噪声协方差矩阵。
更新步骤中的状态更新方程如式(6)所示,用于计算新的状态估计值,将系统状态的预测值与观测数据进行校正,以获得更优的状态估计。
(6)
更新步骤中的协方差更新方程如式(7)所示,用于计算新的协方差矩阵,以反映通过观测数据对系统状态进行修正后的不确定性。
Pk|k=(I-KkHk)Pk|k-1
(7)
式中:I为单位矩阵。
解析后数据将通过5G网络被发送至云端。采用2种发送方式:一种使用WebSocket协议将数据发送到监控系统后台,前端从后台实时获取数据进行显示;一种是使用HTTP协议将数据发送到数据库中。2种方式都使用处理网络请求的开源框架OKHttp3。这是一个Java的HTTP+SPDY客户端开发包,不仅支持Android,也同样支持鸿蒙系统使用。在发送数据到数据库时需要获取访问数据库权限,故需要首先登录平台,获取登录后的token数值,从而获取访问数据库接口权限。在使用OKHttp3时,需要加入网络依赖:implementation′com.squareup.okhttp3:okhttp:4.9.0′,网络访问权限:ohos.permission.INTERNET,修改网络连接状态权限:ohos.permission.SET_NETWORK_ INFO,获取网络连接信息权限:ohos.permission.GET_NETWO RK_INFO。OKHttp3中支持同步与异步2种请求,由于数据是快速接收并解析转发的,数据量较大,故使用异步请求的POST请求进行数据发送,其中数据是按照JavaScript对象符号(javascript object notation,JSON)格式进行发送。
OKHttp3发送异步请求按照以下5步进行:1)创建OKHttpClient实例。2)创建RequestBody实例,主要用来传递JSON字符串中的数据,并对params数组的长度进行判断,如果大于0则往下执行。3)创建Request实例,在该实例中设置发送路径URL(uniform resource locator)和post请求方式。4)创建Call回调对象并执行,获取一个response对象。5)发送请求:在发送登录请求的方法中通过登录接口将用户名密码传入到后台中,从而登录系统,并通过onResponse回调中保存获取到登录成功后的token值,保存到变量中,并在发送数据的request实例加入Header头,将token放入Header中,用于验证信息。在发送数据时,通过数据接口,将带有token值的Header头部和数据值的Params数组所形成的字符串传入数据库后台。
远程数据接收线程负责接收远程监控平台发送的控制指令信号,在主线程启动的同时即启动。当监测到指令信号时,线程先对指令进行判断。如果不是紧急制动控制指令,则忽略该帧数据;如果是紧急制动控制指令时,按照定义的CAN协议封装为1条16进制数据,该数据含有控制车辆控制单元(vehicle control unit,VCU)发出紧急制动的指令,数据生成后线程将数据传递并激活蓝牙数据发送线程。
蓝牙数据发送线程负责将数据通过蓝牙Socket通信经蓝牙CAN卡发送到赛车VCU[8]中。蓝牙数据发送线程对接收16进制数据按照表2中的数据帧格式进行加工,即在帧数据前加上帧类型、数据长度等帧描述与帧ID信息。CAN数据帧封装后,按照表3中的蓝牙数据包格式进行蓝牙数据包封装,即在数据帧前加入蓝牙数据包头0x24与CAN数据帧总数量N,使其符合蓝牙CAN卡数据帧格式,之后通过蓝牙通信发送该数据,从而实现控制赛车。
表2 CAN帧格式Table 2 CAN frame format
表3 蓝牙数据包格式Table 3 Bluetooth packet format
本系统选用MySQL软件对数据库进行设计,并使用MySQL8.0版本。通过对系统需求的分析,将数据表设置为用户信息表、用户角色表、赛车运行信息表、赛车远程控制记录表、系统操作日志表,每个表根据不同的信息设置相关字段与主键。用户可以通过赛车运行信息表查看各个传感器数据、电池电流、电池电压等数据情况,可以实现故障位置与时刻精准定位。
数据库建立时,使用基于Java的持久层框架Mybatis来实现对数据库的底层操作。Mybatis的功能架构分为3层[9]:
1)应用编程接口(application programming interface,API)层。提供给开发人员的接口API,收到调用请求后立刻调用数据处理层来完成具体的数据处理。
2)数据处理层。负责具体的SQL查找、SQL解析、SQL执行和执行结果映射等。
3)基础支撑层。负责基础功能,包括连接管理、事务管理、配置加载和缓存处理等,为上层的数据处理层提供最基础的支撑。
数据由移动端发送至数据库、数据由前端发送到后台时,使用高级加密标准(advanced encryption standard,AES)加密算法,AES加密算法具体的加密流程如图4所示。AES具有3种密钥长度,分别是128位、192位、256位,且还拥有128位分组长度。AES密钥长度和加密解密次数相互对应。不同的密钥长度,加密的次数完全不同。当密钥为 128 位时,仅仅通过10次加密解密的轮换即可,密钥长度变长,加密的次数也就变多。依次按照密钥变长一次,密钥加密解密次数增加两次的规律递增。数据库会将AES加密后的数据存入,当监控系统调用数据时,将从数据库获取的数据使用AES解密算法进行解密操作,并将解密后的数据发送至前端。
图4 AES加密算法流程Fig.4 AES encryption algorithm process
在用户注册时,使用BCryptPasswordEncoder算法对用户名密码进行加密,并将加密后的结果存入数据库中的用户信息表中。当用户进行登录时,后台系统将用户添加的信息使用BCryptPasswordEncoder进行加密,数据传递到数据库中,与数据库中用户名密码对比,若一致则视为鉴权成功,用户登录成功。BCryptPasswordEncoder算法工作流程如图5所示。
图5 BCryptPasswordEncoder算法工作流程Fig.5 BCryptPasswordEncoder algorithm workflow
远程数据监控平台采用浏览器/服务端(browser-server,B/S)架构进行开发。相比C/S架构的使用每次都需安装新的客户端软件,B/S架构的开发无需任何安装,以Web为基础,浏览器就是B/S架构的客户端,用户只需下载一个浏览器,就可以使用C/S架构开发所有的应用程序。
监控平台采用前后端分离模式,前端使用超文本标记语言(hyper text mark-up language,HTML)、级联样式表(cascading style sheets,CSS)与JavaScript技术。后端使用SpringBoot框架,远程数据监控平台功能模块如图6所示。
图6 数据监控平台功能模块结构Fig.6 Functional module structure of data monitoring platform
监控平台主要由用户管理模块、数据监控模块、历史数据模块、系统管理模块组成。用户管理模块有用户登录、账号管理功能,用户通过填写用户名、密码、验证码信息访问监控系统,超级管理员通过登录系统管理其他角色用户。数据监控模块有导航菜单、赛车实时数据显示功能,通过数据监控模块可以查看赛车各传感器实时信息,车辆出现异常状况时,可以通过远程操作,将远程指令发送到车端,使车辆进入紧急制动模式。历史数据模块有历史数据查看、数据导出功能,可以查看车辆传感器的历史详细数据信息,并提供数据下载功能,将从数据库取出的数据写入到xlsx文件中保存在本地电脑。系统管理模块主要用于管理日志信息与服务器信息,可以查看登录日志信息、数据发送记录信息、数据操作信息、数据库操作信息、服务器中央处理器(central processing unit,CPU)和内存信息等。
数据监控平台使用流程如图7所示。当用户登录系统后首先进行身份认证,系统根据数据库中的用户表进行用户名密码匹配验证,若认证通过,则进入系统;若认证失败则需重新登录。登录系统后,可查看系统状态信息、查询赛车历史数据、查看当前赛车实施状态、导出赛车历史数据、查看系统日志信息。
图7 数据监控平台使用流程Fig.7 Usage process of data monitoring platform
为验证无人方程式赛车远程监控与数据管理系统的模块功能,在北京信息科技大学沙河校区某封闭路段开展实车测试。测试路段长100 m,宽20 m。按照无人驾驶方程式大赛规则要求,在赛车左侧放置红色锥桶,右侧放置蓝色锥桶,起点终点处左右两侧各放置2个黄色锥桶,同侧锥桶相隔5 m,赛车左右两侧锥桶相隔3.5 m。按照规则进行有人驾驶与无人驾驶下的系列测试,在赛车行驶的过程中验证系统功能。图8为测试使用的无人方程式赛车。
图8 无人方程式赛车实车试验Fig.8 Real car test of unmanned formula racing
为验证系统的可行性,在实车测试前,移动端使用华为MatePad11平板电脑与赛车上安装的蓝牙CAN卡进行蓝牙通信连接,安装手机用户识别模块 (subscriber identity module,SIM)卡并打开移动数据网络进行数据传送,从而测试监控系统的可行性。
图9为通信与监控功能测试结果。从图中可以看出,系统能够接收并成功解析CAN数据报文信息,并将解析后的数据显示到移动端设备与远程Web端。解析结果与赛车状态相同。
图9 数据显示界面Fig.9 Data display interface
为测试系统在数据解析后发送到数据库端之间的数据丢失情况与数据存储耗时情况,在不同时间段的实车测试中对接收到的数据进行计数统计,并将计数结果与数据库中存储的数据总量进行比对,通过数据库中最后一条数据与第一条数据的时间差得出存储耗时。实验测试结果如表4所示。
表4 数据接收存储测试结果Table 4 Data reception and storage test results
由测试结果计算得出数据丢失率平均为0.042 4%,CAN卡数据每10 ms发送一帧,数据存储时间平均延迟时间为8.6 s,移动网络信号强度和质量对延时影响较大。
选取第一个数据作为初始状态,设置初始协方差矩阵为
(8)
设置过程噪声协方差矩阵为
(9)
设置测量噪声协方差矩阵为
R=[0.1]
(10)
构建算法代码,并选取测试数据进行测试。图10为定速30 km/h条件下霍尔传感器测试结果,图11为变速条件下霍尔传感器测试结果,图12为油门踏板位移传感器测试结果。
图10 定速30 km/h时霍尔传感器数据滤波测试结果Fig.10 Test results of Hall sensor data filtering at a constant speed of 30 km/h
图11 变速时霍尔传感器数据滤波测试结果Fig.11 Test results of Hall sensor data filtering at variable speed
图12 油门踏板位移传感器测试结果Fig.12 Test results of accelerator pedal displacement sensor
从图10可以看出,在30 km/h的定速情况下,霍尔传感器数据通过EKF算法处理滤波后曲线比未滤波曲线更加接近30 km/h,滤波后的速度多集中在30.17~29.83 km/h之间,未滤波的速度集中在30.23~29.78 km/h之间。
从图11可以看出,在变速情况下,霍尔传感器数据通过EKF算法滤波处理后曲线比未滤波曲线分布更集中,未滤波数据比滤波后数据起伏剧烈。
从图12可以看出,油门踏板位移数据通过EKF滤波算法处理后曲线比未滤波曲线更加平稳,滤波前上下起伏的数据均被过滤处理。
由上述试验可以看出,数据通过EKF算法处理后数据曲线更加光滑,方便系统对车辆状态进行判断,从而减少系统状态误判。
本文针对大学生无人方程式大赛中MCT无人车队在日常调试赛车的实际需要,结合当前车辆监控系统研究现状,设计了一套基于鸿蒙系统的无人方程式赛车远程监控与数据管理系统。由测试结果得出主要结论如下:
1)根据通信与监控功能测试,基于鸿蒙系统的无人车远程监控与数据管理系统可以与安卓系统一样进行车辆监控,在车辆监控领域使用鸿蒙系统具有可行性。
2)根据数据接收存储测试,移动端多线程的设计方法可有效解决大量数据下数据的快速解析、数据显示与数据发送。
3)根据数据接收存储测试,该系统可有效解决无人方程式赛车传感器数据快速存储问题。