Во время выполнения (когда я вызываю 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>
Это невозможно каким-либо общим способом. Это также не очень хорошая идея, так как (а) roslaunch не предназначен для этого и (б) обработка ошибок будет интересной.
Если есть какой-либо способ не требовать имя общей папки, или вы можете предварительно определить его и передать его в файл запуска в качестве аргумента, или если у вас может быть узел, который предоставляет имя файла (как служба или через заблокированную тему) ), это может быть предпочтительнее.
Тем не менее, лучший вариант сделать это в roslaunch — это написать небольшой скрипт оболочки, который создает необходимую папку и печатает имя в stdout. Это позволяет вам использовать <param name="dataDumpFolder" command="your script" />
, Возможно, вам придется удалить некоторые пробелы перед использованием значения.
Других решений пока нет …