我是靠谱客的博主 冷艳指甲油,最近开发中收集的这篇文章主要介绍Matlab/Simulink在自动驾驶开发中的快速算法模型验证(LCM,protobuf实现通讯),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
1. 背景:
- simulink可以用来搭建各种模型及算法,且可以自动生成汽车级的c/c++代码,支持从原型开发到工业级代码生成。
- 使用simulink搭建自动驾驶需要的算法,并与其他自动驾驶模块及仿真环境通讯,实现快速模型验证。
- LCM是基于UDP广播通讯的跨平台,跨语言的数据交换工具,多家自动驾驶公司均有使用。https://lcm-proj.github.io/
- Protobuf是google开发的跨平台,跨语言的数据交换工具,https://github.com/protocolbuffers/protobuf/tree/master
- 这里主要讨论是基于LCM和protobuf的simulink与其他模块的通讯(跨平台)
2. 架构:
- 所有的数据结构都通过protobuf定义,好处就是数据结构变更之后,依然可以兼容之前保存的log数据
- protobuf序列化为byte[](不要用string)之后,通过LCM广播。LCM虽然也可以定义数据结构并序列化,但是数据结构修改之后,那么代码不能使用之前的log数据。
- matlab的m脚本可以直接使用jar包,故需要将LCM的publish和subscribe,以及prototbuf的序列化和反序列化都使用java语言编写好,打包成jar包,供m脚本调用
- 再使用level 2 s-function封装一个simulink block来调用jar包,实现LCM+protobuf的数据的收发
- protobuf-java.jar包从 https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/,下载
- lcm.jar可以直接从lcm的源代码打包
- 注意使用LCM时,特别是subscribe的函数,要设置接收消息队列的buffer大小,LCM默认不限制接收buffer的大小,很危险。
- 编译的jar包需要放在simulink特定的目录下,在matlab的cmd窗口,输入 edit('classpath.txt'),就知道该怎么做了
3. 结果:
- simulink(windows)运行controller模型,Ubuntu(虚拟机)运行车辆动力学。controller发送control_cmd,车辆动力学发送canbus_chassis
- simulink的s-function
- 运行结果:
最后
以上就是冷艳指甲油为你收集整理的Matlab/Simulink在自动驾驶开发中的快速算法模型验证(LCM,protobuf实现通讯)的全部内容,希望文章能够帮你解决Matlab/Simulink在自动驾驶开发中的快速算法模型验证(LCM,protobuf实现通讯)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复