exponenta event banner

runNode

Запуск узла ROS или ROS 2

Описание

пример

runNode(device,modelName) запускает узел ROS или ROS 2, связанный с развернутой моделью Simulink ® modelName. Узел должен быть развернут в рабочей области, указанной CatkinWorkspace свойство входа rosdevice объект или ROS2Workspace свойство входа ros2device объект, device. По умолчанию узел подключается к ведущему узлу ROS, к которому подключен MATLAB ® device.DeviceAddress собственность.

runNode(device,modelName,masterURI) подключается к указанному главному URI. Этот синтаксис применим только в том случае, если device является rosdevice объект.

runNode(device,modelName,masterURI,nodeHost) подключается к указанному главному URI и хосту узла. Узел объявляет свой адрес в качестве имени хоста или IP-адреса, указанного в nodeHost. Этот синтаксис применим только в том случае, если device является rosdevice объект.

Примеры

свернуть все

Подключитесь к удаленному устройству ROS и запустите узел ROS. Запустите ядро ROS, чтобы узлы ROS могли взаимодействовать через сеть ROS. Можно запустить и остановить ядро или узел ROS и проверить их состояние с помощью rosdevice объект.

Создайте соединение с устройством ROS. Укажите адрес, имя пользователя и пароль конкретного устройства ROS. Устройство уже содержит доступные узлы ROS, которые можно запустить с помощью runNode.

ipaddress = '192.168.203.129';
d = rosdevice(ipaddress,'user','password');
d.ROSFolder = '/opt/ros/indigo';
d.CatkinWorkspace = '~/catkin_ws_test'
d = 
  rosdevice with properties:

      DeviceAddress: '192.168.203.129'
           Username: 'user'
          ROSFolder: '/opt/ros/indigo'
    CatkinWorkspace: '~/catkin_ws_test'
     AvailableNodes: {'robotcontroller'  'robotcontroller2'}

Запустите ядро ROS. Подключение MATLAB ® к основной системе ROS с помощьюrosinit. Это ядро позволяет запускать узлы ROS на устройстве ROS.

runCore(d)
rosinit(d.DeviceAddress,11311)
Initializing global node /matlab_global_node_84497 with NodeURI http://192.168.203.1:56034/

Проверьте доступные узлы ROS на подключенном устройстве ROS. Перечисленные узлы были созданы на основе моделей Simulink ® в соответствии с процессом в примере Начало работы с ROS в Simulink ®.

d.AvailableNodes
ans = 1×2 cell
    {'robotcontroller'}    {'robotcontroller2'}

Запустите узел ROS и укажите имя узла. Проверьте, работает ли узел.

runNode(d,'RobotController')
running = isNodeRunning(d,'RobotController')
running = logical
   1

Остановите узел ROS. Отключитесь от сети АФК. Остановите ядро АФК.

stopNode(d,'RobotController')
rosshutdown
Shutting down global node /matlab_global_node_84497 with NodeURI http://192.168.203.1:56034/
stopCore(d)

Запустите несколько узлов ROS на подключенном устройстве ROS. Узлы ROS могут создаваться с использованием моделей Simulink ® для выполнения различных задач в сети ROS. Эти узлы затем развертываются на устройстве ROS и могут запускаться независимо от Simulink ®.

В этом примере используются две различные модели Simulink, развернутые в качестве узлов ROS. См. раздел Создание автономного узла ROS от Simulink ® и следуйте инструкциям по созданию и развертыванию узла ROS. Сделайте это дважды и назовите их'robotcontroller' и 'robotcontroller2'. 'robotcontroller' узел посылает роботу команды скорости для перемещения его в заданную точку. 'robotcontroller2' узел использует ту же модель, но удваивает линейную скорость для более быстрого привода робота.

Создайте соединение с устройством ROS. Укажите адрес, имя пользователя и пароль конкретного устройства ROS. Устройство содержит информацию об устройстве ROS, включая доступные узлы ROS, которые могут быть запущены с помощью runNode.

ipaddress = '192.168.203.129';
d = rosdevice(ipaddress,'user','password')
d = 
  rosdevice with properties:

      DeviceAddress: '192.168.203.129'
           Username: 'user'
          ROSFolder: '/opt/ros/indigo'
    CatkinWorkspace: '~/catkin_ws'
     AvailableNodes: {0×1 cell}

d.CatkinWorkspace = '~/catkin_ws_test'
d = 
  rosdevice with properties:

      DeviceAddress: '192.168.203.129'
           Username: 'user'
          ROSFolder: '/opt/ros/indigo'
    CatkinWorkspace: '~/catkin_ws_test'
     AvailableNodes: {'robotcontroller'  'robotcontroller2'}

Запустите ядро ROS. Ядро ROS является ведущим и позволяет запускать узлы ROS на устройстве ROS. Подключение MATLAB ® к основной системе ROS с помощьюrosinit. В этом примере порт имеет значение 11311. rosinit может автоматически выбрать порт без указания этого ввода.

runCore(d)
rosinit(d.DeviceAddress,11311)
Initializing global node /matlab_global_node_66434 with NodeURI http://192.168.203.1:59395/

Проверьте доступные узлы ROS на подключенном устройстве ROS. Узлы, перечисленные в этом примере, были созданы из моделей Simulink ® в соответствии с процессом в примере Создать автономный узел ROS из Simulink ®. Генерируются два отдельных узла,'robotcontroller' и 'robotcontroller2', которые имеют линейные скорости, установленные на 1 и 2 в модели соответственно.

d.AvailableNodes
ans = 1×2 cell
    {'robotcontroller'}    {'robotcontroller2'}

Запуск имитатора робота с помощью ExampleHelperSimulinkRobotROS. Этот симулятор автоматически подключается к ведущему устройству АФК на устройстве АФК. Этот симулятор используется для запуска узла ROS и управления роботом.

sim = ExampleHelperSimulinkRobotROS;

Запустите узел ROS, указав имя узла. 'robotcontroller' узел командует роботом в определенное местоположение ([-10 10]). Подождите, чтобы увидеть привод робота.

runNode(d,'robotcontroller')
pause(10)

Сбросьте имитатор робота, чтобы сбросить положение робота. Либо щелкните Сброс моделирования (Reset Simulation). Поскольку узел все еще работает, робот возвращается в определенное местоположение. Чтобы остановить отправку команд, остановите узел.

resetSimulation(sim.Simulator)
pause(5)

stopNode(d,'robotcontroller')

Запустить 'robotcontroller2' узел. Эта модель управляет роботом с удвоенной линейной скоростью. Сбросьте положение робота. Подождите, чтобы увидеть привод робота. Вы должны видеть более широкий поворот из-за повышенной скорости.

runNode(d,'robotcontroller2')
resetSimulation(sim.Simulator)
pause(10)

Закройте тренажер. Остановите узел ROS. Отсоедините от сети АФК и остановите ядро АФК.

close
stopNode(d,'robotcontroller2')
rosshutdown
Shutting down global node /matlab_global_node_66434 with NodeURI http://192.168.203.1:59395/
stopCore(d)

Входные аргументы

свернуть все

Устройство АФК или АФК 2, указанное как rosdevice или ros2device объект, соответственно.

Имя развернутой модели Simulink, указанное как символьный вектор. Если имя модели недопустимо, функция возвращает ошибку.

URI хозяина ROS, указанный как символьный вектор. При запуске узел подключается к хозяину ROS с заданным URI.

Имя узла, указанное как символьный вектор. Узел использует это имя хоста для объявления себя в сети ROS для подключения к ней других пользователей.

Представлен в R2019b