- Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.
\
обзор move_base
Пакет move_base предоставляет реализацию действия (см. пакет actionlib), которое, имея цель в мире, попытается реализовать ее с помощью базы перемещения. Узел move_base связывает глобальный и локальный планировщики вместе для выполнения задачи глобальной навигации. Он поддерживает любой глобальный планировщик, соответствующий интерфейсу nav_core::BaseGlobalPlanner, указанному в пакете nav_core, и любой локальный планировщик, соответствующий интерфейсу nav_core::BaseLocalPlanner, указанному в пакете nav_core. Узел move_base также поддерживает две карты стоимости, одну для глобального планировщика и одну для локального планировщика (см. пакет costmap_2d), которые используются для задач навигации.
О actionlib
В любой крупной системе на основе ROS будут ситуации, когда кто-то хочет отправить запрос узлу для выполнения какой-то задачи, а также получает ответ на запрос. В настоящее время это возможно через сервисы ROS. Если выполнение службы занимает много времени, пользователь может захотеть иметь возможность отменить запрос во время выполнения или регулярно получать обратную связь о том, как выполняется запрос. Пакет actionlib предоставляет инструменты для создания серверов, выполняющих долго выполняющиеся цели, которые можно вытеснить. Он также предоставляет клиентский интерфейс для отправки запросов на сервер.
Постановка целей
В дополнение к использованию метода, установленного в интерфейсе rviz. Исходный код Move_base предоставляет вызывающий интерфейс для rviz и т. д., преобразует цель в форме геометрии_msgs::PoseStamped в move_base_msgs::MoveBaseActionGoal, а затем публикует ее в теме цели соответствующего типа, чтобы соответствующая целевая точка навигации могла быть отправлено через командную строку.
Если начальная точка пуста, установите global_pose в начальную точку
Используйте локальный планировщик пути для прямого вывода скорости колеса и управления роботом, чтобы он следовал по пути к целевой точке.
Время ожидания данных карты истекло, то есть данные датчика наблюдения недостаточно новые, остановите робота и верните false
конечный автомат move_base
Конечный автомат move_base — это управляющая логика для обработки навигации; конечный автомат movebase разделен на планирование, контроль, очистку и по умолчанию. Планирование относится ко всему процессу принятия новых целей и выполнения глобального планирования. Короллирование относится к процессу вызова локального планировщика для расчета скорости робота. Очистка относится к процессу восстановления с использованием определяемого пользователем поведения. Как правило, состояние по умолчанию или при получении действительной цели — ПЛАНИРОВАНИЕ. После планирования глобального пути состояние_ будет ПЛАНИРОВАНИЕ-> УПРАВЛЕНИЕ. Если планирование не удается, оно будет ПЛАНИРОВАНИЕ-> ОЧИСТКА.
//восстановление относится к планировщику восстановления, который находится на том же уровне, что и глобальный планировщик и локальный планировщик.
//Разница в том, что он вызывается, когда робот не может найти путь в локальной карте стоимости или глобальной карте стоимости.Например, rotate_recovery заставляет робота вращаться на месте на 360°, а clear_costmap_recovery восстанавливает карту стоимости на статическую карту.
Использование Move_base
Файл запуска используется для запуска move_base.Основное содержание включает в себя анализ файла карты, move_base и amcl, позиционирующие три части, формирующие полную структуру.
Пакет global_planner, который по умолчанию использует dijkstra, также может использовать планирование глобального пути A*, планирование локального пути включает dwa и teb.
Параметры dwa простые, шасси Ackerman использует алгоритм teb, а алгоритм teb более совершенный, но dwa полностью удовлетворяет требованиям для других шасси, кроме Ackerman;