В этом примере показано, как использовать Simulink ® для управления моделируемым роботом, работающим в симуляторе робота Gazebo ® по сети ROS 2.
В этом примере вы запустите модель, которая реализует простой пропорциональный контроллер с обратной связью. Контроллер получает информацию о местоположении от моделируемого робота и отправляет команды скорости, чтобы привести робота в заданное место. Вы отрегулируете некоторые параметры во время работы модели и наблюдаете эффект на моделируемом роботе.
Следующая схема результирует взаимодействие между Simulink и симулятором робота (стрелы в схеме указывают на передачу сообщения ROS 2). The /odom
тема передает информацию о местоположении и /cmd_vel
topic передает команды скорости.
В этой задаче вы запустите симулятор на основе ROS для робота с дифференциальным приводом, запустите мост ROS, сконфигурируйте соединение MATLAB ® с симулятором робота .
Загрузите виртуальную машину с помощью инструкции в Запуск с Gazebo и Моделируемый TurtleBot.
На рабочем столе Ubuntu щелкните значок Gazebo Empty, чтобы запустить пустой мир Gazebo.
Щелкните значок ROS Bridge (Dashing), чтобы запустить ROS-мост, чтобы ретранслировать сообщения между узлом Simulink ROS 2 и Turtlebot3 роботом с поддержкой ROS.
В Командном Окне 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
После подключения к сети ROS 2 откройте модель примера.
open_system('robotROS2FeedbackControlExample.slx');
Модель реализует пропорциональный контроллер для мобильного робота с дифференциальным приводом. На каждом временном шаге алгоритм ориентирует робота в нужное место и управляет им вперед. После достижения требуемого местоположения алгоритм останавливает робота.
open_system('robotROS2FeedbackControlExample/Proportional Controller');
Обратите внимание, что в модели есть четыре настраиваемых параметров (обозначенных цветными блоками).
Желаемое Положение (на верхнем уровне модели): Желаемое расположение в координатах (X, Y)
Порог расстояния: робот остановлен, если он ближе, чем это расстояние от нужного местоположения
Линейная скорость: Прямая линейная скорость робота
Коэффициент усиления: Пропорциональная составляющая при коррекции ориентации робота
Модель также имеет блок Simulation Rate Control (на верхнем уровне модели). Этот блок гарантирует, что интервалы обновления симуляции следуют времени истечения настенного времени.
В этой задаче вы сконфигурируете 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, чтобы остановить симуляцию.
В этой задаче вы будете наблюдать время и скорость входящих сообщений.
Нажмите кнопку 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.