0

実行時 (roslaunch を呼び出すとき) に、既知のディレクトリに新しいサブディレクトリを作成し、そのパスを rosparam として 2 つの異なるノードに渡したいと考えています。

.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>
4

1 に答える 1

1

これは一般的な方法では不可能です。(a) roslaunch はこれを意図したものではなく、(b) エラー処理が興味深いものになるため、これも良い考えではありません。

共有フォルダー名を必要としない方法がある場合、またはそれを事前に決定して起動ファイルに引数として渡すことができる場合、またはファイル名を (サービスとしてまたはラッチされたトピックを介して) 提供するノードを持つことができる場合)、これは好ましいかもしれません。

そうは言っても、roslaunch 内でこれを行うための最良のオプションは、必要なフォルダーを作成し、その名前を stdout に出力する小さなシェル スクリプトを作成することです。これにより、使用できるようになります<param name="dataDumpFolder" command="your script" />。値を使用する前に、空白を削除する必要がある場合があります。

于 2016-11-30T22:14:33.763 に答える