Управляйте Роботом с дифференциальным приводом в Gazebo с Simulink

Этот пример показов, как управлять роботом с дифференциальным приводом в совместном моделировании Gazebo с помощью Simulink. Робот следует набору путевых точек путем считывания положения положения энкодера колеса и генерирует команды управления крутящим моментом, чтобы привести его в действие.

Для загрузки виртуальной машины (VM), используемой в этом примере, смотрите Виртуальная машина с ROS и Gazebo.

Введение в совместное моделирование и подключение Gazebo впервые см. в разделе «Выполнение совместного моделирования между Simulink и Gazebo».

Запуск виртуальной машины

Откройте виртуальную машину, установленную из Виртуальной машины с ROS и Gazebo.

Gazebo World

Этот пример использует мир, заданный в VM, differentialDriveRobot.world, как простая плоскость земли с настройками физики по умолчанию. В мире используется робот Pioneer с удалёнными по умолчанию контроллерами, так что встроенные контроллеры не конкурируют с крутящими моментами, предусмотренными от Simulink. Робот Pioneer доступен в установках Gazebo по умолчанию. Плагин Gazebo ссылается на плагин, необходимый для подключения к Simulink, как подробно описано в Perform Co-Simulation между Simulink и Gazebo.

Дважды кликните значок Gazebo Differential Drive Robot. Если симулятор Gazebo не откроется, возможно, потребуется переустановить плагин. См. раздел Установка плагина Gazebo вручную в разделе «Совместное моделирование между Simulink и Gazebo».

Альтернативно, запустите эти команды в терминале:

cd /home/user/src/GazeboPlugin/export 
export SVGA_VGPU10=0 
gazebo ../world/differentialDriveRobot.world

Обзор модели

Откройте модель:

open_system('GazeboDifferentialDriveControl') 

Модель имеет четыре раздела:

  • Gazebo Pacer

  • Чтение данных о датчике

  • Управляйте Мобильным Роботом

  • Отправить данные о приведении в действие в Gazebo

Gazebo Pacer

Данный раздел устанавливает связь с Gazebo. Дважды кликните блок Gazebo Pacer, чтобы открыть его параметры, а затем щелкните ссылку Configure Gazebo network and simulation settings. Откроется диалоговое окно.

Укажите IP-адрес виртуальной машины. По умолчанию Gazebo соединяется на 14581 порт. Нажмите кнопку «Тестирование», чтобы проверить подключение к Gazebo.

Если тест не был успешным, проверьте инструкции в разделе «Выполнить совместное моделирование между Simulink и Gazebo» и убедитесь, что Gazebo правильно сконфигурирована и связанный мир работает.

Выходы датчика Gazebo

Выходы датчика считывают данные Gazebo и передают их в соответствующие блоки Simulink. График XY строит график текущего положения робота, и данные о положении сохраняются в выходе симуляции.

Подсистема Read Gazebo Sensors извлекает данные о положении робота и датчике колеса. Данные положения являются xy-координатами и четырехэлементным кватернионом для ориентации. Скорости вращения колеса вычисляются на основе скорости изменения положения колеса при вращении.

Управление мобильным роботом

Раздел Mobile Robot Control принимает набор целевых точек пути, положения тока и скорости текущего колеса и выводит крутящие моменты колеса, необходимые для того, чтобы робот следовал по пути, который преследует точки пути.

Существует три основных компонента.

Блок Pure Pursuit является контроллером, который задает скорость транспортного средства и скорость вращения курса транспортного средства, необходимую для следования путевым точкам с фиксированной скоростью, учитывая текущее положение.

Блок Set Wheel Speed MATLAB Function преобразует скорость транспортного средства и скорость вращения в скорость левого и правого колеса, используя кинематику робота с дифференциальным приводом:

ϕ˙L=1r(v-d2)

ϕ˙R=1r(v+d2)

ϕ˙L и ϕ˙R скорости левого и правого колес, v - скорость транспортного средства,  - скорость вращения курса транспортного средства, d - ширина дорожки, и r - радиус колеса. Кроме того, эта функция MATLAB ® включает код для дросселирования скорости колеса. Поскольку блок Pure Pursuit использует фиксированную скорость на всем протяжении, внутри блока MATLAB Function, существует два оператора if-. Первый замедляет скорость со скоростью, пропорциональной расстоянию до цели, когда робот находится в пределах определенного порога расстояния. Второй оператор if останавливает робота, когда он находится в пределах жесткого порога. Это помогает роботу прийти к нежной остановке.

Наконец, подсистема Pioneer Wheel Control преобразует желаемые скорости колеса в крутящие моменты с помощью пропорционального контроллера.

Команды крутящего момента привода

Последний раздел модели принимает команды крутящего момента, произведенные контроллером, и отправляет его в Simulink с помощью блоков из библиотеки Ко-симуляции Gazebo.

Внутри каждой из подсистем в этом блоке используется блок «Назначение шины», чтобы присвоить крутящий момент соединения правильному соединению.

Например, внутри подсистемы Gazebo Torque Command, показанной выше, сообщение Gazebo Blank с ApplyJointTorque для определения типа шины используется тип команды. Модель и имя соединения обеспечиваются блоком Gazebo Select Entity, который связан с соединением, связанным с левым колесом в мире Gazebo, left_wheel_hinge. Крутящий момент прикладывается на все время шага, 0,01 секунды, заданное в наносекундах, поскольку эти входы должны быть предоставлены в виде целых чисел. Выход шины передается в блок Gazebo Apply Command.

Симулируйте робота

Чтобы запустить модель, инициализируйте путевые точки и установите шаг расчета:

waypoints = [0 0; 4 2; 3 7; -3 6];
sampleTime = 0.01;

Нажмите кнопку Play или используйте sim команда для запуска модели. Во время выполнения робот должен двигаться в Gazebo, а XY Plot обновляет положение, наблюдаемое в Simulink.

Рисунки строят график набора путевых точек и последнего выполненного пути робота.