我们经常能在SDF格式文件中见到.dae/.stl模型文件。比如如下代码:
<geometry>
<mesh>
<uri>model://pxdx/meshes/pxdx.dae</uri>
<scale>1 1 1</scale>
</mesh>
</geometry>
具体参见sdf格式定义:http://sdformat.org/spec?ver=1.6&elem=geometry
Blender作为一款功能强大的软件,实现的功能非常丰富,今天只是简单入门。
首先在edit, preference中插件Add-ons中搜索image,安装
然后我们就可以导入图片作为平面了。点击 文件 插入 图片,选择图片,并输入scale,可以看到实际尺寸Dimensions
点击窗口左上角切换到Edit Mode编辑模式
右键单击选择Subdivide,若干次后,直到密集分布后满足要求。选择所有,Add Modifier中选择Displace,选择一张灰度图
根据需求选择参数,如果是同样大小按1比1的话要用UV
注意到这里的时候还不是mesh,还只是将点进行偏移形成vertices!需要形成mesh才能导出使用。其实也很简单,切换到object Mode后,选择图片后点击菜单Object,convert to meshes
然后再Add modifier中的Triangulate,进行三角化处理,默认参数即可。
如果是导出visual中,操作到此结束(根本不需要实体化solidify)。随后再导出export成dae文件或者stl文件。
如果需要进行碰撞模拟的话,则需要添加collision及Rigid Body,如果作为平面或者固定物体那么刚体设置中Passive模式,否则默认Active。
保存blend文件后再导出成stl文件。经过测试,visual用mesh最好导出成dae文件,collision用最好用stl文件。目前原因未知,尤其用于gzweb时,走了很多弯路才发现。model://默认指向的是gazebo_model_path,一般是~/.gazebo/models,除非重新定义。
sdf简单代码如下:
<?xml version="1.0" ?>
<sdf version="1.5">
<world name="default">
<light name='sun' type='directional'>
<cast_shadows>1</cast_shadows>
<pose>-11.82075 -19.38429 17.2198 0 -0 0</pose>
<diffuse>0.7 0.7 0.7 1</diffuse>
<specular>0.2 0.2 0.2 1</specular>
<attenuation>
<range>1000</range>
<constant>0.9</constant>
<linear>0.01</linear>
<quadratic>0.001</quadratic>
</attenuation>
<direction>0.3698 0.4 -0.5</direction>
</light>
<model name="ground">
<static>true</static>
<link name="link">
<visual name="visual">
<cast_shadows>false</cast_shadows>
<pose>0 0 0 0 -0 0</pose>
<geometry>
<mesh>
<uri>model://pxdx/meshes/pxdx_visual.dae</uri>
<scale>1 1 1</scale>
</mesh>
</geometry>
</visual>
<collision name="collision">
<pose>0 0 0 0 0 0</pose>
<geometry>
<mesh>
<uri>model://pxdx/meshes/pxdx_collision.stl</uri>
<scale>1 1 1</scale>
</mesh>
</geometry>
</collision>
</link>
</model>
<scene>
<ambient>0.4 0.4 0.4 1</ambient>
<background>0.7 0.7 0.7 1</background>
<shadows>1</shadows>
</scene>
</world>
</sdf>
创作不易,请多支持!