Blender一步一步用灰度图生成3D模型用于Gazebo/gzweb

我们经常能在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>

创作不易,请多支持!

猜你喜欢

转载自blog.csdn.net/li4692625/article/details/113799633