问题来源:涉及相机方面的仿真,需要创建的一个在特定位置贴有指定图片,如二维码这类的Gazebo模型,具有随意insert的特性。

一.参考案例

  创建这个模型可以参考Gazebo里面beer模型的基本架构。

二.模型文件的几大部分创建和解析

创建文件夹forkboardbbb,包含整个模型的所有文件,其中:

a.model.config:

<?xml version="1.0"?>

<model>
  <name>forkboardbbb</name>//定义gazebo模型插入时候目录显示的名称
  <version>1.0</version>

  <sdf version="1.5">model.sdf</sdf>

  <author>
    <name>ylh</name>
  </author>

  <description>
    forkboardbbb
  </description>
</model>

b.model.sdf:

<?xml version="1.0" ?>
<sdf version="1.5">
  <model name="forkboardbbb">//定义的的是模型在gazebo插入后在model目录下显示的模型名称
    <static>false</static>//false表示该模型在gazebo里面是可以移动的
    <link name='baselink'>
        <pose>0 0 0 0 0 0</pose>
        <inertial>
           <mass>104</mass>
            <pose>0.5 0.6 0.4 0 0 0</pose>//定义该link的重心
            <inertia>
            <ixx>85.8</ixx>
            <ixy>34.2</ixy>
            <ixz>29.4</ixz>
            <iyy>75.4</iyy>
            <iyz>29.5</iyz>
            <izz>89.7</izz>
            </inertia>//定义该link的转动惯量
        </inertial>
            <collision name='collision'>
              <geometry>
		  <mesh>
		    <scale>1 1 1</scale>
		    <uri>model://forkboardbbb/meshes/forkboard112.STL</uri>//启用模型的stl文件,注意stl的大小样式写一定一定要和实际名称一致,否则拿不到的;还有这个文件是要放到  .gazebo/models  目录下面的,方便自己使用(个人习惯)
		  </mesh>
              </geometry>
              <surface>
		 <friction>
		  <ode>
		    <mu>200</mu>
		    <mu2>200</mu2>
		  </ode>
		</friction>
	        <contact>//该标签作用是解决因为添加了一个link来贴图片带来模型抖动问题,不添加的话,模型会一直在慢慢移动甚至更严重
	          <ode>
		   <min_depth>0.001</min_depth>
	          </ode>
	        </contact>
              </surface>
         </collision>
        <visual name='visual'>
          <geometry>
            <mesh>
              <scale>1 1 1</scale>
              <uri>model://forkboardbbb/meshes/forkboard112.STL</uri>
            </mesh>
          </geometry>
          //这里定义的是该link的颜色样式
          <material>
            <script>
              <name>Gazebo/White</name>
              <uri>file://media/materials/scripts/gazebo.material</uri>
            </script>
          </material>
        </visual>
    </link>  

 <!--picture_link-->//这里是添加图片的link
    <joint type="fixed" name="link1joint">//一定要定义该joint,否则图片的位置无法准确定义,这是sdf编写的规则决定的
      <pose>0 0 0 0 0 0</pose>
      <child>link1</child>
      <parent>baselink</parent>
    </joint>
    <link name="link1">
        <pose>0.5 0.044 -0.062 0 0 0</pose>//定义该link的位置,就是决定贴图位置
            <visual name="visual">
               <pose>0 0 0 0 0 0</pose>
              <geometry>
                <box>
                  <size>0.09 0.09 0.09</size>//link的大小决定这图片显示大小
                </box>
              </geometry>
              <material>
               <script>
                  <uri>model://forkboardbbb/materials/scripts1</uri>//图片的配置信息
                  <uri>model://forkboardbbb/materials/textures1</uri>//图片位置路径
                   <name>box_beer/Diffuse</name>//这个一定要跟scripts1里面的box_beer.material里面的第一行名称一致.
               </script>
               </material>
           </visual>
     </link>
  </model>
</sdf>

c.创建一个meshes文件夹,里面存放上面model所使用的.STL文件

d.创建materials文件夹,内含有用于图片配置信息的脚本文件夹scripts1,以及存放图片材料的文件夹textures1,文件夹scrpts1:

box-beer.material:

material box_beer/Diffuse//这个名称会在模型的sdf文件用到
{
  technique
  {
    pass
    {
      texture_unit
      {
        texture box_beer.png//和textures存放的图片名称要一致
        filtering anistropic
        max_anisotropy 16
      }
    }
  }
}

文件夹textures1:

box_beer.png//这里表示的是一张png格式的图片

三.注意事项

1.以上几个文件的名称以及路径在相应的地方匹配上,基本带贴图的模型创建完毕。

2.这个方法可以延长很多例子,比如贴图样式,可调整贴图样式的gazebo模型都适用。

3.有详细内容不理解之处可以评论留言。

4.以上内容来源于“鸿”,本人是搬运加自行见解。