Creating RTCs using Configration
on OpenRTM-aist C++ for Winodws
Windows OS上のOpenRTM-aist C++版でコンフィギュレーションの基本的な利用方法を解説します。
▶ 更新履歴
1. はじめに
RTコンポーネント(RTC)を作成するとき、その再利用性は重要な課題となります。
再利用性の低いRTCとはどのようなものか考えてみましょう。
例として、シリアルポートから外部のロボットに通信するRTCを考えます。
このコンポーネントには、おそらくシリアルポートのポート番号が設定されています。
このポート番号は接続するPCやデバイスによって変わってしまいます。
変更されるたびに、コンポーネントのソースコードを編集し、ポート番号を書き換えるのは非常に不便です。
また、全てのユーザに対して、コードの編集を期待をすることは現実的な解決策とはいえません。
このように、ソースコード内に環境に依存して変更される定数を定義することは、そのRTCの再利用性を下げることにつながります。
しかし、環境によって変更される定数を避ける事はできません。
すこし、考えただけでも以下の様な定数が思いつきます。
-
シリアル通信に用いるポート番号、baudrate
-
Webカメラから取得する画像サイズ(Width、Height)
-
ロボットの幾何情報(ホイールベース、車輪直径、関節の軸間距離など)
このような、定数をRTCの外部から変更できれば、そのRTCの再利用性を下げずに済みます。
そこで、コンフィギュレーションという、RTC内部のパラメータをユーザが外部から変更できる仕組みが用意されています。
今回は、このコンフィギュレーションの使用方法を解説します。
それでは早速、コンフィギュレーションを利用したRTコンポーネントを作成してみましょう。
5. おわりに
これでOpenRTM-aist Python版で、コンフィギュレーションの使用方法を学べました。
コンフィギュレーションを使用することで、RTCの再利用性を高めることができます。
環境に依存する定数がある場合は、積極的に使用してください。
今回のサンプルでは、コードを簡略するためにonExecute内でコンフィギュレーション・パラメータを読み込みました。
しかし、システムが実行しているときに値を変えるのは、大抵の場合危険です。
そこで、onActivateのように、システムの休止時にパラメータを読み込み、定数を変更するようにしてください。
3. 動作確認
作成したTestConfiguration RTCを実行し、動作確認を行って下さい。
それでは、作成したRTCの動作を見て行きましょう。
TestConfiguration RTCをActivateすると、下図のようにコンソールに上にコンフィギュレーション・パメータの値が表示されます。
2. コンフィギュレーションを利用したRTCの作成
今回は、コンフィギュレーションのパラメータ値をコンソール上に表示する、TestConfiguration RTCを作成します。
いつものように、RTC Builderを使用して各RTCを作成します。
TestConfigurationのテンプレートの設定は以下のようになります。
-
モジュール名 TestConfiguration
-
ベンダ名 あなたの名前
-
モジュールカテゴリ TEST
-
実行周期 1
-
アクションコールバック
onExecute
-
コンフィグレーション
・名称 mode
データ型 string
デフォルト値 default
・名称 parameter_1
データ型 long
デフォルト値 1
・名称 parameter_2
データ型 long
デフォルト値 2
・名称 parameter_3
データ型 long
デフォルト値 3
・名称 parameter_4
データ型 long
デフォルト値 4
・名称 parameter_5
データ型 long
デフォルト値 5
-
言語 Python
コンフィギュレーションは、コンフィギュレーションタブに切り替えて設定します。
具体的なコンフィギュレーションの設定方法を以下に示します。
①のAddボタンを押して、サービスポートを追加します。
次に、②のテキストボックスにコンフィギュレーション・パラメータの名称を入力します。
そのコンフィギュレーション・パラメータを選択したまま、③のドロップダウンリストからデータ型を選択します。
最後に、デフォルト値を入力することでコンフィギュレーションの設定が行えます。
この作業をパラメータの数だけ繰り返してください。
-
RTC::ReturnCode_t TestConfiguration::onExecute(RTC::UniqueId ec_id)
-
{
-
std::cout << "mode " << m_mode << std::endl;
-
std::cout << "parameter_1 " << m_parameter_1 << std::endl;
-
std::cout << "parameter_2 " << m_parameter_2 << std::endl;
-
std::cout << "parameter_3 " << m_parameter_3 << std::endl;
-
std::cout << "parameter_4 " << m_parameter_4 << std::endl;
-
std::cout << "parameter_5 " << m_parameter_5 << std::endl;
-
-
return RTC::RTC_OK;
-
}
-
3行目
コンフィギュレーション・パラメータ modeの値をコンソールに出力します。
コンフィギュレーション・パラメータは以下のように命名されます。
m_コンフィギュレーション・パラメータの名称
-
4行目
コンフィギュレーション・パラメータ parameter_1の値をコンソールに出力します。
-
5行目
コンフィギュレーション・パラメータ parameter_2の値をコンソールに出力します。
-
6行目
コンフィギュレーション・パラメータ parameter_3の値をコンソールに出力します。
-
7行目
コンフィギュレーション・パラメータ parameter_4の値をコンソールに出力します。
-
8行目
コンフィギュレーション・パラメータ parameter_5の値をコンソールに出力します。
*コンフィギュレーション・パラメータはリードオンリーです。
コンフィギュレーション・パラメータをプログラム内で変更しないでください。
以上のコーディングが終了したら、Releaseモードに変更した後、F7ボタンを押してビルドして下さい。
もしエラーが出た場合は、コードの記述ミスを探して修正して下さい。
無事ビルドできた場合は、~\TestConfiguration\build\src\Releaseに「TestConfigurationComp.exe」が生成されているはずです。
~\TestConfigurationにある「TestConfiguration.conf」と「rtc.conf」を、
実行ファイルがある~\TestConfiguration\build\src\Releaseにコピーして下さい。
これで、TestConfiguration RTCの完成です。
設定後、いつもの様にテンプレートを出力してください。
TestConfiguration.cppの コードを以下に示します。
以下のコードは抜粋となります。生成したテンプレートに当てはめて下さい。

TestConfiguration RTCのコンソールには以下の様に出力されています。
mode default
parameter_1 1
parameter_2 2
parameter_3 3
parameter_4 4
parameter_5 5
このように、コンフィギュレーション・パラメータに設定したデフォルト値が出力されています。
この値は、RT System Editorからも確認できます。
①のTestConfigurationのインスタンスをクリックして下さい。
TestConfigurationのインスタンスを選択すると、Configration Viewタブにコンフィグレーションについて情報が表示されます。
ここでは、②のConfigrationSet defaultが選択され、そのパラメータと値は③に表示されています。
それでは、このコンフィギュレーション・パラメータをRT System Editorから変更してみます。
下図のConfigration Viewタブに注目してください、
各コンフィギュレーション・パラメータは、それぞれ①のようなValueというテキストボックスを備えています。
このテキストボックス内の値を編集し、②の適用ボタンを押してください。
適用ボタンを押すと、変更を適用してよいかダイアログで確認されるので、OKボタンを押して下さい。
これで、コンフィギュレーション・パラメータの値を変更できます。
今回は、全ての値をマイナスにしてみます。
*値を変更するときは、必ず1つずつValueを編集し、適用ボタンを押して下さい。
複数の値をまとめて編集し、適用することはできません。
-
configuration.active_config: mode1
-
-
conf.mode0.mode: mode0
-
conf.mode0.parameter_1: 1
-
conf.mode0.parameter_2: 2
-
conf.mode0.parameter_3: 3
-
conf.mode0.parameter_4: 4
-
conf.mode0.parameter_5: 5
-
-
conf.mode1.mode: mode1
-
conf.mode1.parameter_1: 11
-
conf.mode1.parameter_2: 12
-
conf.mode1.parameter_3: 13
-
conf.mode1.parameter_4: 14
-
conf.mode1.parameter_5: 15
-
-
conf.mode2.mode: mode2
-
conf.mode2.parameter_1: 21
-
conf.mode2.parameter_2: 22
-
conf.mode2.parameter_3: 23
-
conf.mode2.parameter_4: 24
-
conf.mode2.parameter_5: 25
-
1行目
RTC起動時に読み込む、コンフィギュレーションセットを指定します。
ここでは、mode1のコンフィギュレーションセットが起動時に読み込まれます。
-
3-8行目
mode0のコンフィギュレーションセットを定義します。
コンフィギュレーション・パラメータは以下のように定義します。
conf.コンフィギュレーションセット名.コンフィギュレーション・パラメータ名: デフォルト値
-
3行目
以下のような定義を行っています。
コンフィギュレーションセット mode0
コンフィギュレーション・パラメータ mode
デフォルト値 mode
以降の記述も同様に読むことができます。
-
10-15行目
mode1のコンフィギュレーションセットを定義します。
-
17-22行目
mode2のコンフィギュレーションセットを定義します。
これで、設定ファイルが記述できました。
それでは、再度TestConfiguration RTCを実行して動作を確認します。
実行すると、mode1のパラメータセットの値がコンソールに出力されます。



コンフィギュレーション・パラメータの値を変更する度に、下図のようにコンソール上の値が更新されているのがわかります。
このように、コンフィギュレーションを利用することで、RTC内部の値を変更することができました。
ただ、RTC起動時に毎回値を変更したり、多くのパラメータを変更するのは大変です。
次は、このような問題を解決するために、設定ファイルを利用します。

4. 設定ファイルの利用
コンフィギュレーション・パラメータの値を保存したり、まとめて変更するために設定ファイルを利用します。
設定ファイルはRTC Builderでテンプレートを出力したときに、自動でプロジェクトのフォルダ直下に生成されます。
*今回は、先ほど実行ファイルのフォルダにコピーしているので、そこにコピーした設定ファイルを編集してください。
今回は、TestConfiguration.confが設定ファイルです。
設定ファイルは以下のように命名されます。
モジュール名.conf
TestConfiguration.confの末尾に、以下の設定を追記してください。
設定ファイルには、以下のようにコンフィギュレーション・パラメータの値を設定できます。
コンフィギュレーション・パラメータは、複数のモードに分けてまとめて管理することができます。

コンフィギュレーションセットの変更は、RTtem EditorのConfigration Viewから行います。
*現状のRT System Editorでは初期状態では、defaultのコンフィギュレーションセットが選択されているように見えますが、
RTC内では、active_configに設定したコンフィギュレーションセットが選択されています。
①のラジオボタンからコンフィギュレーションセットを選択します。
ここでは、mode2を選択します。
選択後、②の適用ボタンを押して下さい。
ここでも、変更を適用してよいかダイアログで確認されるので、OKボタンを押して下さい。

コンフィギュレーションセットを変更すると、下図のように、複数のパラメータが変わったのがわかります。
このように、コンフィギュレーションセットごとに複数の値を管理することができます。
これで、ロボットや環境ごとに値を変更できるので、RTCの再利用性を確保できます。
また、デフォルト値によく使う値を入れておくことで、RTCの起動時に毎回入力せずに済みます。
設定ファイルは非常に便利なので、コンフィギュレーションを使う場合は積極的に使用してください。
