サーボモータ制御のRTC作成に挑戦

2009年6月23日(火)
菅 佑樹

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) {
    m_piMCs04 = new CiMCs04(); /// iMCs04を初期化
    return RTC::RTC_OK;
}

RTC::ReturnCode_t iMCs04Controller::onDeactivated(RTC::UniqueId ec_id) {
    delete m_piMCs04; /// iMCs04を終了
    return RTC::RTC_OK;
}

RTC::ReturnCode_t iMCs04Controller::onExecute(RTC::UniqueId ec_id) {
    if(m_in1In.isNew()) { /// 入力ポートにデータが来たら……
        m_in1In.read(); /// 入力ポートのデータを読み込み
        float target = m_in1.data; /// 目標角度として読み込み
        m_piMCs04->SetTargetAngleRadians(0, target); /// 目標角度をiMCs04の送信バッファに書き込み
    }

m_piMCs04->Write(); /// 送信バッファのデータをiMCs04に送る
return RTC::RTC_OK;
}

図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ミドルウェア超入門~』毎日コミュニケーションズ

早稲田大学
早稲田大学創造理工学部総合機械工学科助手。博士(工学)。人間とロボットとの物理的な相互作用と飽きに関する研究に従事。その他に木登り・枝打ちロボットや、車椅子搭載型ロボットアームの開発などに携わる。計測自動制御学会RTミドルウェア賞受賞(2008年)。http://www.ysuga.net

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています