Main Content

Publish and Subscribe to ROS Messages in Simulink

This model shows how to publish and subscribe to a ROS topic using Simulink®.

open_system('rosPubSubExample.slx')

Annotation 2020-07-09 154610.jpg

Use the Blank Message and Bus Assignment blocks to specify the X and Y values of a 'geometry_msgs/Point' message type. Open the Blank Message block mask to specify the message type. Open the Bus Assignment block mask to select the signals you want to assign. Remove any values with '???' from the right column. Supply the Bus Assignment block with relevant values for X and Y.

Feed the Bus output to the Publish block. Open the block mask and choose Specify your own as the topic source. Specify the topic, '/location', and message type, 'geoemetry_msgs/Point'.

Add a Subscribe block and specify the topic and message type. Feed the output Msg to a Bus Selector and specify the selected signals in the block mask. Display the X and Y values.

Before running the model, call rosinit to connect to a ROS network.

rosinit
Launching ROS Core...
Done in 0.6815 seconds.
Initializing ROS master on http://172.20.222.92:57732.
Initializing global node /matlab_global_node_88235 with NodeURI http://dcc865698glnxa64:46473/ and MasterURI http://localhost:57732.

Run the model. You should see the xPosition Out and yPosition Out displays show the corresponding values published to the ROS network.

sim('rosPubSubExample')

Shut down the ROS network.

rosshutdown
Shutting down global node /matlab_global_node_88235 with NodeURI http://dcc865698glnxa64:46473/ and MasterURI http://localhost:57732.
Shutting down ROS master on http://172.20.222.92:57732.