文章目录

  • 一、介绍
  • 二、准备网格模型
  • 三、将网格模型添加到sdf文件中
 

一、介绍

  具有纹理和3D网格的模型可以改善您的视觉体验,更重要的是可以改善环境的真实感。将这些信息提供给视觉处理算法的模拟,摄像机也将从实际模型中受益。   在本节中,我们将使用Velodyne网站上提供的3D网格来改善模型的视觉外观。更多制造商正在提供3D网格,但是有时可能很难找到现有的网格。在这些情况下,您可以尝试创建网格,与建模师合作或直接与制造商联系。   Velodyne 的网站上有HDL-32 的STEP文件。gazebo只能使用STL,OBJ或Collada文件,因此我们必须转换此文件,然后将其添加到模型中。  

二、准备网格模型

  1、在官网中找到并下载STEP模型   2、如果您使用的是Ubuntu,则可以使用以下命令安装freecad:sudo apt-get install freecad,windows下有很多方法,这里就不赘述了。用以下命令打开模型(cd到文件目录)  
freecad HDL32E_Outline_Model.STEP
  3、单击左侧面板Labels & Attributes中的“HDL32 OUTLINE MODEL”来选择Velodyne的底座。   1   4、通过File->Export,将模型导出到名为velodyne_base.dae的文件中。   5、我们需要在Blender中修改velodyne_base.dae文件 ,因为单位不正确,并且我们希望网格以原点为中心。  
blender
  6、依次点击File->Import->Collada,导入velodyne_base.dae文件。   2   7、当前单位是毫米,而gazebo的单位是米。模型的坐标轴也不是我们希望的,我们需要其顶部朝向Z轴,即沿x轴旋转90°   8、拉出blender右选项卡(在渲染窗口右上角附近寻找加号)。在Dimensions 此标签下的部分下,将x,y,z分量除以1000。   9、在同一标签中,将模型绕X轴旋转90度。效果参见下图。   3   10、以此点击File->Export->Collada,导出我们的模型   11、对Velodyne的顶部模型重复此过程。在FreeCAD上,将“ HDL32E OUTLINE MODEL006”导出为velodyne_top.dae。还必须平移此网格文件,以使底部位于XY平面上。使用左上方的 Translate按钮(单击两次以在左下方打开对话框),将模型沿Z轴向下移动-0.06096。   4   此时,您应该有两个网格文件:velodyne_base.daevelodyne_top.dae。如果以上步骤实在有问题,这里我已经给大家准备好这两个文件了,大家直接复制全文,创建一个新的dae文件黏贴就OK了    

三、将网格模型添加到sdf文件中

  亭定义了一个模型目录结构,该结构支持独立模型,并能够通过在线模型数据库共享模型。Gazebo模型结构的另一个好处是,它可以方便地组织模型所需的资源,例如网格文件。在本节中,我们将创建Velodyne SDF模型,并在其中添加两个网格文件velodyne_base.daevelodyne_top.dae   1、命令行中输入以下命令创建目录。由于Gazebo知道模型路径,因此我们直接将目录放置在~/.gazebo/models中,这样就不用另外设置了,  
mkdir ~/.gazebo/models/velodyne_hdl32
  2、创建文件model.config。用于记录模型需要一些信息。包括引用的模型描述文件(xxx.sdf)  
gedit ~/.gazebo/models/velodyne_hdl32/model.config
  配置文件内容如下;  
<?xml version="1.0"?>

<model>
  <name>Velodyne HDL-32</name>
  <version>1.0</version>
  <sdf version="1.5">model.sdf</sdf>

  <author>
    <name>Optional: YOUR NAME</name>
    <email>Optional: YOUR EMAIL</email>
  </author>

  <description>
    A model of a Velodyne HDL-32 LiDAR sensor.
  </description>

</model>
  3、将上一篇velodyne.world 中的内容复制到model.sdf里面,只保留<?xml><sdf> 和 <model>这三个块, 去掉以下部分:  
  • <include>块,该块包含光线和地面两部分
  • <world>标签,注意是标签,不要删除里面内容
  4、启动gazebo选择Insert左侧的标签,然后向下滚动以找到 Velodyne HDL-32。 单击Velodyne HDL-32,然后在渲染窗口中单击鼠标左键以生成模型。   5、在velodyne_hdl32文件夹下创建meshes文件夹并将两个dae文件放入其中,接下来我们编辑sdf文件,在<visual>块中将原本的<cylinder>内容替换为<mesh>  
 <visual name="top_visual">
   <geometry>
     <!-- The mesh tag indicates that we will use a 3D mesh as
          a visual -->
     <mesh>
       <!-- The URI should refer to the 3D mesh. The "model:"
           URI scheme indicates that the we are referencing a Gazebo
           model. -->
       <uri>model://velodyne_hdl32/meshes/velodyne_top.dae</uri>
     </mesh>
   </geometry>
 </visual>
  重新加载模型后我们可以看到以下效果:   5   通过初始化位置来纠正摆放(<pose>标签)  
<visual name="top_visual">
  <!-- Lower the mesh by half the height, and rotate by 90 degrees -->
  <pose>0 0 -0.0376785 0 0 1.5707</pose>
  <geometry>
    <mesh>
      <uri>model://velodyne_hdl32/meshes/velodyne_top.dae</uri>
    </mesh>
  </geometry>
</visual>
  6   6、主体部分同样如此  
<visual name="base_visual">
  <!-- Offset the visual by have the base's height. We are not rotating
       mesh since symmetrical -->
  <pose>0 0 -0.029335 0 0 0</pose>
  <geometry>
    <mesh>
      <uri>model://velodyne_hdl32/meshes/velodyne_base.dae</uri>
    </mesh>
  </geometry>
</visual>
  最后我们得到了含真实样子的传感器模型了   7