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)

Elod
  • 502
  • 8
  • 22
  • have you tried to do it by hand in a matlab function instead of using the bus assignment block? – alextoind Apr 28 '16 at 17:32
  • I tried in MatLab and it works just following the instructions online. Edit in original post. – Elod Apr 29 '16 at 08:43
  • The problem is the `Bus Assignment` block. Just replace it with a `MATLAB Function` one which manually handles the wiring. It should be fine. – alextoind May 02 '16 at 07:49

0 Answers0