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

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

Чтобы загрузить виртуальную машину (VM), используемую в этом примере, смотрите Виртуальную машину с ROS и Gazebo.

Для введения в co-симуляцию Gazebo и соединяемый впервые, смотрите, Выполняют Co-симуляцию между Simulink и Gazebo.

Запустите VM

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

Мир Gazebo

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

Дважды кликните значок Робота с дифференциальным приводом Gazebo.

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

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

Если средству моделирования Gazebo не удается открыться, вы, возможно, должны переустановить плагин. Смотрите Установку, Плагин Gazebo Вручную в Выполняет Co-симуляцию между Simulink и Gazebo.

Обзор модели

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

open_system('GazeboDifferentialDriveControl') 

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

  • Иноходец Gazebo

  • Считайте данные о датчике

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

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

Иноходец Gazebo

Этот раздел устанавливает связь с Gazebo. Дважды кликните блок Gazebo Pacer, чтобы открыть его параметры, и затем кликнуть по сети Configure Gazebo и ссылке настроек симуляции. Это откроет диалоговое окно.

Задайте IP-адрес для своего VM. По умолчанию Gazebo соединяется на 14581 порт. Кликните по Кнопке проверки, чтобы проверить связь с Gazebo.

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

Датчик Gazebo Выходные параметры

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

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

Мобильное управление роботом

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

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

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

Блок MATLAB function Скорости Колеса Набора преобразует скорость транспортного средства и направляющуюся скорость вращения к левой и правой скорости колеса, с помощью кинематики робота с дифференциальным приводом:

ϕ˙L=1r(v-d2)

ϕ˙R=1r(v+d2)

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

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

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

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

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

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

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

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

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

Кликните по кнопке воспроизведения или используйте sim команда, чтобы запустить модель. Во время выполнения робот должен переместиться в Gazebo, и График XY обновляет положение, наблюдаемое в Simulink.

Фигуры строят набор waypoints, и финал выполнил путь робота.