运行Drake库卡机器人教程读取.obj文件触发vtkOBJImporter报错如何解决
问题根因
- VTK 7.1.1版本的
vtkOBJImporter组件对OBJ格式的兼容性极差,仅支持最简化的ASCII格式OBJ,只要文件存在非标准字段、特殊编码、不可见字符就会触发解析失败,你遇到的line 495报错就是解析顶点行时遇到了无法识别的内容。 - 常见触发场景包括:OBJ文件带UTF-8 BOM头、顶点行附带颜色/纹理等额外参数、行内使用制表符而非空格分隔数值、使用二进制格式OBJ、数值采用长精度科学计数法表示。
解决方案
第一步:校验OBJ文件格式
用文本编辑器直接打开报错的OBJ文件,执行以下检查:
- 查看文件前三行,确认第一行没有不可见的特殊字符(可以用命令
head -n 1 your_model.obj | hexdump -C校验,如果开头是ef bb bf说明带BOM头,需要删除) - 确认所有以
v开头的顶点行,后面仅跟随3个空格分隔的浮点数,无多余字段 - 确认文件所有分隔符为空格,无制表符、换行符之外的特殊空白字符
第二步:重新导出兼容格式
用MeshLab重新导出OBJ时,严格按照以下配置操作:
- 仅勾选「顶点」「面」两个基础导出选项,取消法向量、纹理坐标、颜色、材质等所有额外选项的勾选
- 编码选择ASCII,不要勾选二进制导出、UTF-8 BOM选项
- 导出后重新测试运行
第三步:替代方案(优先级更高)
OBJ解析的兼容问题在旧版VTK中普遍存在,无需花时间调试OBJ格式,可以直接更换更稳定的网格格式:
- 用MeshLab打开原OBJ文件,直接导出为ASCII格式的PLY文件
- 修改对应SDF文件中网格引用的路径,将后缀改为
.ply - 重新执行命令即可正常运行
长期方案
升级Drake到最新版本,新版Drake已升级到VTK 9+,修复了绝大多数OBJ解析的兼容问题,此类报错会直接消失。
内容的提问来源于stack exchange,提问作者yacotaco
相关产品推荐
相关产品推荐

