stopNode

Остановите узел ROS или ROS 2

Синтаксис

Описание

пример

stopNode(device,modelName) останавливает работающий узел ROS или ROS 2, который был развернут из Simulink® модель с именем modelName. Узел работает на заданном rosdevice или ros2device объект, device. Если узел не работает, функция возвращается немедленно.

Примеры

свернуть все

Подключитесь к удаленному устройству 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 ® после процесса в примере Запуск with ROS в Simulink ®.

d.AvailableNodes
ans = 1×2 cell
    {'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'. The 'robotcontroller' узел отправляет роботу команды скорости, чтобы переместить его в заданную точку. The '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 Core является ведущим, что позволяет запускать узлы 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'}

Запустите Robot Simulator с помощью ExampleHelperSimulinkRobotROS. Этот симулятор автоматически соединяется с мастером ROS на устройстве ROS. Вы будете использовать этот симулятор, чтобы запустить узел ROS и управлять роботом.

sim = ExampleHelperSimulinkRobotROS;

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

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

Сбросьте Robot Simulator, чтобы сбросить положение робота. Также нажмите кнопку Сбросить симуляцию (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_66434 with NodeURI http://192.168.203.1:59395/
stopCore(d)

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

свернуть все

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

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

Введенный в R2019b