自动驾驶仿真四—— 基于PreScan与Simulink的UDP数据通信
1. 数据通信的需求
博主前面的博文也已经谈及了Carsim、Prescan 与 Simulink 在开发过程中其实也是遵循“V”型开发流程及思想的;无论是Carsim还是Prescan 都可从基于模型的控制器设计(MIL)到利用软件在环(SIL)和硬件在环(HIL),乃至车辆在环(VIL)进行的实时测试。 就以车辆在环测试(Vehicle-In-the-Loop,VIL)来说,将虚拟交通环境产生的测试场景实时注入给真实物理世界中待测自动驾驶汽车控制器,使其控制真实车辆产生运动行为,并借助高速数据通讯将真实车辆运动状态实时地映射到虚拟交通环境中,实现数字孪生车辆与待测自动驾驶汽车平行执行以动态更新虚拟测试场景,虚实结合完成对真实自动驾驶汽车的性能测试。
如图所示,虚拟测试场景由包含光照、天气、道路、交通参与者等组成的虚拟测试环境以及复现真实待测自动驾驶汽车运动行为的装配高保真度传感器模型的数字孪生车辆组成。传感器模型感知虚拟测试环境,得到结果级的虚拟目标状态信息,凭借V2X、5G 等无线数据通讯或者 UDP(User Datagram Protocol,用户数据报协议)、CAN 等有线数据传输链路实时地发送给在真实物理世界运行的待测自动驾驶汽车。[CAN总线通信的相关知识,感兴趣的小伙伴可参考博主前面的分享博文《汽车电子技术——CAN总线系统》]。 自动驾驶汽车控制器根据传感器信号采取相应的行为决策并发送给底盘执行机构,使得真实待测车辆实时地响应由场景仿真软件构建的虚拟测试场景所触发的动作。同时,真实物理世界中待测自动驾驶汽车的运动状态信息实时地凭借数据通讯链路回传给仿真测试场景里的数字孪生车辆,实现待测车辆运动映射并与虚拟交通环境产生交互行为,从而完成自动驾驶功能的测试与验证。在环测试方法采用仿真场景生成技术丰富了真实物理世界的测试环境,实现了真实物理世界与虚拟测试场景之间的实时信息互通、状态互动,弥补了虚拟仿真测试与实车道路测试之间的差距。 所以无论是虚拟仿真测试平台之间,或者虚拟仿真测试平台与实物之间总是需要建立数据传输链路的。本博文就以上一篇的AEB系统仿真模型作为基础,写写Simulink中车载以太网UDP通信模块的使用。
2. Simulink的UDP通信模块
网络通信协议 (Transmission Control Protocol/Internet Protocol)(简称 TCP/IP),是车载以太网最基本的协议之一。TCP/IP 由很多协议组成,其中包含了 TCP(传输控制协议)、UDP(用户数据报协议)、IP(互联网协议)、ARP(地址解析协议)、Icmp(Internet 控制报文协议)等。 以最常见的TCP协议和UDP协议来说,二者相同之处在于都会将数据包发送至网络层通过IP协议进行传输。不同之处在于TCP协议是一种可靠的端到端通信方式,它提供一种面向连接的、可靠的数据流服务,可以保证数据在传输过程中不会丢失,同时保证数据的有序性,以提供应用程序间的通信。当应用程序使用TCP与另外一个程序建立通信连接时,首先会发送一个连接请求,请求被送到一个指定的IP地址和端口上,通过三次“握手”后即可建立可靠的全双工通信通道。UDP协议则更注重数据传输的高效性,不能保证数据传输的可靠性,是一种无连接、不可靠的数据传输服务协议。不提供端到端的通信,只是简单的将数据把数据报文发送到网络,并从网络接收发送来的数据报文。如果在某次数据传输过程中,UDP数据报文的端口号与目标端口号不匹配,则直接丢弃该数据。 具体看不同的场景需求,UDP具有TCP无法匹及的速度优势,大大减少了数据传输过程中的时间延迟。如果考虑到系统对实时性的特殊要求,选用 UDP/IP 协议作为数据交换通常也是不错的选择。下面就简单介绍下Simulink中UDP通信模块。 该UDP通信模块提供了Simulink软件环境与外界通过以太网实现通信的功能,包括 UDP Send和UDP Receive模块组,其功能说明如下: 1) UDP Send通过UDP协议向指定的远程机器发送数据,可配置远程机器地址、端口号等;
2) UDP Receive模块通过UDP协议从指定的远程机器接收数据,可配置远程机器地址、端口号、数据大小、源数据类型等。注意接收消息一般需要设置成固定长度。
其中,UDP send需要配合Byte Packing使用,UDP receive需要配合Byte Unpacking使用。具体建模时请注意对应的参量的个数正确。
3. AEB系统模型的UDP通信建模
下面就以上一篇博客的AEB系统模型为基础来实现UDP通信功能吧。主要的思想就是将上一篇博客的AEB仿真测试模型,单独将AEB算法模块拆出来,建设将其建立在另一个仿真测试平台上,在本例中新建一个matlab的simulink模型,所以其实可以看成是一台电脑中两个simulink仿真平台间通信的特例,两台设备的不同仿真平台、或者仿真平台及实物之间的通信主要思想也是如此。以下是AEB算法平台搭建好通信模块如下:
上位机指可以直接发送操作指令的计算机或单片机,一般提供用户操作交互界面并向用户展示反馈数据。下位机一般用于接收和反馈上位机的指令,并且根据指令控制机器执行动作以及从机器传感器读取数据。所以按此来说,本例中的两个仿真模型/平台可以看作如下近似的概念: 上位机:基于Prescan&Simulink的驾驶员模型、车辆模型等 下位机:基于Simulink 的AEB算法执行模型 上面这样分其实并不太准确的,毕竟车辆模型中的制动、节气门模型就属于执行动作部分。但是这样分类也就是为了近似意思方便表述和引入了,下面谈及两者也就以上、下位机来表述了。 下面继续展开一些具体相关的操作实践。 重新打开一个matlab并建立一个新的simulink模型,将AEB算法模块粘贴过来,并按照前述的通信思想建模如下:
此处记得增加一个simulation pace模块,来做仿真运行和真实时间的同步设置。
将上位机的仿真模型同样建立UDP通信,两者的对应关系如下:
下面给出部分参数设置:
其中远程机器地址在此都是本机的无线网络IP,通过cmd>ipconfig查询。
4. 仿真结果分析
以上建模设置完毕,就可以同时运行两个simulink程序即可,实现UDP通信,AEB联合仿真成功。仿真结果与上一篇博客一致,在这里就不再重复贴出了。 对于上、下位机的数据发包情况的查看监控,可以使用网络封包分析软件wireshark,轻松可查数据的发送通信情况,这样可便于监控通信正常以及问题模型调试。下面是下位机端口25001发送的3参量抓包示例:
wireshark抓包软件使用介绍 一般wireshark安装使用可能会有如下一些问题: 1) Q:wireshark使用时提示没有本地接口 A:npcap软件重装,配置全选上 2) Q:选择接口后软件便卡死了 A:在博主电脑中是因wireshark和npcap不匹配所致 3) Q:查找UDP端口没有数据 A:检查接口选择及端口正确 以下给出适配正确的wireshark 3.2 和npcap 1.0安装文件,有需要的小伙伴们按需下载,我上传好给大家免费获取。 wireshark3.2&npcap1.0免费下载.rar
5. 参考学习的书目教材
- PreScan Manual Documentation
- 《Matlab/Simulink系统仿真超级学习手册》 石良臣 编著
- 《基于AEB的汽车自动制动系统硬件设计及控制算法研究》 田祖林 2021硕士论文
- 《自动驾驶汽车车辆在环测试方法研究》申静峰 2021硕士论文
- 《面向半实物仿真系统的Matlab/simulink模型组件化技术研究》高宁 2019硕士论文
=文档信息= 本学习笔记由博主原创整理编辑,仅供非商用学习交流使用 由于水平有限,错误和纰漏之处在所难免,欢迎大家交流指正 如本文涉及侵权,请随时留言博主,必妥善处置 版权声明:非商用自由转载-保持署名-注明出处 署名(BY) :zhudj 文章出处:https://zhudj.blog.csdn.net/
|