如何正确导出一个 gazebo 的 world 文件 
准备工作 
- 一个带有 UV 贴图纹理的.dae文件
- 基于Ubuntu 18.04的gazebo9 (兼容性好一些)
操作流程 
进入 Model Editor 模式 
- 打开 gazebo,进入 Model Editor 模式
导入模型文件 
- 添加路径导入贴好 uv 贴图的.dae 文件,(此时导入进来的文件并无贴图效果)
手动对齐坐标轴 
- 对其坐标轴
SDF模型保存 
- 此时需要先 save as 一个 gazebo 的 model 文件,此时仍然没有贴图效果
- 保存时可以选择 Advanced 模式,填写上模型的版本,作者等信息
最后 exit 退出该模式,否则会丢失先前的工作。
保存 world 文件 
- 此时来到主页面,无需多余的其他操作,保存为一个.world 为后缀的 sdf 文件。
查看 world 文件 
shell
gazebo xxxx/xxx.worldgazebo xxxx/xxx.world常见问题 
在 gazebo 主界面导入带贴图的 sdf 模型时 
可以正常添加,但是挪动视角时,Gazebo 会卡死。自然无法继续创建.world 文件。如需创建.world 文件,参考上面的方法
原因分析
这个多半是你的实体模型文件网格面数过多,比如一个曲面 (通常它的体积会在远在 100kb 之上),此时建议考虑使用 blender 或者其他软件对模型进行精简,以减少网格的面数
使用 gazebo 命令无法启动窗口 
shell
pkill -9 gzserverpkill -9 gzserver保存.world 文件时卡住 
保存时间比较久,需要等一会
Gazebo 加载 world 很慢 
这个问题通常是由于 world 文件中 模型的路径问题导致的
- 将<uri>标签的全局路径修改为model:// + 相对路径
xml
  <mesh>
      <uri>test/meshes/base_link.dae</uri>
      <scale>1 1 1</scale>
  </mesh>  <mesh>
      <uri>test/meshes/base_link.dae</uri>
      <scale>1 1 1</scale>
  </mesh>贴图不显示问题 
打开先前保存的 world 文件,删除其中包含的所有<material>标签,即可正常显示
xml
    <material>
      <lighting>1</lighting>
      <script>
        <uri>file://media/materials/scripts/gazebo.material</uri>
        <name>Gazebo/Grey</name>
      </script>
      <shader type='pixel'/>
    </material>    <material>
      <lighting>1</lighting>
      <script>
        <uri>file://media/materials/scripts/gazebo.material</uri>
        <name>Gazebo/Grey</name>
      </script>
      <shader type='pixel'/>
    </material>blender 导出的.dae 文件在 gazebo 中加载时,颜色会特别暗淡,需要修改一些文件中的参数
xml
    <emission>
        <color sid="emission">1 1 1 1</color>
    </emission>
    <ambient>
        <color sid="ambient">1 1 1 1</color>
    </ambient>    <emission>
        <color sid="emission">1 1 1 1</color>
    </emission>
    <ambient>
        <color sid="ambient">1 1 1 1</color>
    </ambient>贴图闪烁问题 
这个问题,需要切换观察视角到地板的下方,看地板模型是否是一个实体,通常仅仅是一个悬空的平面会出现这样的问题
模型出现掉落,抖动问题 
这个问题通常是惯性系数不正确引起,根据 gazebo 的官方文档,惯性系数矩阵需要借助 meshlab 工具来进行计算
注意
- 使用 import mesh 功能时,导入.stl 这种网格实体格式,不要导入.dae 格式
- 导入的.stl 文件应为闭合的网格,否则会触发 waterlight 的不防水问题,导致无法正确计算惯性系数矩阵。解决方法为,将未封闭的网格封闭后重新导出。参考Issue with volume calculation
- 每个实体模型 (stl) 导出各自的惯性矩阵,不要图省事,导入一个 dae 模型,整体计算,这种极容易出现抖动的问题
- 使用 Filter 下的 Quilty Measure and Computations 中的 compute Geometric Measures 功能
具体操作细节参考如何使用 meshlab 计算模型的惯性矩阵
Reset_world 后模型出现抖动 
- 首先确保惯性系数与 meshlab 计算一致
- gazebo 加载 world 时没有问题,但是 reset world 后赛道模型一直抖动,原因多半是地板 base_link 与 wall_link 模型中的放置位置有重叠部分.(解决方法是在 blender 中重新设置两模型的位置,避免有重叠部分,然后重新导出 stl)
原因
gazebo 首次加载时,模型自上而下掉落放置,而使用 reset_world 时,模型则是按照 world 文件中的预设位置,直接放置,此时如果模型之间有重合部分,即出现刚体之间的 collapse 问题。
 sujie-168
sujie-168