Этот пример показывает вам, как использовать Simulink®, чтобы управлять симулированным роботом, запускающимся в отдельном ОСНОВАННОМ НА ROS средстве моделирования.
Этот пример включает модель, которая реализует простой пропорциональный контроллер с обратной связью. Контроллер получает информацию о местоположении от симулированного робота (запускающийся в отдельном ОСНОВАННОМ НА ROS средстве моделирования) и отправляет скоростные команды, чтобы управлять роботом к заданному местоположению. Настройте параметры, в то время как модель запускается, и наблюдайте эффект на симулированном роботе.
Следующая фигура обобщает взаимодействие между Simulink, и средство моделирования робота (стрелки в фигуре указывают на передачу сообщения ROS). /odom
тема передает информацию о местоположении и /mobile_base/commands/velocity
тема передает скоростные команды.
Выполните шаги в Подключении к поддерживающему ROS Роботу из примера Simulink®, чтобы сделать следующее:
Запустите MATLAB® или средство моделирования робота Gazebo®
Сконфигурируйте Simulink, чтобы соединиться с сетью ROS
После соединения с сетью ROS откройте модель в качестве примера.
open_system('robotROSFeedbackControlExample.slx');
Модель реализует пропорциональный контроллер для дифференциального диска мобильный робот. На каждом временном шаге алгоритм ориентирует робота на желаемое местоположение и управляет им вперед. Если желаемое местоположение достигнуто, алгоритм останавливает робота.
open_system('robotROSFeedbackControlExample/Proportional Controller');
Обратите внимание на то, что существует четыре настраиваемых параметра в модели (обозначены цветными блоками).
Желаемое Положение (в верхнем уровне модели): желаемое местоположение в (X,Y)
координаты
Порог расстояния: робот останавливается, если это ближе, чем это расстояние от желаемого местоположения
Линейная Скорость: прямая линейная скорость робота
Усиление: пропорциональное усиление при исправлении ориентации робота
Модель также имеет Блок управления Уровня Симуляции (в верхнем уровне модели). Этот блок гарантирует, что интервалы обновления симуляции следуют за тактовым стеной прошедшим временем.
Запустите модель и наблюдайте поведение робота в средстве моделирования робота.
Окна положения на вашем экране так, чтобы можно было наблюдать и модель Simulink и средство моделирования робота.
Нажмите Play, чтобы запустить симуляцию.
Во время симуляции дважды кликните блок Desired Position и измените Constant
значение к [2 3]
. Заметьте, что робот изменяет свой заголовок.
Во время симуляции откройте Пропорциональную Подсистему контроллера и дважды кликните Линейную Скорость (ползунок) блок. Переместите ползунок в 2
. Наблюдайте увеличение скорости робота.
Нажмите Stop, чтобы закончить симуляцию.
Используйте основанное на MATLAB средство моделирования, чтобы наблюдать синхронизацию и уровень входящих сообщений.
Закройте любые существующие окна рисунка Средства моделирования Робота.
Нажмите Play, чтобы запустить симуляцию.
Откройте блок Scope. Заметьте что IsNew
выходом блока Subscribe всегда является 0
, указание, что никакие сообщения не получаются для /odom
тема. Горизонтальная ось графика указывает на время симуляции в секундах.
В командной строке MATLAB введите ExampleHelperSimulinkRobotROS
запускать основанное на MATLAB средство моделирования робота. Это средство моделирования публикует /odom
сообщения приблизительно в 20
Гц в тактовое стеной прошедшее время.
В отображении Осциллографа заметьте, что IsNew выход имеет значение 1
на аппроксимированном уровне 20
времена в секунду, в прошедшее тактовое стеной время.
Синхронизация с тактовым стеной временем происходит из-за Блока управления Уровня Симуляции. Как правило, симуляция Simulink выполняется в цикле свободного доступа, скорость которого зависит от сложности модели и компьютерной скорости (см. Фазу Цикла Симуляции (Simulink)). Блок управления Уровня Симуляции пытается отрегулировать выполнение Simulink так, чтобы каждое обновление взяло 0.02
секунды в тактовое стеной время, если это возможно. (Это равно основному шагу расчета модели.) См. комментарии в блоке для получения дополнительной информации.
Кроме того, Enabled подсистемы для Пропорционального Диспетчера и Скоростного Издателя Команды гарантируют, что модель только реагирует на по-настоящему новые сообщения. Если бы активированные подсистемы не использовались, модель неоднократно обрабатывала бы то же самое (последний раз полученный) сообщение неоднократно, ведя к расточительной обработке и избыточной публикации сообщений команды.