本示例探索了来自MATLAB®的Gazebo®模拟器更深入的交互。主题包括创建简单的模型,为模型添加链接和关节,将模型连接在一起,以及将力应用到物体上。
先决条件:开始凉亭和模拟的龟毡
在您的Linux®机器上启动Gazebo。如果您使用的虚拟机来自开始凉亭和模拟的龟毡,开始凉亭空桌面世界。
通过替换初始化ROSipaddress
使用虚拟机的IP地址。对象的实例ExampleHelperGazeboCommunicator
类。
ipAddress =“http://192.168.178.132:11311”;罗斯尼特(ipaddress)
使用NodeURI http://192.168.178.1:52158/初始化全局节点/matlab_global_node_77778
露台= ExampleHelperGazeboCommunicator;
要创建模型,请使用ExampleHelperGazeboModel
类。定义属性(使用addlink.
),并使用spawnModel
函数。
球= ExampleHelperGazeboModel (“球”)
Name: ' ball ' ModelObj: [1×1 org.apache.xerces.dom.]documentmpl]链接:[]接头:[]
sphereLink =通过addLink(球,“领域”,1,“颜色”,[0 0 1 1])
sphereLink = ' link0 '
spawnModel(露台,球,(8.5 0 1))
凉亭命令的所有单位都以SI单位指定。根据您的观点,您可能必须缩小才能看到球,因为它被放置在[8.5,0,1]
.下面是场景的图片:
创建向量x
和y
为保龄球瓶的位置(以米计)。
X = [1.5 1.5 1.5 1.5 2.5 2.5 3.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.
创造出圆柱体和球。
销= ExampleHelperGazeboModel (“BowlPin”);LINK1 = AddLink(PIN,“气缸”0.2 [1],“位置”[0 0 0.5]);link2 =通过addLink(销“领域”, 0.2,“位置”,[0 0 1.2],“颜色”,[0.7 0 0.2 1]);
的输出addlink.
生成一个变量,其中包含为链接分配的名称。这些变量创建了关节。
用addJoint
定义两个链接之间的关系。在这种情况下,它们由一个转动关节连接在一起。
关节= Addjoint(PIN,LINK1,LINK2,“转动”,[0 0],[0 0 1]);
关于addJoint
函数是对象、父类、子类、类型、极限和轴。
定义后bowlPin
一旦,您可以从前面创建所有十个保龄球ExampleHelperGazeboModel
.以下为
循环生成凉亭中的模型x
和y
向量。
为i = 1:10 spawnModel(gazebo,pin,[x(i),y(i),0.7]);暂停(1);结束
在向世界添加引脚后,它看起来像这样:
如果现场存在TurtleBot®,请将其删除。查看模型列表。删除一个名为turtlebot3_burger
对于这个特殊的世界。
如果ismember (“turtlebot3_burger”,GetSawnEdModels(凉亭))RemoveModel(凉亭,“turtlebot3_burger”);结束
创建一个ExampleHelperGazeboModel
对于泽西障碍。该对象在凉亭网站上找到此模型。
障碍= examplehelpergazebomodel(“jersey_barrier”,“gazeboDB”);
在世界上产卵两个泽西障碍使用spawnModel
.
spawnModel(露台,障碍,[1.5 - 3 0]);%右侧障碍暂停(1);SpawnModel(凉亭,屏障,[1.5 3 0]);%了障碍
注意:您需要一个Internet连接,以向这些示例中包含的模型产卵。但是,如果您之前在凉亭模拟中生成了模型,则会缓存,因此您可以在没有Internet连接的情况下将其生成它。
这个场景看起来像这个数字:
收回手柄,使球通过examplehelpergazebosawawawawhedmodel.
类。
spawnedBall = ExampleHelperGazeboSpawnedModel (ball.Name露台)
spawnedball = examplehelpergazeBoSheawnedModel与属性:名称:'球'链接:{'link0'}关节:{0×1个单元}
定义力应用的参数。这里将持续时间设置为1
第二,力矢量设置为-75
牛顿在x
方向。
时间= 1;%秒forceevec = [-75 0 0];%牛顿
使用该力量将力应用于模型ApplyForce.
函数。
ApplyForce(SpawnEdball,Spherelink,持续时间,Forcevec);暂停(5);
以下是碰撞和事故后的图片
删除为这个示例创建的模型。
examplehelpergazebocleanupbowling;
使用完发布者、订阅者和其他与ros相关的对象后,请清除它们的工作区。
清除
用rosshutdown
一旦你完成了ROS网络的工作。关闭全局节点并断开与Gazebo的连接。
rosshutdown
使用NodeURI http://192.168.178.1:52158/关闭全局节点/matlab_global_node_77778
完成后,将在虚拟机上关闭凉亭窗口。