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