Simulink中使用ROS1自定义消息
- 简介
- 前提条件
- 操作流程
- 问题一
- 问题二
- 问题三
- 吐槽
简介
最近在做的项目里需要使用Simulink与ROS联合仿真,这里就遇到了一个问题,Simulink无法直接使用ROS中的自定义消息,需要在MATLAB中生成一下,再引入进MATLAB中才能使用,这里简单介绍下,并分享下过程里遇到了几个问题,给一些参考。
前提条件
系统:Windows11
MATLAB版本:2021b
ROS版本:ROS noetic
此外还需要下载Python2.7、CMake这两个版本倒没有什么要求,由于MATLAB 2021b自带ROS Toolbox,所以Robotics System Toolbox Interface for ROS Custom Messages这个插件不需要下载,另一个要下载的是VS2019,这里要用到VS2019里的编译器,而且VS2019是支持MATLAB 2021b的,换VS2022的话要用更高版本的MATLAB,这里未作尝试,其实我觉得更高版本的MATLAB问题应该会少不少。
VS2019的安装包我放在了gitee仓库,有需要可以去下载。
操作流程
参照matlab simulink与 ros通信时messgae注册教程。
其实只要rosgenmsg能执行完,按照MATLAB提示进行操作就可以了,不过这之前还会遇到几个小问题。
问题一
首先就是执行rosgenmsg报找不到Python,即使安装Python后在MATLAB里使用pyversion命令会显示我们安装的Python,这里也还是报错,这里需要使用命令手动设置一下,设置如下:
pyversion('C:\Python27\python.exe')
问题二
之后执行rosgenmsg还会报找不到CMake,这里查到是因为MATLAB 2021b本身的bug,需要修改提示出错的那个.m文件,修改如下:
问题三
最后一个问题就是执行rosgenmsg还会报没有编译器,这里试了直接用MinGW发现还是不行,参考别人的经验发现可以使用VS2019的编译器,只是不知道为什么在此之前还需要下载MinGW的MATLAB插件才能使用 mex -setup C++
来选择VS2019的编译器,MinGW的插件也放在了gitee仓库。
吐槽
近期实在有点搞,基本每天都是灵魂三问:“我是谁,我在哪,我在干什么”,有点离谱,我一个做汽车电子嵌入式软件开发的被临时拉来要做自动驾驶,ROS,Simulink,TruckSim,人麻了QAQ。