Этот пример показывает вам, как использовать Simulink, чтобы избежать препятствий при следовании за путем для робота с дифференциальным приводом. Этот пример использует ROS, чтобы отправить и получить информацию от средства моделирования MATLAB®-based. Можно заменить средство моделирования на другие ОСНОВАННЫЕ НА ROS средства моделирования, такие как Gazebo®.
Предпосылки: соединитесь с поддерживающим ROS роботом от Simulink®
Этот пример использует модель, которая реализует контроллер следования траектории с предотвращением препятствия. Контроллер получает положение робота и лазерные данные сканирования от моделируемого робота и отправляет скоростные команды, чтобы управлять роботом на данном пути. Можно настроить параметры, в то время как модель запускается, и наблюдайте эффект на моделируемого робота.
Запустите простое основанное на MATLAB средство моделирования:
Введите rosinit
в командной строке 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", к "/сканирование" тема
Заменяя основанное на MATLAB средство моделирования на Gazebo:
Можно также использовать средство моделирования Gazebo с моделируемым TurtleBot®. См. Запуск с Gazebo и Моделируемым TurtleBot для получения инструкций относительно подготовки среды Gazebo. Смотрите Подключение к поддерживающему ROS Роботу от Simulink® для получения инструкций относительно подготовки сетевого подключения с Gazebo. Вам также нужен алгоритм локализации, чтобы получить положение робота в Gazebo. Смотрите Локализуют TurtleBot Используя Локализацию Монте-Карло для получения инструкций относительно нахождения местоположения робота в среде Gazebo.
Эта модель реализует следование траектории с алгоритмом предотвращения препятствия. Модель разделена на четыре подсистемы. Следующие разделы объясняют каждую подсистему.
open_system('pathFollowingWithObstacleAvoidanceExample');
Входные параметры процесса
'Входные' процессы подсистемы все входные параметры к алгоритму.
Существует два подписчика, чтобы получить данные из средства моделирования. Первый подписчик получает сообщения, пересланные "/сканирование" тема. Лазерное сообщение сканирования затем обрабатывается, чтобы извлечь области значений сканирования и углы. Второй подписчик получает сообщения, отправленные по "/ground_truth_pose" теме. (x, y) ориентация местоположения и Отклонения от курса робота затем извлечена из сообщения положения.
Путь задан как набор waypoints. Этот пример использует 3x2 постоянный вход. Можно задать любое количество waypoints как массив Nx2. Чтобы изменить размер пути во времени выполнения, можно или использовать переменную измеренный сигнал или использовать сигнал фиксированного размера с дополнением NaN
. Этот пример использует вход фиксированного размера с дополнением NaN
для waypoints, которые неизвестны.
open_system('pathFollowingWithObstacleAvoidanceExample/Inputs', 'tab');
Вычислите скорость и достижение следования траектории
'Вычисляют Скорость, и Достижение Следования траектории' подсистема вычисляет линейные и угловые скоростные команды и цель движущееся направление с помощью блока Pure Pursuit. Блок Pure Pursuit расположен в подбиблиотеке Mobile Robot Algorithms во вкладке Robotics System Toolbox в Браузере Библиотеки. Также можно ввести robotalgslib
на командной строке, чтобы открыть подбиблиотеку Mobile Robot Algorithms.
Также необходимо остановить робота, если он достигает целевой точки. В этом примере целью является последний waypoint на пути. Эта подсистема также сравнивает текущее положение робота и целевую точку, чтобы определить, ли робот близко к цели.
open_system('pathFollowingWithObstacleAvoidanceExample/Compute Velocity and Heading for Path following', 'tab');
Настройте скорости, чтобы избежать препятствий
'Настраивают Скорости, чтобы Избежать, чтобы Препятствия' подсистема вычислили корректировки линейных и угловых скоростей, вычисленных последователем пути.
Блок Vector Field Histogram использует лазерные показания области значений, чтобы проверять, без ли вычисленное использование целевого направления блока Pure Pursuit препятствий или не на основе лазерных данных сканирования. Если существуют препятствия вдоль целевого направления, блок Vector Field Histogram вычисляет держащееся направление, которое является самым близким к целевому направлению и является без препятствий. Блок Vector Field Histogram также расположен в подбиблиотеке Mobile Robot Algorithms.
Держащееся направление является значением NaN
, когда нет никаких направлений без препятствий в поле зрения датчика. В этом случае движение восстановления требуется, где робот становится на месте, пока направление без препятствий не доступно.
На основе держащегося направления эта подсистема вычисляет корректировки в линейных и угловых скоростях.
open_system('pathFollowingWithObstacleAvoidanceExample/Adjust Velocities to Avoid Obstacles', 'tab');
Отправьте скоростные команды
'Выходная' подсистема публикует линейные и угловые скорости, чтобы управлять моделируемым роботом. Это добавляет, что скорости вычислили использование Чистого алгоритма следования траектории Преследования с корректировками, вычисленными с помощью алгоритма предотвращения препятствия Гистограммы поля Vector. Итоговые скорости установлены на сообщении "geometry_msgs/Twist" и опубликованы по теме "/mobile_base/commands/velocity".
Это - активированная подсистема, которая инициирована, когда новое лазерное сообщение получено. Это означает, что скоростная команда публикуется только, когда новая информация о датчике доступна. Это препятствует тому, чтобы робот поразил препятствия в случае задержки получения информации о датчике.
open_system('pathFollowingWithObstacleAvoidanceExample/Outputs', 'tab');
Сконфигурируйте и запустите свою модель и наблюдайте движение робота в средстве моделирования.
Установите Время остановки симуляции на Inf
.
Кликните по кнопке воспроизведения, чтобы запустить симуляцию. Заметьте, что робот начинает перемещаться в симуляцию.
В то время как симуляция запускается, открытый 'Вычисляют Скорость и Достижение Следования траектории' подсистема и дважды кликают на блоке Pure Pursuit. Измените желаемый линейный скоростной параметр на 0.5
. Наблюдайте увеличение скорости робота.
Путь по умолчанию [2 2;8 8]
проходит через препятствие. Заметьте, что робот берет обход вокруг препятствия, чтобы достигнуть конечной точки пути.
Откройте 'Входную' подсистему и дважды кликните на блоке Waypoints Input. Измените постоянное значение от [2 2;8 8;NaN NaN]
до [2 2;8 8;12 5]
. Заметьте, что робот продолжает следовать за новым путем и достигает новой целевой точки [12, 5]
при предотвращении препятствий.
Чтобы остановить симуляцию, нажмите кнопку Stop.
Этот пример показал вам, как создать контроллер следования траектории с предотвращением препятствия.