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