Управление с обратной связью поддерживающего ROS робота по ROS 2

Этот пример показывает вам, как использовать Simulink®, чтобы управлять симулированным роботом, запускающимся в средстве моделирования робота Gazebo® по сети ROS 2.

Введение

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

Следующая схема обобщает взаимодействие между Simulink, и средство моделирования робота (стрелки в схеме указывают на передачу сообщения ROS 2). /odom тема передает информацию о местоположении и /cmd_vel тема передает скоростные команды.

Задача 1 - запускает средство моделирования робота и конфигурирует Simulink

В этой задаче вы запустите ОСНОВАННОЕ НА ROS средство моделирования для робота с дифференциальным приводом, запуститься, РОС-Бридж конфигурируют связь MATLAB® со средством моделирования робота.

  1. Загрузите виртуальную машину с помощью инструкций в Начало работы с Gazebo и Симулированным TurtleBot.

  2. В рабочем столе Ubuntu кликните по Gazebo Пустой значок, чтобы запустить пустой мир Gazebo.

  3. Кликните по РОС-Бридж (Подчеркивание штриховой линией) значок, чтобы запустить РОС-Бридж к релейным сообщениям между узлом Simulink ROS 2 и поддерживающим ROS роботом Turtlebot3.

  4. В командном окне MATLAB, набор ROS_DOMAIN_ID переменная окружения к 25 совпадать со средством моделирования робота настройки РОС-Бридж и запускать ros2 topic list проверять, что темы от средства моделирования робота отображаются в MATLAB.

setenv('ROS_DOMAIN_ID','25')
ros2('topic','list')
/clock
/cmd_vel
/gazebo/link_states
/gazebo/model_states
/imu
/joint_states
/odom
/parameter_events
/rosout
/rosout_agg
/scan
/tf

Задача 2 - открывает существующую модель

После соединения с сетью ROS 2 откройте модель в качестве примера.

open_system('robotROS2FeedbackControlExample.slx');

Модель реализует пропорциональный контроллер для дифференциального диска мобильный робот. На каждом временном шаге алгоритм ориентирует робота на желаемое местоположение и управляет им вперед. Если желаемое местоположение достигнуто, алгоритм останавливает робота.

open_system('robotROS2FeedbackControlExample/Proportional Controller');

Обратите внимание на то, что существует четыре настраиваемых параметра в модели (обозначены цветными блоками).

  • Желаемое Положение (в верхнем уровне модели): желаемое местоположение в (X, Y) координаты

  • Порог расстояния: робот останавливается, если это ближе, чем это расстояние от желаемого местоположения

  • Линейная Скорость: прямая линейная скорость робота

  • Усиление: пропорциональная составляющая при исправлении ориентации робота

Модель также имеет Блок управления Уровня Симуляции (в верхнем уровне модели). Этот блок гарантирует, что интервалы обновления симуляции следуют за тактовым стенкой прошедшим временем.

Задача 3 - конфигурирует Simulink и запускает модель

В этой задаче вы сконфигурируете Simulink, чтобы связаться с поддерживающим ROS средством моделирования робота по ROS 2, запустить модель и наблюдать поведение робота в средстве моделирования робота.

Сконфигурировать сетевые настройки для ROS 2.

  • Под вкладкой Simulation, в PREPARE, выбирают ROS Toolbox> ROS Network.

  • В Конфигурируют Адреса Сети ROS, устанавливают Значение идентификатора Области ROS 2 на 25.

  • Нажмите ОК, чтобы применить изменения и закрыть диалоговое окно.

Запускать модель.

  • Окна положения на вашем экране так, чтобы можно было наблюдать и модель Simulink и средство моделирования робота.

  • Кликните по кнопке воспроизведения в Simulink, чтобы запустить симуляцию.

  • Во время симуляции дважды кликните на блоке Desired Position и измените Постоянное значение в [2 3]. Заметьте, что робот изменяет свой заголовок.

  • Во время симуляции откройте Пропорциональную Подсистему контроллера и дважды кликните на Линейной Скорости (ползунок) блок. Переместите ползунок в 2. Наблюдайте увеличение скорости робота.

  • Нажмите кнопку Stop в Simulink, чтобы остановить симуляцию.

Задача 4 - наблюдает уровень входящих сообщений

В этой задаче вы будете наблюдать синхронизацию и уровень входящих сообщений.

  • Кликните по кнопке воспроизведения в Simulink, чтобы запустить симуляцию.

  • Откройте блок Scope. Заметьте, что IsNew, выход блока Subscribe всегда является нулем, указывая, что никакие сообщения не получаются для/odom темы. Горизонтальная ось графика указывает на время симуляции.

  • Запустите Средство моделирования Gazebo в сети ROS и запустите РОС-Бридж в ROS 2, так, чтобы способная сеть ROS 2 получила сообщения, опубликованные Средством моделирования Gazebo.

  • В отображении Осциллографа заметьте, что IsNew выход имеет значение 1 на аппроксимированном уровне 20 раз в секунду в прошедшее тактовое стенкой время.

Синхронизация с тактовым стенкой временем происходит из-за Блока управления Уровня Симуляции. Как правило, симуляция Simulink выполняется в цикле свободного доступа, скорость которого зависит от сложности модели и компьютерной скорости (см. Фазу Цикла Симуляции (Simulink)). Блок управления Уровня Симуляции пытается отрегулировать выполнение Simulink так, чтобы каждое обновление заняло 0,02 секунды в тактовое стенкой время, когда возможный (это равно основному шагу расчета модели). См. комментарии в блоке для получения дополнительной информации.

Кроме того, Enabled подсистемы для Пропорционального Диспетчера и Скоростного Издателя Команды гарантируют, что модель только реагирует на по-настоящему новые сообщения. Если бы активированные подсистемы не использовались, модель неоднократно обрабатывала бы то же самое (последний раз полученный) сообщение много раз, ведя к расточительной обработке и избыточной публикации сообщений команды.

Сводные данные

Этот пример показал вам, как использовать Simulink для простого управления с обратной связью симулированного робота. Это также показало, как использовать Enabled подсистемы, чтобы уменьшать наверху в сети ROS 2.