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

1 ответ

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

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

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

Другие вопросы по тегам