ROS YAML文件中的环境变量?

时间:2018-04-13 17:22:23

标签: yaml ros

有没有办法在启动文件中加载的ROS yaml文件中使用环境变量?

例如,

test.launch:

<launch>    
   <rosparam command="load" file="example.yaml" />
</launch>

example.yaml:

vehicle_name: "${VEHICLE_NAME}_robot"

我知道您可以使用<env><optenv>标记将环境变量作为参数加载到启动文件中,但是当有很多参数时,定义它们会更加简洁在一个单独的.yaml文件中。有推荐的方法吗?

2 个答案:

答案 0 :(得分:0)

不,roslaunch just uses PyYAML's .loadPyYaml不支持读取yaml文件中的env变量。

您可以创建多个不同名称的yaml文件,并使用启动文件中的env变量有选择地加载它们,例如:

<launch>    
   <rosparam command="load" file="$(optenv VEHICLE_NAME default_vehicle_name)_example.yaml" />
</launch>

`

答案 1 :(得分:0)

rosparam代码具有属性subst_value,可在启动时直接添加YAML文本时启用envoptenv等替换参数文件。这是以下工作:

<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,所以该功能很快就会推出!