Вызовите сервис ROS 2 в Simulink

В этом примере показано, как вызвать сервис на сеть ROS 2 в Simulink® с помощью блока Call Service и получить ответ.

Настройте сервер сети и сервиса ROS 2

Создайте демонстрационную сеть ROS 2 с одним узлом.

node_1 = ros2node("node_1");

Создайте сервис, который добавляет, что два целых числа с помощью существующего сервиса вводят example_interfaces/AddTwoInts. Задайте функцию обратного вызова, чтобы быть exampleHelperROS2SumCallback который выполняет сложение чисел в a и b поля сообщения запроса на обслуживание.

sumserver = ros2svcserver(node_1,"/sum","example_interfaces/AddTwoInts",@exampleHelperROS2SumCallback);

Вызовите сервисный сервер от Simulink

Откройте модель Simulink с блоком Call Service. Используйте блок Blank Message, чтобы вывести сообщение запроса с example_interfaces/AddTwoIntsRequest тип сообщения. Заполните шину с двумя значениями, чтобы суммировать вместе. Можно проигнорировать предупреждения о преобразовании типов данных.

open_system("AddTwoIntsROS2ServiceExampleModel.slx")
Warning: The property "a" in ROS message type "example_interfaces/AddTwoIntsRequest" has an unsupported datatype (int64). This property will be converted to datatype "double" in the Simulink bus.
Warning: The property "b" in ROS message type "example_interfaces/AddTwoIntsRequest" has an unsupported datatype (int64). This property will be converted to datatype "double" in the Simulink bus.
Warning: The property "sum" in ROS message type "example_interfaces/AddTwoIntsResponse" has an unsupported datatype (int64). This property will be converted to datatype "double" in the Simulink bus.

Запустите модель. Сервисный вызов должен возвратить -2 от выходного порта Resp, как часть sum поле в сообщении ответа. Код ошибки 0 указывает, что сервисный вызов был успешен.

sim("AddTwoIntsROS2ServiceExampleModel.slx");