$ mkdir ArtEcSample
$ cd ArtEcSample
$ vi gen.sh
rtc-template -bcxx --module-name=art_ec_test --module-desc=art ec test component --module-version=1.0.0 --module-vendor=S.Kurihara --module-category=Category --module-comp-type=STATIC --module-act-type=DataFlowComponent --module-max-inst=1
$ sh gen.sh
File "art_ec_test.h" was generated.
File "art_ec_test.cpp" was generated.
File "art_ec_testComp.cpp" was generated.
File "Makefile.art_ec_test" was generated.
File "README.art_ec_test" was generated.
ARTLinux用実行コンテキスト
ARTLinux上でOpenRTM-aist-0.4.0で作成したRTコンポーネントをリアルタイム実行するための方法を解説します。 OpenRTM-aistでは、ローダブルモジュールとして作成した実行コンテキスト(ExecutionContext)を動的にロードし、コンポーネントにバインドすることでRTコンポーネントの挙動を制御することが出来ます。
概要
OpenRTM-aist-0.2.0では、ARTLinuxを使ってRTコンポーネントをリアルタイム化する方法として、以下のような方法が一時的に取られていました。OpenRTM-aist-0.4.0では、コンポーネントの実行主体(≒スレッド)は、ExecutionContextという明示的に分離されたオブジェクトとなっており、上記のような方法ではリアルタイム化することはできません。
手順としては、以下のようになります。ARTLinux用ExecutionContext共有ライブラリの作成
アーカイブのダウンロード
以下から、ARTExecutionContextのソースをダウンロードします。
ビルド
ファイルを適当なディレクトリに解凍し、ビルドを行います。 付属のMakefileは/usr/lib/art_syscalls.oが存在するものとして記述されています。 art_syscalls.oが他の場所にある場合はMakefileを書き換えてください。
*Comp.cpp の書き換え
作成済みのコンポーネントの *Comp.cpp の先頭部分を変更します。
コンポーネントの再コンパイル
コンポーネントを再コンパイルします。
rtc.confの書き換え
rtc.confに以下のように(1)~(4)を追加します。
コンポーネントの実行
ArtExecutionContext.so のコピー
上で作成したARTExecutionContext.soをコンポー ネント実行ディレクトリコピーします。
実行
コンポーネントを実行します。
サンプル
ここでは、ArtExecutionContextを利用した簡単なサンプルを紹介します。(栗原氏提供)
rtc-templateの実行
rtc-templateにてコンポーネントの雛型を生成します。
以下のようにgen.shのようなファイルを生成すると、再度雛型を生成する 際に楽です。
ヘッダファイルの編集
art_ec_test.hのonExecute(),onDeactivate() のコメントを外します。
ソースファイルの編集
今回は、onExecute()内にてgettimeodda()で取得した時間をファイルに書き出 すだけのコンポーネントを作成します。
[art_ec_test.cpp]
*Compファイルの編集
art_ec_testComp.cppのmain()関数内のmanager->setModuleInitProc(MyModuleInit);の 上に以下の1行を追加します。
コンポーネントの実行
ART用ExecutionContext?を利用するためにはARTExecutionContext?.soがコンポーネント実行ディレクトリに在る必要があります。
以下の方法にてコンポーネントを実行後、Activate,DeActivateを行うと cycle.logというファイルができます。
周期データ
以下は、上記コンポーネントにて計測した毎周期の差分時間のデータです。
表示されている値はマイクロ秒です。
このように、ARTLinuxを用いて既存のコンポーネントをリアルタイム化することが出来ます。