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