runNode

Запустите узел ROS

Описание

пример

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

runNode(device,modelName,masterURI) подключения к заданному основному URI.

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

Примеры

свернуть все

Свяжите с удаленным устройством 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 array
    {'robotcontroller'}    {'robotcontroller2'}

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

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

Остановите узел ROS. Отключитесь от сети ROS. Остановите ядро 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. В данном примере порт установлен в 11 311. rosinit может автоматически выбрать порт для вас, не задавая этот вход.

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

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

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

Запустите средство моделирования робота с помощью ExampleHelperSimulinkRobotROS. Это средство моделирования автоматически соединяется с ведущим устройством ROS на устройстве ROS. Вы будете использовать это средство моделирования, чтобы запустить узел 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. Отключитесь от сети ROS и остановите ядро ROS.

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

Входные параметры

свернуть все

Устройство ROS, заданное как rosdevice объект.

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

URI ведущего устройства ROS, заданного как вектор символов. На запуске узел соединяется с ведущим устройством ROS с данным URI.

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

Введенный в R2019b