在开发我们的机器人项目时,我们希望混合使用我们自己编写的本地 SDF 文件以及 pydrake/manipulation 包中的文件。我们在操作课程中找到的所有 yaml 文件示例都是以下形式之一:
- add model:
...
file: file://absolute/path/to/file.sdf
...
或者以下形式(魔方示例甚至将SDF文件写入操作包库来使用它)。
- add model:
...
file: package://package_name/path/to/file.sdf
...
因为我们正在使用自己的 SDF 文件进行开发,所以前者似乎是一个更好的选择,但最终我们得到的 yaml 文件如下所示,在 git 中合并版本时很难维护。
- add model:
...
file: file://absolute/path/to/project/on/my/computer/filename.sdf
...
我们当前的技巧是添加一个“gen_scenario_yaml.py”文件,该文件在导入时生成具有相关绝对基本路径的 yaml。另一种选择是写入操作/pydrake 包目录(尽管 git 不会拾取该目录)。 有更优雅的解决方案吗?
我们尝试设置
file://./relative/path/to/file.sdf
形式的路径,但这会引发错误。
我们还有一个临时生成 yaml 文件的 hacky 解决方案,它可以工作,但并不优雅。
是的!您可以通过为文件创建本地包来完成此操作。首先,在所有 SDF 文件所在的同一文件夹中创建一个
package.xml
文件以加载它们。package.xml
文件应如下所示...
<?xml version="1.0"?>
<package>
<name>PACKAGE_NAME_HERE</name>
</package>
然后您应该能够将该文件夹中的任何 SDF 引用到您的 .yaml 文件中,如下所示...
file: package://PACKAGE_NAME_HERE/SDF_NAME_HERE.sdf