rosdevice

Свяжите с удаленным устройством ROS

Описание

rosdevice объект используется, чтобы создать связь с устройством ROS. Объект содержит необходимую информацию о входе в систему и другие параметры распределения 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 в диалоговом окне Configuration Parameters под Hardware Implementation.

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

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

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

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

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

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

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

runNodeЗапустите узел ROS
stopNodeОстановите узел ROS
isNodeRunningОпределите, запускается ли узел ROS
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® после процесса в Начало работы с 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'. '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_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 на устройстве 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_66434 with NodeURI http://192.168.203.1:59395/
stopCore(d)
Введенный в R2019b