Добавьте, создайте и удалите объекты в Gazebo

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

Необходимые условия: Начало работы с Gazebo и моделируемым TurtleBot

Соединитесь с Gazebo®

На вашей машине Linux® запустите Gazebo. Если вы используете виртуальную машину от Начало работы с Gazebo и Симулированным TurtleBot, запустите Gazebo Пустой мир с рабочего стола.

Инициализируйте 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 на своей виртуальной машине.

Смотрите также