如何找到在ROS中生成文件的程序?

时间:2018-07-26 14:12:17

标签: file ros launch

我的启动文件使用ROS中的文件pivotFiles/art_to_kinect2_1.txt。如何找到生成该文件的程序,以便启动文件可以使用它?

<param name="fileName" value="$(find pivotFiles/art_to_kinect2_1.txt" />

1 个答案:

答案 0 :(得分:0)

find命令只会在您的环境中寻找可用的ROS软件包。因此,如果您的文本文件存储在ROS包中,例如:

/home/user/catkin_ws/src/my_package/pivotFiles/art_to_kinect2_1.txt 

然后,如果您只想将该文件的 path 加载到ROS参数服务器,则可以

<param name="fileName" value="$(find my_package)/pivotFiles/art_to_kinect2_1.txt"/>

或者如果您要加载文件的内容,则可以

<param name="fileContents" command="cat $(find my_package)/pivotFiles/art_to_kinect2_1.txt"/>

如果您的文件不在ROS软件包中,那么我建议同时使用roslaunch substitution argsoptenvargopt_env尝试使用environment variable(如果已设置),如果未使用默认值。例如,您可以

<param name="fileName" value="$(optenv CONFIG_PATH /home/user/some_folder/pivotFiles)/art_to_kinect2_1.txt"/>

然后,您可以根据需要配置环境变量CONFIG_PATH。我通常更喜欢的选项是arg,因为您可以在运行roslaunch时从命令行传递路径。在启动文件中,您可以放置​​

<arg name="config_path" default="/home/user/some_folder/pivotFiles"/>

,然后在param标签中执行

<param name="fileName" value="$(arg config_path)/art_to_kinect2_1.txt"/>

这样的好处是,您可以在命令行上完成

roslaunch my_package my_launch_file.launch config_path:=/home/user/some_other_folder

,这将切换启动文件中使用的配置路径。 opt_env本质上是在做相同的事情,但是通过环境变量,当我可以使用arg将其直接传递到文件时,我通常不希望搞乱它们。