Main Content

Call ROS Service in Simulink

Use the Call Service block to call a service on the ROS service server.

Connect to a ROS network.

rosinit
Launching ROS Core...
Done in 0.76813 seconds.
Initializing ROS master on http://172.30.250.147:54601.
Initializing global node /matlab_global_node_33860 with NodeURI http://dcc277159glnxa64:39797/ and MasterURI http://localhost:54601.

Set up a roscpp_tutorials/TwoInts service server message type and specify a example helper callback function. The call back function provided sums the A and B elements of a roscpp_tutorials/TwoIntsRequest message. The service server must be set up before you can call a service client.

sumserver = rossvcserver('/sum','roscpp_tutorials/TwoInts',@exampleHelperROSSumCallback);

Open a Simulink® model with the Call Service block. Use the Blank Message block to output a request message with the roscpp_tutorials/TwoIntsRequest message type. Populate the bus with two values to sum together.

open_system('ros_twoint_service_simulink_example.slx')
Warning: The property "A" in ROS message type "roscpp_tutorials/TwoIntsRequest" with data type (int64) is converted to data type (double) in the Simulink Bus. 
Warning: The property "B" in ROS message type "roscpp_tutorials/TwoIntsRequest" with data type (int64) is converted to data type (double) in the Simulink Bus. 
Warning: The property "Sum" in ROS message type "roscpp_tutorials/TwoIntsResponse" with data type (int64) is converted to data type (double) in the Simulink Bus. 

Annotation 2020-07-14 230851.jpg

Run the model. The service call should return 0 in the Resp output as part of the response message. An error code of 0 indicates the service call was successful. You can ignore warnings about converting data types.

sim('ros_twoint_service_simulink_example.slx')

Shut down the ROS network to disconnect.

rosshutdown
Shutting down global node /matlab_global_node_33860 with NodeURI http://dcc277159glnxa64:39797/ and MasterURI http://localhost:54601.
Shutting down ROS master on http://172.30.250.147:54601.