NXT Python RTC化.

NXT Python RTC化

以上で、PCからPythonを使用してNXTを制御する準備が整いました。

RtcTemplateなどを使用して、NXTのコンポーネントの雛形を生成してコーディングに取り掛かりたいところです。 NXT PythonはきれいにまとまっているPythonモジュールですが、NXT Pythonのコードを直接RTCの雛形に書き込むのはちょっと待ってください。

サンプルを見てもわかるように、NXT Pythonはロケータ、モータ、センサ等の複数のモジュールから構成されていて、モータやセンサへの細かな機能も制御できるため、アクセス方法も若干煩雑です。

ここは、NXT Python の複数のモジュールをまとめてひとつのインターフェースからアクセスするためのクラスを作ることにします。 これはソフトウエアパターンで言うところのFacadeパターンになります。

 Facade パターンあるいは Facade パターン(ファサード・パターン)とは、GoF(Gang of Four; 4人のギャングたち)によって定義された、コンピュータソフトウェアのデザインパターンの1つである。 Facade とは「窓口」を意味する。関連するクラス群を使用するための手続きを、窓口となる一つのクラスに集約することにより、プログラムの冗長性を無くすことを目的とする。(出典: フリー百科事典『ウィキペディア(Wikipedia)』Facade パターン)

こうした便利クラスを作成すると以下の利点があります。

  • 作成したクラスをRTC以外にも利用できる
  • デバッグが楽になる
    • Facadeクラス単体でデバッグした方がデバッグしやすい
    • 直接RTC化すると、この例で言えば、NXT Pythonの使い方の問題なのか、RTCの使い方の問題なのか切り分けが難しい
  • 変更がしやすくなる
    • Facadeクラスを変更しても、インターフェースを変更しなければRTC側のコードは変える必要がない
    • たとえば、get_xxx()、set_xxx()といった関数の入出力にリミッタをつけたい場合、Facadeクラス側のみの変更で済む
  • NXT以外のデバイスへの変更が容易になる
    • たとえば、NXTの次のバージョンのブロックが出た場合、インターフェースさえ同じであれば、対応が容易になる。

これは、RTCを作成する際全般に言えることです。 対象とするロボットやデバイスなどを、うまくクラス化することで、デバイスの変更や、RTC自体の変更・バージョンアップにも柔軟に対応でき、変更に強いソフトウエアを作ることができます。

決して、onExecute() などで

ioctl(xxxx, xxxx); // UNIX デバイスへの直アクセス inb(xxx); // I/O への直アクセス outb(xxx); // I/O への直アクセス

のようなプリミティブな関数呼び出しをしてはいけません。 理想的には、


 onExecute(ec_id) { // 擬似コード
    if (m_inport.isNew()) {
       retval = m_myrobot.set_actuator(m_inport.read());
       if (retval == fatal_error) return RTC::RTC_ERROR;
    }
    if (myrobot.get_sensor(sensor_data) == true) {
       m_outport.wrtie(sensor_data);
    } else {
       // リードエラーの場合の処理
       if (fatal_error) return RTC::RTC_ERROR;
    }
    return RTC::RTC_OK;
 }


のように、「InPortから値を読んで処理」する関数の呼び出しと、「何らかの処理により値を取得しOutPortから出力」する関数の呼び出しのみからなる、「抽象レベルの高い」コードにするべきです。

ダウンロード

最新バージョン : 2.1.0-RELESE

統計

Webサイト統計
ユーザ数:3399
プロジェクト統計
RTコンポーネント309
RTミドルウエア35
ツール25
文書・仕様書2

OpenRTM@Github

OpenRTM-aist GitHubサイト

ROS

Robot Operating System

Choreonoid

モーションエディタ/シミュレータ

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク

産総研が提供するRTC集

東京オープンソースロボティクス協会