本例程探索如何深层次地与MATLAB中的Gazebo仿真器交互。主题包括创建简单的模型、增加链接和加入模型、将模型连接在一起和应用力到物体。

预备知识:"4.2 开始使用Gazebo和仿真的TurtleBot","5.1从Gazebo读取模型和仿真属性"。

连接到Gazebo

在用户的Linux计算机启动Gazebo,如果使用"4.2开始使用Gazebo和仿真的TurtleBot"中的虚拟机,则使用“Gazebo Empty world”。使用下面的指令初始化ROS,需要用虚拟机的IP地址代替示例IP地址(192.168.1.1),创建一个“ExampleHelperGazeboCommunicator”类的实例。

ipaddress = '192.168.1.1'

rosinit(ipaddress)

gazebo = ExampleHelperGazeboCommunicator();

产生一个简单的球体

使用“ExampleHelperGazeboModel”类创建一个模型,下面的代码创建了一个球体,使用“addLink”定义属性,使用“spawnModel”函数产生球体。

ball = ExampleHelperGazeboModel('Ball')

spherelink = addLink(ball,'sphere',1,'color',[0 0 1 1])

spawnModel(gazebo,ball,[8.5,0,1]);

这些指令的输出类似如下所示:

ball =

ExampleHelperGazeboModel with properties:

Name: 'Ball'

ModelObj: [1x1 org.apache.xerces.dom.DocumentImpl]

Links: []

Joints: []

spherelink =

link0

所有Gazebo命令的单位都是SI单位,根据用户的视野,可能需要缩小才能看见球体,因为它被放置在[8.5,0,1],下面是该场景的图片。

建立和产生保龄球木柱

创建x和y向量表示保龄球木柱的位置(m)。

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”创建10个保龄球木柱。下面的“for”循环使用x和y向量在Gazebo产生了模型。

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)

为力的应用定义参数,此处持续时间设置为1秒,力的向量设置为x方向-75N。

duration = 1; % Seconds

forcevec = [-75 0 0]; % Newtons

使用“applyForce”函数,应用力到模型。

applyForce(spawnedBall, spherelink, duration, forcevec);

pause(5);

下面的图表示碰撞和后果。

移除模型并关闭

为了清除干净,删除本例程创建的所有模型。

exampleHelperGazeboCleanupBowling;

当用户完成工作后,清楚工作空间中的发布器、订阅器和其它有关ROS的对象是个良好的习惯。

clear

建议当完成ROS网络有关的工作之后,使用“rosshutdown”指令关闭全局节点和断开与Gazebo的连接。

rosshutdown

当用户已经完成操作,在虚拟机上关闭Gazebo窗口。

matlab怎么删除对象,ROS与Matlab语言入门教程-在Gazebo中增加、建立和移除对象相关推荐

  1. R语言入门教程知识 第二章 赋值代码与命名规则

    快捷键 新建脚本:  Ctrl + shift + N 清理控制台快捷键: Ctrl + L 赋值快捷键ALT + -  赋值法 1.符号方式赋值: 对象名 <- 对象值 2.函数方式赋值:as ...

  2. c++ 结构体赋值_《零基础看得懂的C语言入门教程》—(十二)结构体是这么回事

    一.学习目标 了解C语言的结构体的使用方法 了解C语言结构体的结构的赋值 了解多种C语言结构体变量的赋值方法和取值方法 目录 <零基础看得懂的C语言入门教程>--(二)简单带你了解流程 & ...

  3. c语言入门教程文库,C语言入门教程(全集)课件

    C语言入门教程(全集)课件 01123364105 Y N p AB X=0? YN P1 A A P2 a a b b Y Y N N y n A B P A A B X=0? 3 a97 3 U ...

  4. 2017年Go语言入门教程-徐培成-专题视频课程

    2017年Go语言入门教程-3763人已学习 课程介绍         Go语言入门教程,只要你懂中文都可以看的懂本套教程,为任何想学习Go语言研制的教程. 课程收益     让任何人都可以轻松掌握G ...

  5. GO语言入门教程(二)

    Hello,各位小伙伴,在接着之前发表的Go语言系列教程之投石问路之后,我们大致了解了一下Go语言的发展史和Go语言的优势,另外我也带着小伙伴进行了Go语言环境的安装和常用命令的介绍.接下来我们就正式 ...

  6. java编程输出平行四边形_JAVA语言入门教程之打印图形实例——打印平行四边形...

    本文主要向大家介绍了JAVA语言入门教程之打印图形实例--打印平行四边形,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 输出平行四边形: public class Parallelo ...

  7. C语言入门教程学习 C语言学习包括哪些?

    嵌入式开发有一定了解的朋友们知道是在操作系统内部开发的,对于操作系统内部来说基本上都是用C语言来进行编译的,所以说对于C语言的学习在嵌入式开发过程中是非常重要的.下面就给大家介绍一些C语言入门教程的相 ...

  8. 小白都能看懂的C语言入门教程

    文章目录 C语言入门教程 1. 第一个C语言程序HelloWorld 2. C语言的数据类型 3. 常量变量的使用 4. 自定义标识符#define 5. 枚举的使用 6. 字符串和转义字符 7. 判 ...

  9. cad怎么向下位移,CAD基础操作入门教程,CAD怎么按坐标位移来移动对象的方法

    CAD基础操作入门教程,CAD怎么按坐标位移来移动对象的方法 CAD绘图操作无疑是比较考验软件操作熟练以及创意设计思维的过程,作为cad设计师,软件熟练是基础也是根本,而创意思维是升华,关系着你的后期 ...

最新文章

  1. CDQ分治 + 树状数组 ---- C. Goodbye Souvenir(三维偏序+思维)
  2. MySQL Server系统架构
  3. ITK:复制复合变换CompositeTransform
  4. 《梦断代码》阅读笔记02
  5. 鸿蒙轻内核源码分析:掌握信号量使用差异
  6. 自动变量和开辟内存的生存期和作用域探讨
  7. 前端输入框错误提示_WEB/APP开发基础之旅--前端、服务器端、数据库综合开发案例...
  8. How To Replace The Firefox Icon With Your Logo
  9. C/C++ Memory Layout
  10. php对象依赖注入作用,php面向对象依赖注入理解及代码举例分析解释
  11. 学计算机高考分数线,2020高考分数线预测
  12. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_2_BufferedOutputStream_字节缓冲...
  13. matlab j计算丰水期的值,科学计算与MATLAB语言超星2020期末考试查题公众号答案
  14. 华为小程序怎么弄出来_华为手机添加桌面小程序 华为手机小程序怎么弄出来...
  15. Azure云centos7安装图形化界面
  16. 珊瑚橙怎么配色配色?橙色优学教你如何玩转2019年度流行色
  17. 扛住阿里双十一高并发流量,Sentinel是怎么做到的?
  18. 技术团队分享改进总结
  19. 关于利用Klayout查看GDS需要导入工艺库的layer properties file(.lyp)
  20. 桃飘火焰焰,梨堕雪漠漠。(排序 贪心

热门文章

  1. 考研之英语学习笔记序列之语法学习(不定冠词a和an的探索)
  2. 北京海淀区2011-2012学年度高三年级第一学期期末练习英语
  3. 数据库查询: managedQuery() 函数过时
  4. JAVA语言强制类型转换要求
  5. 微信公众号文章怎么添加文件下载功能?如Word,Excel,PPT,PDF等
  6. B1032挖掘机技术哪家强
  7. CF574B根据m简化时间
  8. 站在设计风口上,你也会飞
  9. mac linux 压缩解压gz
  10. 多人配音用什么软件?两分钟学会多人播音配音怎么弄