有没有办法在启动文件中加载的ROS yaml文件中使用环境变量?
例如,
test.launch:
<launch>
<rosparam command="load" file="example.yaml" />
</launch>
example.yaml:
vehicle_name: "${VEHICLE_NAME}_robot"
我知道您可以使用<env>
或<optenv>
标记将环境变量作为参数加载到启动文件中,但是当有很多参数时,定义它们会更加简洁在一个单独的.yaml文件中。有推荐的方法吗?
答案 0 :(得分:0)
不,roslaunch just uses PyYAML's .load
和PyYaml不支持读取yaml文件中的env变量。
您可以创建多个不同名称的yaml文件,并使用启动文件中的env变量有选择地加载它们,例如:
<launch>
<rosparam command="load" file="$(optenv VEHICLE_NAME default_vehicle_name)_example.yaml" />
</launch>
`
答案 1 :(得分:0)
rosparam代码具有属性subst_value
,可在启动时直接添加YAML文本时启用env
,optenv
等替换参数文件。这是以下工作:
<launch>
<!-- works -->
<rosparam subst_value="true">
foo: $(env USER)
</rosparam>
</launch>
然而,在使用外部YAML文件时,不幸的是ROS Kinetic不起作用:
<launch>
<!-- substitution args in conf.yaml are *not* working -->
<rosparam file="/path/to/conf.yaml" subst_value="true" />
</launch>
但有一个好消息:就在几天前,pull request fixing this合并了ROS Lunar,所以该功能很快就会推出!