Добавление, построение и удаление объектов в Gazebo

Этот пример исследует более углубленное взаимодействие с Gazebo ® Simulator из MATLAB ®. Темы включают создание простых моделей, добавление ссылок и соединений к моделям, соединение моделей вместе и применение сил к телам.

Необходимые условия: Запуск с Gazebo и моделируемым TurtleBot

Подключение к Gazebo

®

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

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

ipAddress = "http://192.168.178.132:11311";
rosinit(ipAddress)
Initializing global node /matlab_global_node_77778 with NodeURI http://192.168.178.1:52158/
gazebo = ExampleHelperGazeboCommunicator;

Порождайте простую сферу

Чтобы создать модель, используйте ExampleHelperGazeboModel класс. Задайте свойства (используя addLink) и породить мяч, используя spawnModel функция.

ball = ExampleHelperGazeboModel("Ball")
ball = 
  ExampleHelperGazeboModel with properties:

        Name: 'Ball'
    ModelObj: [1×1 org.apache.xerces.dom.DocumentImpl]
       Links: []
      Joints: []

sphereLink = addLink(ball,"sphere",1,"color",[0 0 1 1])
sphereLink = 
'link0'
spawnModel(gazebo,ball,[8.5 0 1])

Все модули команд Gazebo указаны в единицах СИ. В зависимости от вашего вида, вам, возможно, придется уменьшить масштаб, чтобы увидеть мяч, потому что он помещен в [8.5, 0, 1]. Вот изображение сцены:

Создайте и Спаун Боулинг Контакты

Создайте векторы x и y для расположения боулинга контактов (в метрах).

x = [ 1.5  1.5  1.5  1.5  2.5  2.5  2.5  3.5  3.5  4.5];
y = [-1.5 -0.5  0.5  1.5 -1    0    1   -0.5  0.5  0];

Определите базовую модель для боулинга контакта используя ExampleHelperGazeboModel объект. Использование addLink чтобы создать цилиндр и мяч.

pin = ExampleHelperGazeboModel("BowlPin");

link1 = addLink(pin,"cylinder",[1 0.2],"position",[0 0 0.5]);
link2 = addLink(pin,"sphere",0.2,"position",[0 0 1.2],"color",[0.7 0 0.2 1]);

Область выхода addLink создает переменную, содержащую присвоенное имя ссылки. Эти переменные создают соединение.

Использование addJoint для определения связи между этими двумя ссылками. В этом случае они скрепляются шарнирным соединением.

joint = addJoint(pin,link1,link2,"revolute",[0 0],[0 0 1]);

Аргументы addJoint функция является объектом, родительским элементом, дочерним элементом, типом, пределами и осью.

После определения bowlPin один раз, Вы можете создать все десять контакты боулинга из предыдущего ExampleHelperGazeboModel. Следующая for цикл порождает модели в Gazebo используя x и y векторы.

for i = 1:10    
    spawnModel(gazebo,pin,[x(i),y(i),0.7]);
    pause(1);
end

После добавления контактов в мир выглядит так:

Удаление моделей

Если TurtleBot ® существует в сцене, удалите его. Смотрите в списке моделей. Удалите имя turtlebot3_burgerдля этого конкретного мира.

if ismember("turtlebot3_burger",getSpawnedModels(gazebo))
    removeModel(gazebo,"turtlebot3_burger");
end

Порождение встроенных моделей

Создайте ExampleHelperGazeboModel для барьера в Джерси. Объект находит эту модель на сайте Gazebo.

barrier = ExampleHelperGazeboModel("jersey_barrier","gazeboDB");

Создайте два барьера Джерси в мире, используя spawnModel.

spawnModel(gazebo,barrier,[1.5 -3 0]); % Right barrier
pause(1);
spawnModel(gazebo,barrier,[1.5 3 0]); % Left barrier

Примечание: Вам нужно подключение к Интернету, чтобы породить модели, которые не включены в эти примеры. Однако, если вы ранее порождали модель в симуляции Gazebo, она кэшируется, так что порождать ее можно позже без подключения к Интернету.

Сцена выглядит этим рисунком:

Применить силы к мячу

Загрузите указатель на мяч через ExampleHelperGazeboSpawnedModel класс.

spawnedBall = ExampleHelperGazeboSpawnedModel(ball.Name,gazebo)
spawnedBall = 
  ExampleHelperGazeboSpawnedModel with properties:

      Name: 'Ball'
     Links: {'link0'}
    Joints: {0×1 cell}

Задайте параметры для приложения силы. Здесь длительность установлена на 1 во-вторых, вектор силы установлен в -75 Ньютоны в x направление.

duration = 1; % Seconds
forceVec = [-75 0 0]; % Newtons

Применить силу к модели используя applyForce функция.

applyForce(spawnedBall,sphereLink,duration,forceVec);
pause(5);

Ниже приведены изображения столкновения и последствий

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

Удалите модели, созданные для этого примера.

exampleHelperGazeboCleanupBowling;

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

clear

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

rosshutdown
Shutting down global node /matlab_global_node_77778 with NodeURI http://192.168.178.1:52158/

Когда вы закончите, закройте окно Gazebo на вашей виртуальной машине.

См. также