Simulink MultiArray message generation to ROS
Asked Answered
B

0

7

How can I create a publisher that in Simulink (Matlab R2015A) that sends an array of floats as a ROS message (in ROS Indigo under Ubuntu 14.04)? I should use the BlankMSG block with msg type: std_msgs/Float32MultiArray, a Publish block with the same msg type and my own topic name.

I don't know how to add the vector to the data field on the msg bus. I tired, with a Bus Assignment block where the data input is a constant vector, but I get an error:

The Bus input port of the Bus Assignment block 'SubscriberMotorStates/Bus Assignment' does not support an array of buses as a sub-element.

enter image description here

UPDATE

I tried in Matlab to send an array and did work by following the instructions.

chatpub = rospublisher('/chatter','std_msgs/Float64MultiArray');
msg = rosmessage(chatpub);
msg.Data = [1 2 3];
send(chatpub,msg);

So, I can also use in simulink this by implementing a function in an *.m file and use the Interpreted MATLAB function block.

I'm still curious how can I use the intended blocks for array message sending, because it might be better optimized. (I'm going to use in a real application)

Bot answered 27/4, 2016 at 8:45 Comment(3)
have you tried to do it by hand in a matlab function instead of using the bus assignment block?Illusionism
I tried in MatLab and it works just following the instructions online. Edit in original post.Bot
The problem is the Bus Assignment block. Just replace it with a MATLAB Function one which manually handles the wiring. It should be fine.Illusionism

© 2022 - 2024 — McMap. All rights reserved.