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

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

Введение

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

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

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

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

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

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

  3. Щелкните значок ROS Bridge (Dashing), чтобы запустить ROS-мост, чтобы ретранслировать сообщения между узлом Simulink ROS 2 и Turtlebot3 роботом с поддержкой ROS.

  4. В Командном Окне MATLAB установите ROS_DOMAIN_ID окружение к 25 чтобы соответствовать настройкам ROS-моста симулятора робота и запустить 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)

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

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

  • Коэффициент усиления: Пропорциональная составляющая при коррекции ориентации робота

Модель также имеет блок Simulation Rate Control (на верхнем уровне модели). Этот блок гарантирует, что интервалы обновления симуляции следуют времени истечения настенного времени.

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

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

Настройка параметров сети для ROS 2.

  • На вкладке Simulation, в PREPARE, выберите ROS Toolbox > ROS Network.

  • В разделе «Настройка сетевых адресов ROS» установите значение идентификатора области ROS 2 равным 25.

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

Чтобы запустить модель.

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

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

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

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

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

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

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

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

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

  • Запустите Gazebo Simulator в сети ROS и запустите ROS Bridge в ROS 2, чтобы сеть ROS 2 могла получать сообщения, опубликованные Gazebo Simulator.

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

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

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

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

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