サーボモータ制御のRTC作成に挑戦
RTCの実装
今回も前回同様、onActivated, onDeactivated, onExecuteの3つのイベントハンドラを使います(図3-1)。ヘッダファイル(iMCs04Control.h)とCPPファイル(iMCs04Control.cpp)の上記3つの関数のコメントをはずしてください。
iMCs04を使用するには、UUSBDの知識やiMCs04との通信プロトコルについての知識が必要です。ここで解説するには紙面が足りませんが、私が作成したCiMCs04クラス(iMCs04ClassCode.zip:iMCs04ClassCode.zip)を使えば、簡単にRTCを作成できます。
onActivatedでは、CiMCs04オブジェクトのコンストラクタを呼び出し、iMCs04を初期化します。onDeactivatedでは、デストラクタを呼び出して、デバイスを解放します。
onExecuteでは、入力ポートに来たデータ(TimedFloat型)を目標角度としてiMCs04に渡し、最後にWrite()関数を呼ぶことで、iMCs04本体に送信しています。
詳しくはサンプルコード(iMCs04ControlCompProj.zip:http://dl.impressbm.co.jp/content/99でダウンロードできます)を確認してください。
RTC::ReturnCode_t iMCs04Controller::onActivated(RTC::UniqueId ec_id) { RTC::ReturnCode_t iMCs04Controller::onDeactivated(RTC::UniqueId ec_id) { RTC::ReturnCode_t iMCs04Controller::onExecute(RTC::UniqueId ec_id) { m_piMCs04->Write(); /// 送信バッファのデータをiMCs04に送る |
図3-1:イベントハンドラの実装(抜粋)
-------------------------------------------
図3-2:RCサーボを動かす
RCサーボを動かす
いよいよRCサーボを動かします。iMCs04を接続する前にiXs Researchのサイト(http://www.ixs.co.jp/support/imcs04d.html) からiMCs04用のドライバーをダウンロードし、インストールする必要があります。
このRTCの実行にもテスト用のRTCが必要になります。テスト用のRTCを用意しました(FloatGeneratorCompProj.zip:FloatGeneratorCompProj.zipで ダウンロードし、ビルドしてください)。
今回も「ネームサービス」「RT System Builder(Eclipse)」を起動してからFloatGeneratorとiMCs04Controlの両RTCを起動し、「out」と 「in1」のデータポートを接続します。Activateして、FloatGeneratorに数値(-1.5~+1.5程度)を入力するとモータが動き ます。
いかがでしたでしょうか。実際のロボットを製作するには「手作業」が必要ですが、RTCが提供されていれば細かい通信プロトコルなどを意識せずにアク チュエータの制御が可能です。
このように、すでにC++クラスとして実装されているソフトウエア資産は、最小限の手間でRTCとしてラッピングすることができ、ロボットの世界での再 利用が進みます。これからのロボットには、モータなどのアクチュエータやセンサーのほかにも、画像処理や音声合成・認識、Web検索などのソフトウエアと の連携が強化されることが期待されています。
これを機会に、シンクイット読者の皆さんがお持ちのソフトウエア資産をRTC化することを、検討してはいかがでしょうか?
次週は最終回です。これまで作ってきたRTCを元にロボット・システムを組み立てます。
参考図書:
長瀬 雅之ほか『はじめてのコンポーネント指向ロボットアプリケーション開発 ~RTミドルウェア超入門~』毎日コミュニケーションズ