在运行时(我称其为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中执行此操作的最佳选择是编写一个小的Shell脚本,该脚本创建所需的文件夹并将名称打印到stdout。这使您可以使用<param name="dataDumpFolder" command="your script" />。使用该值之前,您可能需要删除一些空格。

关于c++ - 使用ros launch创建目录,然后将其路径传递到其他节点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40879344/

10-10 14:09
查看更多