赞
踩
本文总结了在MBD阶段,使用simulink自带ROS2工具箱需注意的地方。
由于日常开发工作需要使用大量的结构体定义DDS消息类型,Matlab / Simulink的ros2 toolbox只携带原生标准数据类型,如std_msgs, sensor_msgs。这种情况下需要开发者在Matlab中,编译生成自定义的消息类型。由于windows对ros2的支持不够友好,所以我们使用Linux版本的Matlab / Simulink。软件包括如下:
这里可以先参考官方指导文档: 生成自定义消息类型
需要注意的是,ros2genmsg()函数只支持’.msg’格式的文件,‘.idl’文件与’.msg’文件的对应定义关系可参考:idl & msg对应表
如果需要删除已经生成的消息类型,可以在消息包定义的地方手动删除matlab genmsg相关的文件夹,然后在matlab命令行窗口执行:
reg = ros.internal.CustomMessageRegistry.getInstance('ros2',true); reg.refresh(true);
该工具箱自带fastdds & cyclonedds的中间件,也可根据需求编译自定义中间件。可以在matlab界面中的Preference里更改所需ros toolbox的配置项。
Domain id是在simulink里的suber / puber里更改
环境设置里的步长实际含义代表为程序仿真时的步长,所以在环境里设置solver无法按照用户真实所需频率发布。可以引入simulation pace模块,设置与真实物理时间的比例调整程序运行周期。
自定义消息在使用时,容易遇到std::Runtime error的运行时报错。
官方论坛里有mathworks的工作人员定位是由一个链接库版本不匹配导致,根据其建议:
Please try the following workaround:
但是根据我的实际经验,sub block依然存在该问题,pub block可以正常运行。比较简单粗暴的办法就是sub端使用ROS2工具箱自带的标准数据类型,手写一个ros2节点将自定义消息数据打散重组为标准数据类型发给simulink。如果大家有更好的解决办法,欢迎讨论
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。