Этот пример показывает вам, как использовать Simulink, чтобы избежать препятствий при следовании за путем для робота с дифференциальным приводом. Этот пример использует ROS, чтобы отправить и получить информацию от средства моделирования MATLAB®-based. Можно заменить средство моделирования на другие ОСНОВАННЫЕ НА ROS средства моделирования, такие как Gazebo®.
Предпосылки: свяжите с поддерживающим ROS роботом от Simulink® (ROS Toolbox)
Этот пример использует модель, которая реализует контроллер следования траектории с предотвращением препятствия. Контроллер получает положение робота и лазерные данные сканирования от симулированного робота и отправляет скоростные команды, чтобы управлять роботом на данном пути. Можно настроить параметры, в то время как модель запускается, и наблюдайте эффект на симулированном роботе.
Запустите простое основанное на 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
, к /scan
тема
Заменяя основанное на MATLAB средство моделирования на Gazebo:
Можно также использовать средство моделирования Gazebo с симулированным TurtleBot®. Смотрите Начало работы с Gazebo и Симулированным TurtleBot (ROS Toolbox) для получения инструкций относительно подготовки среды Gazebo. Смотрите Подключение к поддерживающему ROS Роботу от Simulink® (ROS Toolbox) для получения инструкций относительно подготовки сетевого подключения с Gazebo. Вам также нужен алгоритм локализации, чтобы получить положение робота в Gazebo. Смотрите Локализуют TurtleBot Используя Локализацию Монте-Карло для получения инструкций относительно нахождения местоположения робота в среде Gazebo.
Эта модель реализует следование траектории с алгоритмом предотвращения препятствия. Модель разделена на четыре подсистемы. Следующие разделы объясняют каждую подсистему.
open_system('pathFollowingWithObstacleAvoidanceExample');
Входные параметры процесса
'Входные' процессы подсистемы все входные параметры к алгоритму.
Существует два подписчика, чтобы получить данные из средства моделирования. Первый подписчик получает сообщения, отправленные на /scan
тема. Лазерное сообщение сканирования затем обрабатывается, чтобы извлечь области значений сканирования и углы. Второй подписчик получает сообщения, отправленные на /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.
Сгенерируйте автономный узел ROS от Simulink® (ROS Toolbox)
Планирование пути в среде различной сложности (Robotics System Toolbox)