В этом примере показано, как управлять роботом с дифференциальным приводом в co-симуляции Gazebo с помощью Simulink. Робот следует за набором waypoints путем чтения положения и положений энкодера колеса и генерирует команды управления крутящего момента, чтобы управлять им.
Чтобы загрузить виртуальную машину (VM), используемую в этом примере, смотрите Виртуальную машину с Бодрым ROS 2 и Gazebo.
Для введения в co-симуляцию Gazebo и соединяемый впервые, смотрите, Выполняют Co-симуляцию между Simulink и Gazebo.
Откройте виртуальную машину, установленную от Виртуальной машины с Бодрым ROS 2 и 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
Откройте модель:
open_system('GazeboDifferentialDriveControl')
Модель имеет четыре раздела:
Иноходец Gazebo
Считайте данные о датчике
Управляйте мобильным роботом
Отправьте данные о приведении в действие в Gazebo
Этот раздел устанавливает связь с Gazebo. Дважды кликните блок Gazebo Pacer, чтобы открыть его параметры, и затем кликнуть по сети Configure Gazebo и ссылке настроек симуляции. Это откроет диалоговое окно.
Задайте IP-адрес для своего VM. По умолчанию Gazebo соединяется на 14581
порт. Кликните по Кнопке проверки, чтобы проверить связь с Gazebo.
Если тест не успешен, убедитесь, что регистрировали инструкции, Выполняют Co-симуляцию между Simulink и Gazebo и гарантируют, что Gazebo правильно сконфигурирован, и связанный мир в порядке.
Датчик выводит, считывает данные о датчике из Gazebo, и передает его соответствующим блокам Simulink. График XY строит текущее положение робота, и данные о положении сохранены в симуляцию выход.
Чтение подсистема Датчиков Gazebo извлекает положение робота и данные о датчике колеса. Данные о положении являются координатами xy и четырехэлементным кватернионом для ориентации. Скорости колеса вычисляются на основе скорости изменения положений колеса, как они вращаются.
Раздел Mobile Robot Control принимает набор цели waypoints, текущего положения и текущих скоростей колеса, и выводит крутящие моменты колеса, должен был иметь робота, следуют за путем, который преследует waypoints.
Существует три основных компонента.
Блок Pure Pursuit является контроллером, который задает скорость транспортного средства, и направляющаяся скорость вращения транспортного средства должна была следовать за waypoints на фиксированной скорости, учитывая текущее положение.
Блок MATLAB function Скорости Колеса Набора преобразует скорость транспортного средства и направляющуюся скорость вращения к левой и правой скорости колеса, с помощью кинематики робота с дифференциальным приводом:
и левые и правые скорости колеса, скорость транспортного средства, скорость вращения заголовка транспортного средства, ширина дорожки, и радиус колеса. Кроме того, этот 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, и финал выполнил путь робота.