在运行时(当我调用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>
答案 0 :(得分:1)
这在任何通用方式都是不可能的。它也不是一个好主意,因为(a)roslaunch不是为此而且(b)错误处理将是有趣的。
如果有任何方法不需要共享文件夹名称,或者您可以预先确定它并将其作为参数传递给启动文件,或者您可以拥有提供文件名的节点(作为服务或通过锁定主题),这可能是更可取的。
也就是说,在roslaunch中执行此操作的最佳选择是编写一个小shell脚本来创建所需的文件夹并将名称输出到stdout。这允许您使用<param name="dataDumpFolder" command="your script" />
。在使用该值之前,您可能需要删除一些空格。