exponenta event banner

Создание автономного узла ROS из MATLAB

®

В этом примере показано, как создать код C++ для автономного узла ROS из функции MATLAB. Затем показано, как построить и запустить узел ROS на компьютере с ОС Windows ®.

Предпосылки

  • В этом примере требуется Coder™ MATLAB.

  • Система Ubuntu Linux с установленным сервером ROS и SSH необходима для построения и запуска сгенерированного кода C++. Можно использовать собственную систему Ubuntu ROS или виртуальную машину Linux для Robotics System Toolbox™ примеры (инструкции см. в разделе Начало работы с Gazebo и Simulated TurtleBot).

  • Необходимо иметь доступ к компилятору C/C + +, который настроен правильно. Вы можете использоватьmex -setup cpp для просмотра и изменения компилятора по умолчанию. Дополнительные сведения см. в разделе Изменение компилятора по умолчанию.

Управление роботом с функцией с поддержкой ROS

Откройте функцию robotROSFeedbackControl, который содержит пропорциональный контроллер, введенный в примере управления обратной связью робота с поддержкой ROS. Эта функция подписывается на /odom тема для получения текущего статуса одометрии робота, а затем публикует выходные данные пропорционального контроллера в виде geometry_msgs/Twist сообщение в /cmd_vel тема. Это обеспечивает команды управления для робота для перемещения в нужное положение.

Копировать robotROSFeedbackControl перейдите в локальный каталог и измените defaultDesiredPos переменная к требуемым координатам.

Запустите Gazebo Empty World с виртуальной машины Linux, открыв приложение Gazebo Empty на рабочем столе. В виртуальной машине Linux для Robotics System Toolbox™ робот расположен на [0,0] местоположение по умолчанию.

Выполните следующие команды для создания узла MATLAB ROS в той же сети ROS, что и виртуальная машина. Проверьте наличие тех же узлов ROS, как показано ниже.

d = rosdevice;
rosinit(d.DeviceAddress)
rosnode list

Запустите контроллер и убедитесь, что робот движется к опубликованному пункту назначения. В то же время наблюдайте траекторию робота, которая отображается на рисунке MATLAB. Оставьте этот рисунок открытым для сравнения поведения выполнения MATLAB и созданного исполняемого узла.

robotROSFeedbackControl

Во время перемещения робота можно изменить нужное место назначения. Для этого откройте новый терминал с виртуальной машины, откройте репозиторий ROS и опубликуйте новые координаты назначения в виде std_msgs/Float64MultiArray сообщение в /dest тема.

~$ source /opt/ros/melodic/local_setup.bash
~$ rostopic pub -1 /dest std_msgs/Float64MultiArray "{data:[0,0]}"

Вы можете завершить работу контроллера в любое время, используя Ctrl-C или введя следующую команду на терминале с виртуальной машины. Обратите внимание, что при открытии нового терминала в виртуальной машине необходимо получить данные из репозитория ROS.

~$ rostopic pub -1 /stop std_msgs/Bool "1"

Вы также можете изменить distanceThre, linearVelocity, и rotationGain значения в robotROSFeedbackControl.m для получения требуемого поведения робота. Для пропорционального контроллера в этом примере следующие диапазоны параметров обеспечивают надежную производительность. Кроме того, можно заменить пропорциональный контроллер пользовательским контроллером для сравнения производительности.

distanceThre: 0<x<1
linearVelocity: 0<x<3
rotationGain: 0<x<6

Чтобы наблюдать за поведением, перезагрузите робот на виртуальной машине, нажав Ctrl-R в беседке.

Создание функции для создания кода

Чтобы создать автономный узел C++, измените функцию, чтобы сделать ее совместимой для создания кода.

  • Поскольку объекты не поддерживают создание кода, замените их на структуры для rospublisher, rossubscriber, и rosmessage. Укажите пару имя-значение "DataFormat","struct" in the соответствующие вызовы функций для их создания в виде структур.

  • Сохраните измененную функцию MATLAB в robotROSFeedbackControlCodegen.m. Проверьте любые другие изменения, внесенные в robotROSFeedbackControl функции отражены в robotROSFeedbackControlCodegen.

Создать исполняемый файл для robotROSFeedbackControlCodegen

Создание исполняемого узла для robotROSFeedbackControlCodegen функция. Укажите оборудование как 'Robot Operating System (ROS)'. Задайте для действия построения значение Build and run таким образом, узел ROS начинает работать после его генерации. Звонить plotPath для построения графика траектории робота.

cfg = coder.config('exe');
cfg.Hardware = coder.hardware('Robot Operating System (ROS)');
cfg.Hardware.BuildAction = 'Build and run';
codegen robotROSFeedbackControlCodegen -args {} -config cfg
plotPath

Конфигурация по умолчанию генерирует и запускает узел ROS на локальном хост-компьютере. Вместо развертывания и запуска узла ROS на удаленном устройстве (например, на виртуальной машине) можно изменить cfg. Оборудование. Например, при использовании виртуальной машины Linux для Robotics System Toolbox™ перед удаленным развертыванием задайте следующие параметры конфигурации. Обратите внимание, что фактические значения могут отличаться для удаленного устройства. Проверьте их перед развертыванием.

cfg.Hardware.RemoteDeviceAddress = '192.168.243.144';
cfg.Hardware.RemoteDeviceUsername = 'user';
cfg.Hardware.RemoteDevicePassword = 'password';
cfg.Hardware.DeployTo = 'RemoteDevice';

Проверка сгенерированного узла ROS

После запуска созданного исполняемого файла для тех же координат назначения убедитесь, что траектория робота аналогична той, что наблюдалась во время выполнения MATLAB. Также можно наблюдать, как робот передвигается в Беседке на виртуальной машине. Во время движения робота можно опубликовать другую целевую координату. См. раздел Управление роботом с поддержкой ROS с функцией, в котором показано, как опубликовать новый набор координат назначения через терминал виртуальной машины.

Завершите создание узла ROS, нажав Ctrl-C или отправив сообщение в /stop тема.

Выключите систему АФК.

rosshutdown