top of page

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ボタンを押して、サービスポートを追加します。

次に、②のテキストボックスにコンフィギュレーション・パラメータの名称を入力します。

そのコンフィギュレーション・パラメータを選択したまま、③のドロップダウンリストからデータ型を選択します。

最後に、デフォルト値を入力することでコンフィギュレーションの設定が行えます。

この作業をパラメータの数だけ繰り返してください。

  1. RTC::ReturnCode_t TestConfiguration::onExecute(RTC::UniqueId ec_id)

  2. {

  3.   std::cout << "mode " << m_mode << std::endl;

  4.   std::cout << "parameter_1 " << m_parameter_1 << std::endl;

  5.   std::cout << "parameter_2 " << m_parameter_2 << std::endl;

  6.   std::cout << "parameter_3 " << m_parameter_3 << std::endl;

  7.   std::cout << "parameter_4 " << m_parameter_4 << std::endl;

  8.   std::cout << "parameter_5 " << m_parameter_5 << std::endl;

  9.  

  10.   return RTC::RTC_OK;

  11. }

  • 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を編集し、適用ボタンを押して下さい。

複数の値をまとめて編集し、適用することはできません。

  1. configuration.active_config: mode1

  2.  

  3. conf.mode0.mode: mode0

  4. conf.mode0.parameter_1: 1

  5. conf.mode0.parameter_2: 2

  6. conf.mode0.parameter_3: 3

  7. conf.mode0.parameter_4: 4

  8. conf.mode0.parameter_5: 5

  9.  

  10. conf.mode1.mode: mode1

  11. conf.mode1.parameter_1: 11

  12. conf.mode1.parameter_2: 12

  13. conf.mode1.parameter_3: 13

  14. conf.mode1.parameter_4: 14

  15. conf.mode1.parameter_5: 15

  16.  

  17. conf.mode2.mode: mode2

  18. conf.mode2.parameter_1: 21

  19. conf.mode2.parameter_2: 22

  20. conf.mode2.parameter_3: 23

  21. conf.mode2.parameter_4: 24

  22. 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の起動時に毎回入力せずに済みます。

設定ファイルは非常に便利なので、コンフィギュレーションを使う場合は積極的に使用してください。

bottom of page