概述
目录
Subscribe模块
ROS Network Configure
IsNew
Msg
Blank Message
非Blank Message
Sample time
Blank Message模块
Bus Assignment
Matlab function使用
Publish模块
参考文献
Subscribe模块
Simulink中msg以bus(结构体)形式存在,通过Subscribe模块实现对topic msg的订阅。Subscribe模块较为关键参数:IsNew、Msg、ROS Network Configure、Sample time。
ROS Network Configure
配置主节点的Address、Port地址。
IsNew
IsNew为Subscribe模块输出之一,当在上一采样时刻有新消息订阅时,输出为1。该输出可与Enabled Subsystem模块配合使用。
Msg
Msg为Subscribe模块输出之一,其输出可分为Blank Message与非Blank Message。
Blank Message
当无消息进入时,Msg输出为Blank Message,即0。
非Blank Message
当有消息进入时,Msg输出为topic中的Message。因自定义或ROS消息中含有可变嵌套结构体数组,对该Msg一般处理如下:
- 判断数据是否有截断。通过比较Bus中CurrentLength与ReceivedLength大小来判断,若CL<RL,则认为该Msg在Simulink支持的最大长度不足,需要调整。
- 调整Msg最大支持长度。通过Simulink中的APPS,搜索ROS,调出VariableSize Messages,在该界面下对该Msg的最大长度进行调整,使其CL=RL。
以上步骤是针对可变而引起的Msg截图,进行的操作。
- 读取Msg中的嵌套结构体数组。利用Matlab function读取数组大小,利用for循环,对其中的结构体字段进行提取,最后输出。
以上步骤为对嵌套结构体数组的处理。
注:对Subscribe模块中的Msg,若Bus中含有Bus即存在Sub Bus(嵌套结构体),直接Bus Selector会报错,可采用matlab function或Selector模块处理。
Sample time
Subscribe模块中的采样时间,需设为与发布topic频率相同,如果采用继承采样时间(-1),则会导致Msg无法传输进Subscribe。博主在开始未注意采样时间,不同Subscribe的topic均设置为-1,导致Msg无法传输进Subscribe,其值一直为0,即Blank Message。
Blank Message模块
Blank Message模块需结合Bus Assignment或matlab function使用,对于复杂Msg格式或加入Header,建议使用matlab function模块。
Bus Assignment
对于简单的Msg结构体,可利用Bus Assignment来组合消息。
Matlab function使用
通过matlab function模块增加Header、CurrentLength等,具体步骤如下:
- 定义输出变量Msg。在matlab function中Edit data,对Msg变量进行Type定义,将其定义为相应topic msg的结构体。窗口输入ros.createSimulinkBus('model_name','msg_name'),可生成相应topic msg结构体
- 添加Header。利用Current time模块,可读取Sec、Nsec。Header及CurrentLength添加代码如下:
persistent i
Seq_Name = uint8('Name');
Strlength = length(Seq_Name);
if isempty(i)
i = 0;
end
i = i + 1;
msg = blankMessage;
msg.Header.Stamp.Sec = ROS_Sec;
msg.Header.Stamp.Nsec = ROS_NSec;
msg.Header.Seq = uint32(i);
msg.Header.FrameId(1:Strlength) =Seq_Name;
msg.Header.FrameId_SL_Info.CurrentLength = uint32(Strlength);
注:Simulink不支持可变大小数组,所有数组必须是定长度。可参考参考文献2中的说明。
Publish模块
Publish模块与Subscribe模块用法相同,故不再进行阐述,详情可参考matlab help。
参考文献
1.https://ww2.mathworks.cn/help/ros/ug/get-started-with-ros-in-simulink.html
2.https://ww2.mathworks.cn/help/ros/ug/work-with-ros-messages-in-simulink.html
3.https://ww2.mathworks.cn/help/ros/ug/manage-array-sizes-in-simulink-ros.html
4.https://blog.csdn.net/xiaolong361/article/details/104405516
最后
以上就是激情蜗牛为你收集整理的ROS与Simulink联合仿真(四):Simulink接口Subscribe模块Blank Message模块Publish模块参考文献的全部内容,希望文章能够帮你解决ROS与Simulink联合仿真(四):Simulink接口Subscribe模块Blank Message模块Publish模块参考文献所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复