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

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

Предпосылки: Запуск с Gazebo и моделируемым TurtleBot, моделью чтения и свойствами симуляции из Gazebo

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

На вашей машине Linux® запустите Gazebo. Если вы используете виртуальную машину из Запуска с Gazebo и Моделируемым TurtleBot, используйте Gazebo Пустой мир.

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

ipaddress = '192.168.203.129';
rosinit(ipaddress)
Initializing global node /matlab_global_node_57411 with NodeURI http://192.168.203.1:55160/
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 с помощью векторов y и x.

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}

Задайте параметры для приложения силы. Здесь длительность установлена в одну секунду, и вектор силы установлен в-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_57411 with NodeURI http://192.168.203.1:55160/

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

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