Используйте 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>

person user2950785    schedule 30.11.2016    source источник
comment
Похоже, более простым способом было бы написать сценарий оболочки, который создает папку с соответствующим именем, а затем вызывает roslaunch в ссылке параметризованный файл запуска.   -  person mikkola    schedule 30.11.2016


Ответы (1)


Это невозможно ни в каком общем виде. Это также не очень хорошая идея, так как (а) roslaunch не предназначен для этого и (б) обработка ошибок будет интересной.

Если есть какой-либо способ не требовать имя общей папки, или если вы можете заранее определить его и передать в файл запуска в качестве аргумента, или если у вас может быть узел, который предоставляет имя файла (как служба или через заблокированную тему ), это может быть предпочтительнее.

Тем не менее, лучший вариант сделать это в roslaunch — написать небольшой сценарий оболочки, который создает нужную папку и печатает имя в стандартный вывод. Это позволяет вам использовать <param name="dataDumpFolder" command="your script" />. Возможно, вам придется удалить некоторые пробелы перед использованием значения.

person dseifert    schedule 30.11.2016