如何相对于启动文件引用Yaml文件?

如何相对于启动文件引用Yaml文件?,yaml,ros,launch,Yaml,Ros,Launch,我有一个正在加载yaml文件的启动文件: <launch> <rosparam command="load file="filename.yaml" /> <node pkg="my_package" type="my_package_node" name="my_package_node" /> </launch> 我能找到的最好答案是使用$(find package_name)作为起点: <launch>

我有一个正在加载yaml文件的启动文件:

<launch>
    <rosparam command="load file="filename.yaml" />
    <node pkg="my_package" type="my_package_node" name="my_package_node" />
</launch>


我能找到的最好答案是使用$(find package_name)作为起点:

<launch>
    <rosparam command="load file="$(find package_name)/../../yamlFolder/filename.yaml" />
    <node pkg="my_package" type="my_package_node" name="my_package_node" />
</launch>


我能找到的最好答案是使用$(find package_name)作为起点:

<launch>
    <rosparam command="load file="$(find package_name)/../../yamlFolder/filename.yaml" />
    <node pkg="my_package" type="my_package_node" name="my_package_node" />
</launch>


如果您的yaml文件位于ROS包中,那么我认为在您的答案中使用
find
substitution arg是最干净的方法。如果是在别的地方,我建议用类似的方法

<launch>
  <arg name="yaml_path" default="$(optenv YAML_PATH)"/>
  <arg     if="$(eval yaml_path == '')" name="yaml_file" value="$(env HOME)/some_folder/filename.yaml" />
  <arg unless="$(eval yaml_path == '')" name="yaml_file" value="$(arg yaml_path)/filename.yaml"/>
  <rosparam command="load" file="$(arg yaml_file)"/>
</launch>

如果您的yaml文件位于ROS包中,那么我认为在您的答案中使用
find
substitution arg是最干净的方法。如果是在别的地方,我建议用类似的方法

<launch>
  <arg name="yaml_path" default="$(optenv YAML_PATH)"/>
  <arg     if="$(eval yaml_path == '')" name="yaml_file" value="$(env HOME)/some_folder/filename.yaml" />
  <arg unless="$(eval yaml_path == '')" name="yaml_file" value="$(arg yaml_path)/filename.yaml"/>
  <rosparam command="load" file="$(arg yaml_file)"/>
</launch>

如果您使用的是ROS软件包,则启动文件夹位于软件包So的根文件夹中。
$(查找软件包)
实际上是启动文件之前的一个文件夹。

如果您使用的是ROS软件包,则启动文件夹位于软件包So的根文件夹中。
$(查找软件包)
实际上是启动文件之前的一个文件夹

我们可以为指定节点设置环境变量PWD,例如,我们希望将rviz配置文件传递给rviz,相对路径可以如下所示:

<arg name="rviz_file" value="$(eval env('PWD')+'/config/showme.rviz')"/>
<node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rviz_file)" required="true" />

我们可以为指定的节点设置环境变量PWD,例如,我们希望将rviz配置文件传递给rviz,相对路径可以如下所示:

<arg name="rviz_file" value="$(eval env('PWD')+'/config/showme.rviz')"/>
<node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rviz_file)" required="true" />