很多对自动驾驶感兴趣的老铁一定都听说过ROS,也想试着玩玩看。但苦于不会编程,一直望而却步、望洋兴叹。今天我们介绍Simulink的ROS工具箱,可以让不会编码的老铁们也入门ROS开发
Simulink不知从哪个版本开始有了ROS工具箱,该工具箱可以实现ROS通讯的仿真及ROS代码的生成,目前已经支持ROS与ROS2。
使用Simulink完成ROS仿真及ROS代码生成,建议在Ubuntu下安装ROS与Matlab。如果只是建模据说Win环境也可以,但是没实践过。ROS就不介绍,2024年了装个ROS应该是什么难事,建议使用小鱼ROS的脚本,能够实现一件安装!
【思想】选择的是Ubuntu20.04,安装Linux版的Matlab R2020b,安装的时候要注意勾选ROS工具箱。
安装ROS工具后,就能在Library Browser看到ROS Toolbox,支持ROS与ROS2。
下面的演示以ROS为例演示下基本的建模以及代码生成。
先从ROS Toolbox中拖一个Publish模块到空白模型中
在Publish模块的参数设置中,设置Topic的名称和发送信息的数据类型。
从ROSToolBox中再拉一个Blank Message模块,将其数据类型改成与Publish模块一致,为std_msg/UInit64。Sample time要设置为0.01。
接着使用Bus Assignment对Message进行组包,BUS端口连接ROS数据类型作为包头,Data连接具体的数据。
还要把Stop Time设置为inf,否则仿真任务将在迅雷不及掩耳盗铃儿响叮当中结束。
如果需要控制程序运行的周期,可以在Simulation Pacing Options中设置!
这时如果着急按下Run按钮则会报错,提示ROS没有运行
这时候需要打开终端,运行roscore,启动ros主节点!
现在点击RUN就不会提示任何错误,也不会有任何其他反馈,除了时间戳在跳。
使用rqt_topic或ros_topic就能够看到数据的发送。
为了更好的展示订阅话题后的数据变化,对上面的publish作出更改。
基础建模就不展开了,仅将发送固定数值更改为连续递增。
新建一个空白模型,从ROS ToolBox中拉一个Subscribe模块,配置采样时间与要订阅的话题(My topic)。
读取Msg的时候一定要使用Bus Selector,把数据与包头分离开,才能够正确解析。