在使用新版 Gazebo Sim (gz sim) 加载模型时,最常遇到的报错是Could not resolve file或Unable to find or download file。这通常是因为下载的模型使用了相对路径,而 Gazebo 引擎无法正确解析。
以下是通过手动修改 URI 路径彻底解决该问题的标准流程:
1. 核心原因
Gazebo Sim 在加载模型时,会脱离当前终端的工作目录,去全局的资源路径(即环境变量$GZ_SIM_RESOURCE_PATH)中寻找资源。因此,SDF 文件中直接使用mesh/xxx.dae这种相对路径极易失效。
2. 前置条件:检查环境变量
确保你的模型根目录已正确配置在环境变量中。在终端执行:
echo$GZ_SIM_RESOURCE_PATH注:输出结果中必须包含你存放模型的父目录(例如/home/xx/gazebo_models)。
3. 手动修复步骤
第一步:修复模型定义文件 (model.sdf)
打开报错模型文件夹下的model.sdf,找到<mesh>标签,将相对路径修改为标准的model://协议格式。
修改前:
<uri>mesh/foldable_chair.dae</uri>修改后:
<uri>model://foldable_chair/mesh/foldable_chair.dae</uri>路径解析逻辑:model://+ 模型文件夹名(foldable_chair) + 内部相对路径(mesh/foldable_chair.dae)
第二步:修复世界文件 (myworld.sdf)
如果你的世界文件中也直接引用了该模型,同样需要修改。在世界文件中,只需引用到模型文件夹即可,Gazebo 会自动读取其中的model.sdf。
修改前:
<uri>mesh/foldable_chair.dae</uri>修改后:
<uri>model://foldable_chair</uri>4. 验证与启动
修改完成后运行:
gz sim myworld.sdf避坑指南
- 大小写敏感:Linux 系统对文件名严格区分大小写,请确保 SDF 中填写的
foldable_chair.dae与实际文件名一字不差。 - 名称一致性:
model.config文件中的<name>标签必须与模型文件夹名称、以及 SDF 中model://后面的名称完全一致。 - 保存权限:如果在 Gazebo 界面中点击保存时报错,请检查是否试图将文件保存在系统根目录
/下,请将其保存至用户主目录(如~/)。