使用 ros launch 创建一个目录,然后将其路径传递给不同的节点



在运行时(当我调用Roslaunch时),我想在已知目录中创建一个新的子目录,然后将该路径传递到两个不同的节点作为Rosparam。

如何编辑我的.launch文件进行此操作?

例如,我有文件夹~/datacapture。每当我使用Roslaunch时,我都想根据当前时间创建一个子目录(即~/datacacpture/20161129_1352/),然后使用Rosparams将其传递到一些节点。

要进一步解释我想做的事情,这是一个示例roslaunch文件:

<launch>
  <node
    name="node_A"
    pkg="pkg_A"
    type="A"
    output="screen"
  >   
    <param name="dataDumpFolder" value="???" /> 
  </node>
  <node
    name="node_B"
    pkg="pkg_B"
    type="B"
    output="screen"
  >
    <param name="dataDumpFolder" value="???" />
  </node>
</launch>

我想要的是:

<launch>
  #1) create a new folder using current date.
  #2) pass it's filepath into a variable. let's call the variable, NEW_FOLDER_FILE_PATH

  <node
    name="node_A"
    pkg="pkg_A"
    type="A"
    output="screen"
  >   
    <param name="dataDumpFolder" value="NEW_FOLDER_FILE_PATH" />    
  </node>
  <node
    name="node_B"
    pkg="pkg_B"
    type="B"
    output="screen"
  >
    <param name="dataDumpFolder" value="NEW_FOLDER_FILE_PATH" />
  </node>
</launch>

这是无法以任何通用方式的。这也不是一个好主意,因为(a)Roslaunch并不是为此,并且(b)错误处理将很有趣。

如果有任何方法不需要共享文件夹名称,或者如果您可以预先确定并将其传递给启动文件作为参数,或者您可以拥有提供文件名的节点(作为服务或通过闩锁主题),这可能是可取的。

也就是说,在Roslaunch中执行此操作的最佳选择是编写一个小型外壳脚本,该脚本可创建所需的文件夹并将名称打印到STDOUT。这使您可以使用<param name="dataDumpFolder" command="your script" />。您可能需要在使用该值之前删除一些空格。

最新更新