第一次接触SCANeR和VeriStand联调的时候,我被这两个工具的配合方式惊艳到了。它们就像两个配合默契的队友,一个负责车辆动力学仿真,一个负责实时控制,通过UDP协议和RTGateway模块实现无缝对接。下面我就把整个配置过程拆解成小白也能看懂的步骤。
首先需要在SCANeR端安装RT Callas包,这个包相当于给SCANeR装上了"耳朵"和"嘴巴",让它能够听懂VeriStand发来的指令,也能把自己的状态告诉VeriStand。安装完成后,在SCANeR的Scenario中添加RTGateway模块,这个模块就是专门用来和外部系统通信的。
配置RTGateway时,有几个关键参数需要注意:
配置完成后,记得把Modelhandler设置为Remote模式,并修改Modelhandler.cfg文件,填入实时机的IP地址。这一步很关键,相当于告诉SCANeR:"以后有外部系统要控制你,记得听从这个IP地址发来的指令"。
VeriStand这边的配置相对复杂一些,但跟着我的步骤走,保证你能搞定。建议先找到AVSimulation安装目录下的VeriStand_Project_UDP_Template模板工程,这个工程已经帮我们搭好了基础框架,我们只需要根据实际情况修改即可。
在模板工程中,需要重点关注两个Packet配置:
具体修改项包括:
这里有个小技巧:如果SCANeR和VeriStand运行在同一台主机上,这两个IP地址可以相同;如果是分布式部署,就需要分别填写各自的IP地址。
配置完成后,记得删除工程中不需要的模块(比如AEB64和Start Dynamic Model),保留UDP Custom Device和Callas Simulation Model这两个核心模块。Callas模块默认隐藏了很多通道,可以右键选择"Unhide all channels"来显示所有可用通道。
通道映射是整个联调过程中最需要耐心的一环。简单来说,就是告诉系统:"这个数据从哪来,到哪去"。在VeriStand中,我们可以通过两种方式完成通道映射:
第一种是直接在界面上拖拽连接。右键Callas模块选择显示所有通道后,就能看到各种输入输出端口,这些端口可以和我们自己搭建的模型IO直接连接。
第二种是通过设置界面进行映射。这种方式更适合批量操作,可以一次性完成多个通道的映射关系设置。
如果是使用Simulink模型,还需要注意编译设置。在模型编译前,需要确保仿真参数设置正确,特别是采样时间要与整个系统的实时性要求匹配。编译完成后,生成的.dll文件可以直接导入VeriStand中使用。
我在实际项目中遇到过一个小坑:有时候模型编译后导入VeriStand会出现兼容性问题。这时候可以尝试重新生成代码,或者在VeriStand中重新加载模型,通常都能解决。
所有配置完成后,就可以开始联调测试了。建议按照以下步骤进行:
测试过程中,有几个常见问题需要注意:
我在一个HIL测试项目中就遇到过时序问题:VeriStand发出的控制指令总是比预期晚几毫秒到达SCANeR。后来发现是网络交换机配置问题,更换为支持IEEE 1588协议的交换机后问题就解决了。
当基础功能调通后,可以考虑做一些性能优化。比如:
这套方案不仅适用于主车控制,还可以扩展应用到:
我曾经用这套架构实现过一个复杂的V2X场景测试,通过VeriStand实时注入各种交通参与者的状态信息,SCANeR则负责主车的动力学仿真和场景渲染,效果非常不错。