exponenta event banner

Проверка автономности робота при моделировании

В этом примере рассматривается управление MATLAB ® тренажером Gazebo ®.

При использовании роботов-симуляторов важно тестировать автономные алгоритмы и динамически изменять окружающую среду во время выполнения моделирования. В этом примере показано, как создать базовую автономию робота с беседкой и как с ней взаимодействовать. В этом примере роботом является платформа TurtleBot ®. Конкретные примеры с использованием TurtleBot см. в примере «Связь с TurtleBot ».

В этом примере используется timer для контроля автономных аспектов движения TurtleBot. Таймеры позволяют выполнять процессы в фоновом режиме с регулярными интервалами выполнения без блокирования командной строки MATLAB ®. Хотя для проверки базовой автономности можно использовать циклы и другие методы, запланированное выполнение и неблокирующий характер таймеров делают их лучшим выбором для достижения автономного поведения.

Предпосылки: Начало работы с беседкой и моделируемым TurtleBot, добавление, построение и удаление объектов в беседке, применение сил и крутящих моментов в беседке

Подключиться к беседке

На компьютере Linux ® запустите беседку. Если вы используете виртуальную машину из Gain Start with Gazebo и Simulated TurtleBot, используйте мир Gazebo Empty.

Инициализируйте ROS, заменив образец IP-адреса IP-адресом виртуальной машины. Создание экземпляра ExampleHelperGazeboCommunicator класс.

rosinit("http://192.168.178.132:11311")
Initializing global node /matlab_global_node_19208 with NodeURI http://192.168.178.1:53310/
gazebo = ExampleHelperGazeboCommunicator;

Построить стену в мире.

 wall = ExampleHelperGazeboModel("grey_wall","gazeboDB");
 spawnModel(gazebo,wall,[-2 4 0]);

Все единицы в Беседке указаны с помощью соглашения СИ.

Создать ExampleHelperGazeboSpawnedModel объект для подвижной базы и изменить ее состояние ориентации. Поворот TurtleBot вручную на 90 градусы (δ/2 радианы) так, чтобы она была непосредственно обращена к стене.

 turtleBot = ExampleHelperGazeboSpawnedModel("turtlebot3_burger",gazebo);
 setState(turtleBot,"orientation",[0 0 pi/2]);

Начало предотвращения препятствий TurtleBot

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

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

 global robot
 global velmsg

Создайте издателя для скорости и сообщения ROS для переноса информации.

 robot = rospublisher("/cmd_vel");
 velmsg = rosmessage(robot);

Подпишитесь на тему лазерного сканирования.

 timerHandles.sub = rossubscriber("/scan");

Создайте таймер для управления основным контуром управления TurtleBot.

 t = timer("TimerFcn",{@exampleHelperGazeboAvoidanceTimer,timerHandles},"Period",0.1,"ExecutionMode","fixedSpacing");

функция обратного вызова по таймеру, exampleHelperGazeboAvoidanceTimer определяет функцию обратного вызова лазерного сканирования и выполняет основной алгоритм, позволяющий TurtleBot избегать попадания в объекты при их перемещении.

Запустите таймер.

start(t)

TurtleBot движется к стене. Как только он становится очень близко к стене, он должен повернуть влево, чтобы не попасть в нее.

Примечание: Если TurtleBot врезается в стену, лазерное сканирование, вероятно, не публикуется через Беседку. Перезапустите сеанс беседки и повторите попытку.

Добавить объекты

Вы все еще можете вносить изменения в мир во время движения TurtleBot. Добавьте новую стену в мир. Если добавить его достаточно быстро, он может заблокировать TurtleBot, чтобы избежать удара о стену.

spawnModel(gazebo,wall,[-5.85 0.15 0],[0, 0, pi/2]);
pause(20)     % TurtleBot avoids walls for 20 seconds

Удаление моделей и завершение работы

Остановите таймер, чтобы остановить алгоритм робота.

stop(t)
delete(t)

Найдите все объекты в мире и удалите добавленные вручную.

list = getSpawnedModels(gazebo)
list = 4×1 cell
    {'ground_plane'     }
    {'turtlebot3_burger'}
    {'grey_wall'        }
    {'grey_wall_0'      }

Удалите две стены с помощью следующих команд:

removeModel(gazebo,"grey_wall");
removeModel(gazebo,"grey_wall_0");

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

clear

Использовать rosshutdown после завершения работы с сетью ROS. Завершите работу глобального узла и отключитесь от «Беседки».

rosshutdown
Shutting down global node /matlab_global_node_19208 with NodeURI http://192.168.178.1:53310/

По завершении закройте окно «Беседка» на виртуальной машине.