初めてのRTコンポーネント作成

インストール編を読んで,開発環境を作りましょう.一発でインストールできるツールがあれば良いのですが,著作権の問題などが絡みそうで,怖くて作れません.インストールするべきモジュールはたくさんあります.

んで,ここまでインストールが出来ていれば実は超かんたんです.


VisualC++を使ってRTコンポーネント(以下RTC)を作成しますが,Eclipseを使います.というのもRTCのプログラムコードのテンプレートを作成してくれるツールをEclipseでGUIで使えることと,RTCの起動状態をRtcLinkというツールを使って操作するので,コレがEclipseから使えるという理由からです.


Rtc Template

まず,Eclipseを起動します.

Window(ウィンドウ)から,パースペクティブを選択肢,RtcLinkを選択します.これでRtcLinkが使える状態です.

File(ファイル)から,「Open new RT Template Editor」を選びます.これでEclipseにRTC Template Configというビューが出現します.コレを順番に設定していって,プログラムのテンプレートを作成するのです.

まずは超かんたんなコンポーネントを作ってみましょう.

PERIODICなコンポーネントの作成

Rtc Templateのコンフィグ

ただ単純にコンソールに文字を出力するだけのプログラムを作成してみましょう.

以下のように設定して下さい.ほかの部分には何も記入しないで下さい.

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」というメッセージが出て,指定したフォルダにコンポーネントのテンプレートが生成されています.生成されたファイルは,

VC++による編集

の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.conf)の追加

そうです.RTCは所詮コンポーネントなので,それを管理するサーバーが動いていないと意味がありません.

そこで,サーバーを実行するのと同時に,サーバーをしていするためのコンフィグファイルの記述が必要になります.

rtc.confというファイルを,vcprojファイルがあるのと同じフォルダに入れてください.生成された実行ファイルを直接実行する人は,実行ファイルと同じフォルダにおいてください.

rtc.confの内容は以下の通り.

corba.nameservers: localhost:2809
exec_cxt.periodic.rate:10

1行目はネームサーバーのIPアドレスとポート番号.デフォルトで2809番のポートです.
2行目はPERIODICなコンポーネントの場合に有効なオプションで,実行頻度(単位はHz).つまり1秒間に10回,onExecute関数が呼ばれるように設定しているはずです.

ようやく実行.RtcLinkで活性化!

次にネームサーバーを起動します.スタートメニューからOpenRTM-aistの中のexampleの中に,NameService.batというファイルがあるので,これを実行します.

つぎにEclipseです.まだ起動してますか〜?これでRtcLinkを実行します.NameServiceViewから"Add Name Server"を選択し,"localhost:2809"を指定します.これでネームサーバーが見えました.

そして私たちが作成したPeriodicConsoleOutコンポーネントを起動します.するとRtcLinkの方にPeriodicConsoleOutコンポーネントが追加されたことが分かります.

しかし,この状態ではまだコンソール出力は実行されません.いまコンポーネントは生成直後の"Inactive(非活性)"状態にあります.そこでこのコンポーネントをRtcLinkを使って"Activate(活性化)"します.右クリックで"アクティブにする"を選択すれば簡単に活性化できます.その逆も簡単ですね.

終了時はRtcLinkでどうぞ.

終了時はRtcLinkから非アクティブ化をした後,「終了」を選択して終了させてください.現在の状態では,Exit関数を呼び出す方法が他にありません.

デバッグモードで実行している場合は,RtcLinkから終了させた後,Visual C++の開発環境でも終了処理をする必要があるようです.

まとめ

いかがですか?コンポーネント作成がかなり簡単であることが分かると思います.今回はPeriodicなコンポーネントで,しかもデータの授受を全く行いませんでしたが,次回はRtcLinkからコンフィグレーションの設定が出来るように,今回のプログラムを拡張してみましょう.

今回作成したファイル群 PeriodicConsoleOut.zip(0.4.1対応)
 PeriodicConsoleOut042.zip (0.4.2対応)


RTミドルウェア入門