2016-11-30 264 views
0

在运行时(当我调用roslaunch时),我想在已知的目录中创建一个新的子目录,并将该路径作为rosparam传递给两个不同的节点。使用ros launch创建一个目录,然后将它的路径传递给不同的节点

如何编辑我的.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> 
+2

看起来更简单的方法是编写一个shell脚本来创建具有合适名称的文件夹,然后在[参数化启动文件](http://wiki.ros.org/roslaunch)上调用'roslaunch'/XML/ARG)。 – mikkola

回答

1

这是不可能在任何通用的方式。这也不是一个好主意,因为(a)roslaunch不是为此而设计的,(b)错误处理将会很有趣。

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

也就是说,在roslaunch中做到这一点的最佳选择是编写一个小的shell脚本,用于创建所需的文件夹并将名称输出到stdout。这使您可以使用<param name="dataDumpFolder" command="your script" />。在使用该值之前,您可能需要删除一些空格。

相关问题