インストール編を読んで,開発環境を作りましょう.一発でインストールできるツールがあれば良いのですが,著作権の問題などが絡みそうで,怖くて作れません.インストールするべきモジュールはたくさんあります.
んで,ここまでインストールが出来ていれば実は超かんたんです.
VisualC++を使ってRTコンポーネント(以下RTC)を作成しますが,Eclipseを使います.というのもRTCのプログラムコードのテンプレートを作成してくれるツールをEclipseでGUIで使えることと,RTCの起動状態をRtcLinkというツールを使って操作するので,コレがEclipseから使えるという理由からです.
まず,Eclipseを起動します.
Window(ウィンドウ)から,パースペクティブを選択肢,RtcLinkを選択します.これでRtcLinkが使える状態です.
File(ファイル)から,「Open new RT Template Editor」を選びます.これでEclipseにRTC Template Configというビューが出現します.コレを順番に設定していって,プログラムのテンプレートを作成するのです.

まずは超かんたんなコンポーネントを作ってみましょう.
ただ単純にコンソールに文字を出力するだけのプログラムを作成してみましょう.
以下のように設定して下さい.ほかの部分には何も記入しないで下さい.
| Programming language selection | C++(Windows) | |
| モジュール定義 | Module name | PeriodicConsoleOut |
| Module description | Periodic Console Out Component | |
| Module version | 0.0.1 | |
| Module vender | あなたの名前 | |
| Module category | TEST | |
| Component type | COMMUNICATIVE | |
| Component's activity type | PERIODIC | |
| Number of maximum instance | 1 | |
| Output directory | 適当なフォルダを指定してください. | |
ここで「生成」というボタンを押すと「Generate success」というメッセージが出て,指定したフォルダにコンポーネントのテンプレートが生成されています.生成されたファイルは,
の7つのファイルです.このうち「PeriodicConsoleOut.vcproj」というのがVC++のプロジェクトファイルになっていますので,これをオープンします.
今回編集しなくてはならないのは,PeriodicConsoleOut.hとPeriodicConsoleOut.cppのみです.
まずヘッダーファイルの方ですが,onExecute関数のコメントを外します.
// The deactivated action (Active state exit action)
// former rtc_active_exit()
// virtual RTC::ReturnCode_t onDeactivated(RTC::UniqueId ec_id);
// The execution action that is invoked periodically
// former rtc_active_do()
virtual RTC::ReturnCode_t onExecute(RTC::UniqueId ec_id);
// The aborting action when main logic error occurred.
// former rtc_aborting_entry()
// virtual RTC::ReturnCode_t onAborting(RTC::UniqueId ec_id);
つぎにCPPファイルですが,onExecute関数のコメントを外し,コンソールに出力するコードを記入します.
/*
RTC::ReturnCode_t PeriodicConsoleOut::onDeactivated(RTC::UniqueId ec_id)
{
return RTC::RTC_OK;
}
*/
RTC::ReturnCode_t PeriodicConsoleOut::onExecute(RTC::UniqueId ec_id)
{
std::cout << "Hello RT Component!" << std::endl;
return RTC::RTC_OK;
}
/*
RTC::ReturnCode_t PeriodicConsoleOut::onAborting(RTC::UniqueId ec_id)
{
return RTC::RTC_OK;
}
*/
これでOK.あとはビルドして実行してみましょう.
何も文字が表示されないはずです.
そうです.RTCは所詮コンポーネントなので,それを管理するサーバーが動いていないと意味がありません.
そこで,サーバーを実行するのと同時に,サーバーをしていするためのコンフィグファイルの記述が必要になります.
rtc.confというファイルを,vcprojファイルがあるのと同じフォルダに入れてください.生成された実行ファイルを直接実行する人は,実行ファイルと同じフォルダにおいてください.
rtc.confの内容は以下の通り.
corba.nameservers: localhost:2809
exec_cxt.periodic.rate:10
1行目はネームサーバーのIPアドレスとポート番号.デフォルトで2809番のポートです.
2行目はPERIODICなコンポーネントの場合に有効なオプションで,実行頻度(単位はHz).つまり1秒間に10回,onExecute関数が呼ばれるように設定しているはずです.
次にネームサーバーを起動します.スタートメニューからOpenRTM-aistの中のexampleの中に,NameService.batというファイルがあるので,これを実行します.
つぎにEclipseです.まだ起動してますか〜?これでRtcLinkを実行します.NameServiceViewから"Add Name Server"を選択し,"localhost:2809"を指定します.これでネームサーバーが見えました.
そして私たちが作成したPeriodicConsoleOutコンポーネントを起動します.するとRtcLinkの方にPeriodicConsoleOutコンポーネントが追加されたことが分かります.
しかし,この状態ではまだコンソール出力は実行されません.いまコンポーネントは生成直後の"Inactive(非活性)"状態にあります.そこでこのコンポーネントをRtcLinkを使って"Activate(活性化)"します.右クリックで"アクティブにする"を選択すれば簡単に活性化できます.その逆も簡単ですね.
終了時はRtcLinkから非アクティブ化をした後,「終了」を選択して終了させてください.現在の状態では,Exit関数を呼び出す方法が他にありません.
デバッグモードで実行している場合は,RtcLinkから終了させた後,Visual C++の開発環境でも終了処理をする必要があるようです.
いかがですか?コンポーネント作成がかなり簡単であることが分かると思います.今回はPeriodicなコンポーネントで,しかもデータの授受を全く行いませんでしたが,次回はRtcLinkからコンフィグレーションの設定が出来るように,今回のプログラムを拡張してみましょう.
今回作成したファイル群 PeriodicConsoleOut.zip(0.4.1対応)
PeriodicConsoleOut042.zip (0.4.2対応)