В этом примере показано, как вызвать сервис на сеть ROS 2 в Simulink® с помощью блока Call Service и получить ответ.
Создайте демонстрационную сеть ROS 2 с одним узлом.
node_1 = ros2node("node_1");
Создайте сервис, который добавляет, что два целых числа с помощью существующего сервиса вводят example_interfaces/AddTwoInts
. Задайте функцию обратного вызова, чтобы быть exampleHelperROS2SumCallback
который выполняет сложение чисел в a
и b
поля сообщения запроса на обслуживание.
sumserver = ros2svcserver(node_1,"/sum","example_interfaces/AddTwoInts",@exampleHelperROS2SumCallback);
Откройте модель 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");