Этот пример показывает вам, как использовать 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 и средство моделирования робота.
Кликните по кнопке воспроизведения в Simulink, чтобы запустить симуляцию.
В то время как симуляция запускается, дважды кликните на блоке Desired Position и измените Постоянное значение на [2 3]
. Заметьте, что робот изменяет свой заголовок.
В то время как симуляция запускается, откройте Пропорциональную Подсистему контроллера и дважды кликните на Линейной Скорости (ползунок) блок. Переместите ползунок в 2. Наблюдайте увеличение скорости робота.
Нажмите кнопку Stop в Simulink, чтобы остановить симуляцию.
В этой задаче вы будете использовать основанное на MATLAB средство моделирования, чтобы наблюдать синхронизацию и уровень входящих сообщений.
Закройте любые существующие окна рисунка Средства моделирования Робота.
Кликните по кнопке воспроизведения в Simulink, чтобы запустить симуляцию.
Откройте блок Scope. Заметьте, что IsNew, вывод блока Subscribe всегда является нулем, указывая, что никакие сообщения не получаются для/odom темы. Горизонтальная ось графика указывает на время симуляции.
В командной строке MATLAB введите ExampleHelperSimulinkRobotROS
, чтобы запустить основанное на MATLAB средство моделирования робота. Это средство моделирования публикует сообщения/odom на уровне приблизительно 20 Гц в тактовое стеной прошедшее время.
В отображении Осциллографа заметьте, что IsNew вывод имеет значение 1 на аппроксимированном уровне 20 раз в секунду в прошедшее тактовое стеной время.
Синхронизация с тактовым стеной временем происходит из-за Блока управления Уровня Симуляции. Как правило, симуляция Simulink выполняется в цикле свободного доступа, скорость которого зависит от сложности модели и компьютерной скорости (см. Фазу Цикла Симуляции (Simulink)). Блок управления Уровня Симуляции пытается отрегулировать выполнение Simulink так, чтобы каждое обновление заняло 0,02 секунды в тактовое стеной время, когда возможный (это равно основному шагу расчета модели). См. комментарии в блоке для получения дополнительной информации.
Кроме того, Enabled подсистемы для Пропорционального Диспетчера и Скоростного Издателя Команды гарантируют, что модель только реагирует на по-настоящему новые сообщения. Если бы активированные подсистемы не использовались, модель неоднократно обрабатывала бы то же самое (последний раз полученный) сообщение много раз, ведя к расточительной обработке и избыточной публикации сообщений команды.
Этот пример показал вам, как использовать Simulink для простого управления с обратной связью моделируемого робота. Это также показало, как использовать Enabled подсистемы, чтобы уменьшать наверху в сети ROS.