三 Gazebo学习总结之制作一个模型及导入网格
来源:互联网 发布:广州电脑锣编程培训 编辑:程序博客网 时间:2024/06/05 18:21
Models从简单的形状到复杂的机器人都有。它指的是<model>SDF标签,从本质上来说是links、joints、collision objects、visuals和plugins的集合,生成一个模型文件不一定依靠整体模型的复杂性,本文将介绍一些怎么生成模型的小窍门。
模型的组成部分:
Links:一个link包含了单个模型的物理属性,可能是一个轮子,或者是一个关节链中的一个link。每一个link包含许多碰撞(或冲突)元素和视觉元素,为了提高性能和稳定性要尽量减少links的数量。例如,一个桌子模型通过关节连接,可以由5个links组成(4条腿和1个桌面),但是,这过于复杂,特别是关节将不能移动,而我们可以用1个link和5个collision元素来创建一个桌子。
Collisions:碰撞元素封装了一个用于碰撞检测的几何结构,可以是一个简单的形状(首选),或者是一个三角形的网格(将消耗更多的资源),一个link可能包含许多个碰撞元素。
Visual:一个视觉元素被用于使link部分可视化,一个link包含0个或者多个视觉元素。
Inertial:惯性元素描述了link的动态属性,例如质量和矩阵转动惯量。
Sensor:传感器从world中搜集数据,用于插件的使用,一个link可能包含0个或多个传感器。
Joint:一个关节连接了两个link(环节),犹如parent和child的关系,是与其他参数例如旋转抽及关节限制建立在一起的。
Plugins:插件是由第三方为了控制模型而创建的一个共享库。
建立一个模型:
Step 1:集合网格
这一步涉及到为构建模型集合所需要的所有必要的3D网格文件,Gazebo提供了一组简单的形状:box,sphere和cylinder,如果你的模型需要更复杂的东西,请继续阅读。
网格来自于很多地方,Google的3D warehouse是一个很好的3D模型库,其次,你可能已经拥有了必要的文件,最后,你可以使用3D建模软件例如Blender和Sketchup来制作自己的网格。
Gazebo要求网格文件被转换为STL或者Collada格式,Collada为首选格式。
小窍门:1.使用3D建模软件移动每个网格,使它的中心在原点,这将使在Gazebo中的模型放置明显变得容易。
2.Collada(.ada)文件格式允许将材料连接到网格,使用这个机制是为了提高网格的视觉外观。
3.保持网格简单。尤其是如果计划使用网格作为碰撞元素,一个通用的做法是使用一个低多边形网格作为碰撞元素,和使用一个高多边形网格作为视觉。一个较好的做法是使用内置的形状(box,sphere,cylinder)作为碰撞元素。
Step2:创建模型SDF文件
从创建一个很简单的模型文件,或者复制一个存在的模型文件开始,关键的是要知道运行的(是什么)东西,或易于调试。
下面是一个只有单元大小形状,非常基本的最小box模型文件作为碰撞几何,和相同的单元惯性视觉的例子:
创建模型文件:
vim box.sdf复制以下内容到box.sdf:
<?xml version='1.0'?><sdf version="1.4"><model name="my_model"> <pose>0 0 0.5 0 0 0</pose> <static>true</static> <link name="link"> <inertial> <mass>1.0</mass> <inertia> <ixx>1.0</ixx> <ixy>0.0</ixy> <ixz>0.0</ixz> <iyy>1.0</iyy> <iyz>0.0</iyz> <izz>1.0</izz> </inertia> </inertial> <collision name="collision"> <geometry> <box> <size>1 1 1</size> </box> </geometry> </collision> <visual name="visual"> <geometry> <box> <size>1 1 1</size> </box> </geometry> </visual> </link> </model></sdf>
注意:Box的几何原点是在box的几何中心,因此为了这个box的底部能与地平面齐平,一个<pose>0 0 0.5 0 0 0</pose>的原点被添加,是为了在地平面上提高box。
小窍门:以上例子设定这个简单的box模型为静态的,使模型不能移动。在模型创造中这个特性是有用的,当开始创建模型时,如果你想你的模型是移动的,设置<static>标签为false。
Step3:添加以下特征到模型SDF文件
对于一个正在运行的.sdf文件,慢慢的开始添加更多的复杂性,对于每一个新添加的特征,使用图形客户端( graphical client)重载模型,以确保model是正确的。
以下是一个很好的添加特征顺序:
a.增加一个link;
b.设定碰撞元素(collision element);
c.设定视觉元素(visual element);
d.设置惯性属性(inertial properties);
e.返回a,直到所有的links都被添加;
f.增添所有的关节(joints,若有的话)
g.增添所有的插件(plugins,若有的话)
导入网格:
以下内容描述了如何将3D网格导入到Gazebo中,Gazebo使用了一个右手定则来确定坐标系,Z轴是向上垂直的(中指),X轴是向前指向屏幕的(大拇指),Y轴是指向左边(食指)。
减少复杂性:许多网格过于复杂,为了达到高效,一个有上千个三角形的网格应该被减少,或者划分为单独的网格;
中心网:第一步是设置网格中心在(0,0,0),确定向前的方向(可以是主观的)沿着X轴;
缩放网:Gazebo使用的是米制系统,许多网格(特别是3D warehouse)使用的是英制单位,使用最喜欢的3D编辑器去缩放网格为米制尺寸。
一旦网格被准备好,以Collada文件格式导入,这个格式将包含所有的3D信息和材料。
测试网格:最容易的测试网格的方法是创建一个名为my_world.world的简单world文件来载入网格,用网格的实际名称代替my_mesh.dae。
<?xml version="1.0"?><sdf version="1.4"> <world name="default"> <include> <uri>model://ground_plane</uri> </include> <include> <uri>model://sun</uri> </include> <model name="my_mesh"> <pose>0 0 0 0 0 0</pose> <static>true</static> <link name="body"> <visual name="visual"> <geometry> <mesh><uri>file://my_mesh.dae</uri></mesh> </geometry> </visual> </link> </model> </world></sdf>然后,仅仅在文件所在的目录内运行Gazebo。
gazebo my_mesh.world例如使用duck.dae和duck.png网格文件,把它们一起放在模型目录下面,或者与world文件放在同一个目录下面。由于duck网格被定义为Y轴向上,为了让它显示的是直立的,需要在sdf中设置一个旋转量。
<visual name="visual"> <pose>0 0 0 1.5708 0 0</pose> <geometry> <mesh><uri>file://duck.dae</uri></mesh> </geometry></visual>结果如图:
本文靠自己理解,翻译而来,错误之处望不吝指教!!!
- 三 Gazebo学习总结之制作一个模型及导入网格
- 六 Gazebo学习总结之附加网格
- 五 Gazebo学习总结之创建一个小车
- 一 Gazebo学习总结之Gazebo的安装
- 二 Gazebo学习总结之Gazebo的组成
- 四 Gazebo学习总结之Gazebo的某些设置属性和主题订阅
- 七 Gazebo学习总结之传感器的添加
- 八 Gazebo学习总结之附加抓手到机器人
- DirectX学习笔记(十二):网格进阶之(XFile文件导入、渐进网格原理及外接体的)实现
- 网格模型基础三
- 网格模型中级三
- Direct-X学习笔记--封装一个网格模型类
- ROS中gazebo工具学习(使用gazebo加载机器人模型)
- Gazebo tutorial学习-----ros_control+Gazebo
- gazebo模型下载
- ubifs文件系统的制作过程&&遇到的问题及解决方案总结---之三“UBIFS镜像的制作&&烧写”
- ROS Gazebo(三):启动gazebo/URDF
- SQL Server2008 学习之(三) :数据库的导入及第一个“Hello World”
- Oracle死锁问题分析解决
- WARN No appenders could be found for logger的解决方法
- Spring-AOP-Struts重新解析
- Codeforces 401B Sereja and Contests(水题)
- 将UIView转成UIImage,将UIImage转成PNG/JPG
- 三 Gazebo学习总结之制作一个模型及导入网格
- 关于leveldb
- python socket文件通信练习
- Linux驱动之设备模型(5)-设备
- HTML meta viewport属性说明
- gzip的介绍以及web服务器对文件压缩的支持
- 第一周:算法概论
- 过滤器与拦截器的具体区别
- 2012蓝桥杯C++本科 微生物繁殖