文章目录
- 一、介绍
- 二、准备网格模型
- 三、将网格模型添加到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的底座。
4、通过File->Export
,将模型导出到名为velodyne_base.dae
的文件中。 5、我们需要在Blender中修改velodyne_base.dae
文件 ,因为单位不正确,并且我们希望网格以原点为中心。
<code class="prism language-powershell has-numbering">blender </code>
6、依次点击File->Import->Collada
,导入velodyne_base.dae
文件。
7、当前单位是毫米,而gazebo的单位是米。模型的坐标轴也不是我们希望的,我们需要其顶部朝向Z轴,即沿x轴旋转90° 8、拉出blender右选项卡(在渲染窗口右上角附近寻找加号)。在Dimensions
此标签下的部分下,将x,y,z分量除以1000。 9、在同一标签中,将模型绕X轴旋转90度。效果参见下图。
10、以此点击File->Export->Collada
,导出我们的模型 11、对Velodyne的顶部模型重复此过程。在FreeCAD上,将“ HDL32E OUTLINE MODEL006”导出为velodyne_top.dae
。还必须平移此网格文件,以使底部位于XY平面上。使用左上方的 Translate
按钮(单击两次以在左下方打开对话框),将模型沿Z轴向下移动-0.06096。
此时,您应该有两个网格文件:velodyne_base.dae
和velodyne_top.dae
。如果以上步骤实在有问题,这里我已经给大家准备好这两个文件了,大家直接复制全文,创建一个新的dae文件黏贴就OK了
三、将网格模型添加到sdf文件中
亭定义了一个模型目录结构,该结构支持独立模型,并能够通过在线模型数据库共享模型。Gazebo模型结构的另一个好处是,它可以方便地组织模型所需的资源,例如网格文件。在本节中,我们将创建Velodyne SDF模型,并在其中添加两个网格文件velodyne_base.dae
和velodyne_top.dae
1、命令行中输入以下命令创建目录。由于Gazebo知道模型路径,因此我们直接将目录放置在~/.gazebo/models
中,这样就不用另外设置了,
<code class="prism language-powershell has-numbering">mkdir ~<span class="token operator">/</span><span class="token punctuation">.</span>gazebo<span class="token operator">/</span>models<span class="token operator">/</span>velodyne_hdl32 </code>
2、创建文件model.config
。用于记录模型需要一些信息。包括引用的模型描述文件(xxx.sdf)
<code class="prism language-powershell has-numbering">gedit ~<span class="token operator">/</span><span class="token punctuation">.</span>gazebo<span class="token operator">/</span>models<span class="token operator">/</span>velodyne_hdl32<span class="token operator">/</span>model<span class="token punctuation">.</span>config </code>
配置文件内容如下;
<?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>
重新加载模型后我们可以看到以下效果:
通过初始化位置来纠正摆放(<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、主体部分同样如此
<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>
最后我们得到了含真实样子的传感器模型了