Этот пример исследует больше всестороннего взаимодействия со Средством моделирования Gazebo® от MATLAB®. Темы включают создающие простые модели, добавляя ссылки и соединения к моделям, соединяя модели вместе, и прикладывая силы к телам.
Предпосылки: Запуск с Gazebo и моделируемым TurtleBot, моделью чтения и свойствами симуляции из 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 на своей виртуальной машине.