PR

サーボモータ制御の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のWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

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

サーボモータ制御のRTC作成に挑戦 | Think IT(シンクイット)

Think IT(シンクイット)

サイトに予期せぬエラーが起こりました。しばらくたってから再度お試しください。