Сгенерируйте автономный узел ROS от MATLAB®

В этом примере показано, как сгенерировать Код С++ для автономного узла ROS от функции MATLAB. Это затем показывает, как создать и запустить узел ROS на машине Windows®.

Необходимые условия

  • Этот пример требует MATLAB Coder™.

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

  • У вас должен быть доступ к компилятору C/C++, который сконфигурирован правильно. Можно использовать mex -setup cpp просмотреть и изменить компилятор по умолчанию. Для получения дополнительной информации см. Компилятор Значения по умолчанию Изменения.

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

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

Скопируйте robotROSFeedbackControl функционируйте к своей локальной директории и изменению defaultDesiredPos переменная к желаемым координатам.

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

Запустите следующие команды, чтобы создать узел ROS MATLAB в той же сети 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 in Gazebo.

Создайте функцию для генерации кода

Чтобы сгенерировать автономный узел 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.Hardware. Например, если вы используете виртуальную машину Linux для ROS Toolbox, установите следующие параметры конфигурации перед удаленным развертыванием. Обратите внимание на то, что фактические значения могут отличаться для вашего удаленного устройства. Проверьте их перед развертыванием.

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

Проверьте сгенерированный узел ROS

После того, как сгенерированный исполняемый файл начинает запускаться для тех же координат назначения, проверьте, что траектория робота похожа на то, что вы наблюдаете во время выполнения MATLAB. Можно также наблюдать робота, перемещающегося в Gazebo на виртуальной машине. Можно опубликовать различную координату назначения, в то время как робот находится в движении. Отошлите к Управлению поддерживающего ROS Робота с разделом Function, который показывает, как опубликовать новый набор координат назначения через терминал виртуальной машины.

Отключите сгенерированный узел ROS путем нажатия Ctrl-C или отправки сообщения в /stop тема.

Закройте систему ROS.

rosshutdown

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте