exponenta event banner

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 ® в соответствии с процессом в примере Начало работы с 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, указанное как символьный вектор. Если имя модели недопустимо, функция возвращается немедленно.

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