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

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

Предпосылки: Начало работы с Gazebo и моделируемым TurtleBot

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

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

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

rosinit('http://192.168.233.133:11311')
Initializing global node /matlab_global_node_13196 with NodeURI http://192.168.233.1:52498/
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® существует в сцене, удалите его. Посмотрите в списке моделей. Удалите тот под названием mobile_base.

if ismember('mobile_base',getSpawnedModels(gazebo))
    removeModel(gazebo,'mobile_base');
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_13196 with NodeURI http://192.168.233.1:52498/

По окончании закрываете окно Gazebo на своей виртуальной машине.

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