В этом примере показано, как использовать Simulink, чтобы избежать препятствий при следовании по пути для дифференциального приводного робота. В этом примере используется ROS для отправки и получения информации от симулятора на основе MATLAB ®. Имитатор можно заменить другими имитаторами на базе АФК, такими как Gazebo ®.
Предварительные условия: Подключение к роботу с поддержкой ROS от Simulink ® (ROS Toolbox)
В этом примере используется модель, которая реализует следующий за контроллером путь с предотвращением препятствий. Контроллер получает данные о позе робота и лазерном сканировании от имитированного робота и посылает команды скорости для приведения робота в движение по заданному пути. Можно настроить параметры во время работы модели и наблюдать за воздействием на моделируемого робота.
Запустите простой симулятор на базе MATLAB:
Напечатать rosinit(Панель инструментов ROS) в командной строке 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 ®. Инструкции по настройке среды беседки см. в разделе Начало работы с беседкой и моделируемым TurtleBot (ROS Toolbox). Инструкции по настройке сетевого соединения с Gazebo см. в разделе Подключение к роботу с поддержкой ROS от Simulink ® (ROS Toolbox). После запуска виртуальной машины запустите Gazebo Office с помощью ярлыка на рабочем столе. Имитированный Turtlebot в тренажере Gazebo, принимает команды скорости, как сообщения типаgeometry_msgs/Twist, на /cmd_vel тема. Вам также нужен алгоритм локализации, чтобы получить положение робота в Беседке. Инструкции по поиску местоположения робота в среде беседки см. в разделе Локализация TurtleBot с помощью локализации Monte Carlo.
Эта модель реализует путь, следующий с алгоритмом предотвращения препятствий. Модель разделена на четыре подсистемы. В следующих разделах описывается каждая подсистема.
open_system('pathFollowingWithObstacleAvoidanceExample');Технологические вводы
Подсистема «Inputs» обрабатывает все входы алгоритма.
Есть два абонента для приема данных от симулятора. Первый абонент получает сообщения, отправленные /scan тема. Сообщение лазерного сканирования затем обрабатывается для извлечения диапазонов и углов сканирования. Второй абонент получает сообщения, отправленные /ground_truth_pose тема. (x,y) затем из сообщения позы извлекают местоположение и ориентацию робота по оси Yaw.
Путь указывается как набор ППМ. В этом примере используется постоянный ввод 3x2. В качестве массива Nx2 можно указать любое количество ППМ. Чтобы изменить размер пути во время выполнения, можно либо использовать сигнал переменного размера, либо использовать сигнал фиксированного размера с NaN заполнение. В этом примере используется ввод фиксированного размера с NaN заполнение неизвестных ППМ.
open_system('pathFollowingWithObstacleAvoidanceExample/Inputs','tab');
Вычислить скорость и заголовок для пути, следующего
Подсистема «Вычислить скорость и курс для пути следования» вычисляет команды линейной и угловой скорости и целевое направление движения с помощью блока «Чистое преследование». Блок «Pure Purchasion» находится в библиотеке «Mobile Robot Algoriths» на вкладке «Robotics System Toolbox» в браузере библиотеки. Кроме того, можно ввести robotalgslib в командной строке для открытия подбиблиотеки Алгоритмы мобильных роботов.
Вам также нужно остановить робота, как только он достигнет цели. В этом примере цель является последним ППМ на пути. Эта подсистема также сравнивает текущую позу робота и точку цели, чтобы определить, близок ли робот к цели.
open_system('pathFollowingWithObstacleAvoidanceExample/Compute Velocity and Heading for Path following','tab');
Настройка скоростей во избежание препятствий
Подсистема «Регулировка скоростей во избежание препятствий» вычисляет регулировки линейных и угловых скоростей, вычисляемых повторителем траектории.
Блок векторной гистограммы поля использует показания лазерного диапазона, чтобы проверить, не является ли целевое направление, вычисленное с помощью блока чистого поиска, свободным от препятствий или не основанным на данных лазерного сканирования. Если вдоль целевого направления имеются препятствия, блок гистограммы векторного поля вычисляет направление управления, которое находится ближе всего к целевому направлению и не имеет препятствий. Блок «Векторная гистограмма поля» также находится в подбиблиотеке «Алгоритмы мобильных роботов».
Направление рулевого управления: NaN значение при отсутствии свободных от препятствий направлений в поле зрения датчика. В этом случае требуется движение восстановления, когда робот поворачивается на месте до тех пор, пока не будет доступно направление, свободное от препятствий.
На основе направления рулевого управления эта подсистема вычисляет регулировки линейных и угловых скоростей.
open_system('pathFollowingWithObstacleAvoidanceExample/Adjust Velocities to Avoid Obstacles','tab');
Отправить команды Velocity
Подсистема «Outputs» публикует линейные и угловые скорости для управления моделируемым роботом. Он добавляет скорости, вычисленные с помощью следующего за алгоритмом пути «Pure Purchasion», с корректировками, вычисленными с помощью алгоритма предотвращения препятствий «Vector Field Histogram». Конечные скорости устанавливаются на geometry_msgs/Twist сообщение и опубликовано по данной теме /mobile_base/commands/velocity.
Это включенная подсистема, которая запускается при получении нового лазерного сообщения. Это означает, что команда скорости публикуется только при наличии новой информации о датчике. Это предотвращает наезд робота на препятствия в случае задержки с получением информации датчика.
open_system('pathFollowingWithObstacleAvoidanceExample/Outputs','tab');
Примечание: Для использования тренажера «Беседка» выберите /cmd_vel в блоке «Публикация».
Настройте и запустите модель и наблюдайте за движением робота в тренажере.
Установить время остановки моделирования в Inf.
Нажмите кнопку «Воспроизведение» для запуска моделирования. Обратите внимание, что робот начинает движение в процессе моделирования.
Во время выполнения моделирования откройте подсистему «Вычислить скорость и курс для пути следования» и дважды щелкните по блоку «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) избегая при этом препятствий.
Чтобы остановить моделирование, нажмите кнопку «Остановить».

Создание автономного узла ROS на основе Simulink ® (панель инструментов ROS)
Планирование путей в средах различной сложности (инструментарий системы робототехники)