Путь следования с избеганием препятствий в Simulink

®

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

Необходимые условия: Подключение к роботу с поддержкой ROS от Simulink ® (ROS Toolbox)

Введение

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

Запуск симулятора робота

Запустите простой симулятор на основе MATLAB:

  • Тип rosinit (ROS Toolbox) в командной строке MATLAB. Это создает локальный хозяин ROS с сетевым адресом (URI) http://localhost:11311.

  • Тип ExampleHelperSimulinkRobotROS('ObstacleAvoidance') чтобы запустить симулятор робота. Это открывает окно рисунка:

Этот симулятор на основе MATLAB является симулятором на основе ROS для робота с дифференциальным приводом. Симулятор получает и отправляет сообщения по следующим темам:

  • Он получает команды скорости, как сообщения типа geometry_msgs/Twist, на /mobile_base/commands/velocity тема

  • Он отправляет основной истине робота информацию о положении как сообщения типа nav_msgs/Odometry, к /ground_truth_pose тема

  • Он отправляет данные лазерной области значений, как сообщения типа sensor_msgs/LaserScan, к /scan тема

Замена симулятора на базе MATLAB на Gazebo:

Можно также использовать симулятор Gazebo с моделируемым TurtleBot ®. Инструкции по настройке Запуска Gazebo см. в окружение с Gazebo и моделируемым TurtleBot (ROS Toolbox). Инструкции по настройке сетевого соединения с Gazebo см. в разделе Подключение к роботу с поддержкой ROS из Simulink ® (ROS Toolbox). Запустив виртуальную машину, запустите Gazebo Office world с помощью ярлыка рабочего стола. Моделируемый Turtlebot в симуляторе Gazebo получает команды скорости как сообщения типа geometry_msgs/Twist, на /cmd_vel тема. Также нужен алгоритм локализации, чтобы получить положение робота в Gazebo. Смотрите Localize TurtleBot Using Monte Carlo Localization для получения инструкций по поиску местоположения робота в среде Gazebo.

Откройте существующую модель

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

open_system('pathFollowingWithObstacleAvoidanceExample');

Входные параметры процесса

Подсистема 'Inputs' обрабатывает все входы в алгоритм.

Есть два абонента, чтобы получить данные с симулятора. Первый абонент получает сообщения, отправленные на /scan тема. Сообщение лазерного скана затем обрабатывается, чтобы извлечь области значений и углы скана. Второй абонент получает сообщения, отправленные на /ground_truth_pose тема. The (x,y) местоположение и ориентация рыскание робота затем извлекается из сообщения положения.

Путь задается как набор путевых точек. В этом примере используется постоянный вход 3x2. Можно задать любое количество путевых точек как Nx2 массив. Чтобы изменить размер пути во время исполнения, можно либо использовать сигнал переменной размера, либо использовать сигнал фиксированного размера с NaN заполнение. Этот пример использует вход фиксированного размера с NaN заполнение для неизвестных путевых точек.

open_system('pathFollowingWithObstacleAvoidanceExample/Inputs','tab');

Вычислите скорость и курс для следования пути

Подсистема 'Compute Velocity and Heading for Path Following' вычисляет линейные и угловые скорости и направление движения цели с помощью блока Pure Pursuit. Блок Pure Pursuit расположен в подбиблиотеке Mobile Robot Algorithms на вкладке Robotics System Toolbox в браузере библиотек. Кроме того, можно вводить robotalgslib в командной строке для открытия подбиблиотеки Алгоритмы мобильного робота.

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

open_system('pathFollowingWithObstacleAvoidanceExample/Compute Velocity and Heading for Path following','tab');

Корректируйте скорости, чтобы избежать препятствий

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

Блок Векторное Поле Histogram использует показания лазерной области значений, чтобы проверить, является ли целевое направление, вычисленное с помощью блока Pure Pursuit, свободным от препятствий или не основанным на данных лазерного скана. Если существуют препятствия вдоль целевого направления, блок Векторное Поле Histogram вычисляет направление рулевого управления, которое находится ближе всего к целевому направлению и не имеет препятствий. Блок Векторное Поле Histogram также расположен в подбиблиотеке Mobile Robot Algorithms.

Направление рулевого управления NaN значение при отсутствии свободных от препятствий направлений в поле зрения датчика. В этом случае требуется движение восстановления, где робот поворачивается на месте, пока не станет доступным направление без препятствий.

На основе направления рулевого управления эта подсистема вычисляет корректировки линейных и угловых скоростей.

open_system('pathFollowingWithObstacleAvoidanceExample/Adjust Velocities to Avoid Obstacles','tab');

Отправка команд скорости

Подсистема 'Outputs' публикует линейные и угловые скорости, чтобы управлять моделируемым роботом. Он добавляет скорости, вычисленные с помощью пути Чистого Преследования, следующего за алгоритмом с корректировками, вычисленными с помощью алгоритма предотвращения препятствий Векторного Поля Гистограммы. Конечные скорости заданы на geometry_msgs/Twist сообщение и опубликовано по теме /mobile_base/commands/velocity.

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

open_system('pathFollowingWithObstacleAvoidanceExample/Outputs','tab');

Примечание: Чтобы использовать симулятор Gazebo, выберите /cmd_vel тема в блоке «Публикация».

Сконфигурируйте и запустите модель

Сконфигурируйте и запустите свою модель и наблюдайте движение робота в симуляторе.

  • Установите время остановки симуляции на Inf.

  • Нажмите кнопку Play, чтобы начать симуляцию. Заметьте, что робот начинает движение в симуляции.

  • Пока симуляция выполняется, откройте подсистему 'Compute Velocity and Heading for Path Following' и дважды кликните по блоку Pure Pursuit. Измените требуемый параметр линейной скорости на 0.5. Наблюдайте увеличение скорости робота.

  • Путь по умолчанию [2 2; 8 8] проходит через препятствие. Заметьте, что робот совершает объезд препятствия, чтобы добраться до конечной точки пути.

  • Откройте подсистему 'Inputs' и дважды кликните по блоку Waypoints Input. Измените постоянное значение из [2 2;8 8;NaN NaN] на [2 2; 8 8; 12 5]. Заметьте, что робот продолжает идти по новому пути и достигает новой целевой точки (12,5) избегая препятствий.

  • Чтобы остановить симуляцию, нажмите кнопку Stop.

См. также