rosdevice

Подключение к удаленному устройству ROS

Описание

The rosdevice объект используется для создания соединения с устройством ROS. Объект содержит необходимую информацию о входе и другие параметры распределения. После установления соединения с помощью rosdeviceможно запустить и остановить ядро ROS или узлы ROS и проверить состояние сети ROS. Перед запуском узлов ROS необходимо подключить MATLAB® в сеть ROS с помощью rosinit функция.

Можно развернуть узлы ROS на устройстве ROS с помощью Simulink® модели. Например, смотрите Сгенерировать автономный узел ROS из Simulink ® .

Примечание

Чтобы подключиться к устройству ROS, на устройстве должен быть установлен SSH-сервер.

Создание

Описание

пример

device = rosdevice(deviceAddress,username,password) создает rosdevice объект, подключенный к устройству ROS по указанному адресу и с указанными именем пользователя и паролем.

device = rosdevice создает rosdevice объект, соединенный с устройством ROS с помощью сохраненных значений для deviceAddress, username, и password.

Свойства

расширить все

Это свойство доступно только для чтения.

Имя хоста или IP-адрес устройства ROS, заданный как вектор символов.

Пример: '192.168.1.10'

Пример: 'samplehost.foo.com'

Это свойство доступно только для чтения.

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

Пример: 'user'

Расположение установки ROS в виде вектора символов. Если папка не задана, MATLAB пытается определить правильную папку для вас. Когда вы развертываете узел ROS, установите это значение из Simulink в диалоговом окне Параметры конфигурации, под Hardware Implementation.

Пример: '/opt/ros/hydro'

Папка Catkin, в которой модели развернуты на устройстве, заданная как вектор символов. Когда вы развертываете узел ROS, установите это значение из Simulink в диалоговом окне Параметры конфигурации, под Hardware Implementation.

Пример: '~/catkin_ws_test'

Это свойство доступно только для чтения.

Узлы, доступные для запуска на устройстве ROS, возвращаются как массив ячеек из векторов символов. Узлы перечислены только, если они являются частью CatkinWorkspace и были развернуты на устройстве с помощью Simulink.

Пример: {'robotcontroller','publishernode'}

Функции объекта

runNodeЗапустите узел ROS или ROS 2
stopNodeОстановите узел ROS или ROS 2
isNodeRunningОпределите, работает ли узел ROS или ROS 2
runCoreЗапуск ядра ROS
stopCoreОстановите ядро ROS
isCoreRunningОпределите, работает ли ядро ROS
systemВыполните системную команду на устройстве
putFileКопировать файл на устройство
getFileПолучите файл с устройства
deleteFileУдалить файл с устройства
dirСписок содержимого папки на устройстве
openShellОткройте интерактивный командный интерпретатор к устройству

Примеры

свернуть все

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

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

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

      DeviceAddress: '192.168.203.131'
           Username: 'user'
          ROSFolder: '/opt/ros/indigo'
    CatkinWorkspace: '~/catkin_ws'
     AvailableNodes: {'voxel_grid_filter_sl'}

Запустите ядро ROS и проверьте, работает ли оно.

runCore(d)
Another roscore / ROS master is already running on the ROS device. Use the 'stopCore' function to stop it.
running = isCoreRunning(d)
running = logical
   1

Остановите ядро ROS и подтвердите, что оно больше не работает.

stopCore(d)
pause(2)
running = isCoreRunning(d)
running = logical
   0

Подключитесь к удаленному устройству 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)
Введенный в R2019b