如何正确导出一个 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.world
gazebo xxxx/xxx.world
常见问题
在 gazebo 主界面导入带贴图的 sdf 模型时
可以正常添加,但是挪动视角时,Gazebo 会卡死。自然无法继续创建.world 文件。如需创建.world 文件,参考上面的方法
原因分析
这个多半是你的实体模型文件网格面数过多,比如一个曲面 (通常它的体积会在远在 100kb 之上),此时建议考虑使用 blender 或者其他软件对模型进行精简,以减少网格的面数
使用 gazebo 命令无法启动窗口
shell
pkill -9 gzserver
pkill -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 问题。