RTCGatewayとは?
RTCGatewayはCycling’74社のMax(MAX/MSP)とRTミドルウェアである産業総合技術研究所開発のOpenRTM-aistとの間でデータ交換を行うことができるプラグインです。MaxのExternalオブジェクトとして実装されており、Max側ではRTCオブジェクトとして、RTM側ではRTコンポーネントMAX_MSP_RTCとして扱われます。
Max(MAX/MSP)はシンセサイザーのコントロールのためのビジュアルプログラム環境として開発されましたが、現在はリアルタイム音響処理、映像処理・生成、MIDI・様々なデバイスのコントロールに対応しています。オブジェクトと呼ばれる特定の機能を持った部品同士を線でつなぐ(Patch)ことでプログラミングができるようになっており、音楽表現、舞台演出、メディアアートなどのインタラクティブなシステム開発にとって強力なツールとなっています。対してOpenRTM-aistはコンポーネント志向のロボットシステム開発環境RTミドルウェアの実装です。C++ , Python, Javaで動作し、他の人が作ったコンポーネントを再利用することでロボットシステム開発の効率化を狙っています。
RTCGatewayを導入することでMaxで主にロボット用に開発されたRTコンポーネントを比較的簡単に利用することができます。例えばロボットを用いたメディアアート作品の制作の際、音や映像といったインタフェースとロボット制御との間でのデータ交換を行うことも可能です。
現在、Mac OSX 10.8 Mountain Lion+ Max 6 で動作確認しており、尾形研究室のGithub(https://github.com/ogata-lab/)上で配布しています。
※使い方によってはMaxが強制終了することがあります。自己責任でご利用ください。
RTCGatewayビルドの仕方
Githubからレポジトリをクローンします:
git clone https://github.com/ogata-lab/RTCGateway
RTCGatewayは以下の2つをサブモジュールとして利用しています。
MAX 6のエクスターナルオブジェクト開発SDK(https://github.com/Cycling74/max6-sdk)
Mac環境下でのRTミドルウェア開発SDK(https://github.com/ogata-lab/rtmsdk-mac)
クローンしたディレクトリ内で以下のコマンドを実行してください:
git submodule init git submodule update
問題なくサブモジュールがクローンできたら以下のコマンドでビルドを行います:
./build.sh
build.shと同じディレクトリにRTC.mxoが生成されます。これがMaxのExternalオブジェクトであるRTCオブジェクトの実行ファイルになります。
使い方
クローンしたファイルの中にあるRTC.maxhelpはMaxで開くと対応データ型をすべて使ったサンプルになっています。とりあえず使いたい場合はこれらをコピーしてPatcherに組み込むことができます。以下ではMaxのインストールとRTC.mxoの設定、ポートの追加方法とコンポーネントのアクティブ化について説明します。
Maxが入っていない場合はまずインストールを行います。
http://cycling74.com/
内の[Download Max]よりMax 6をインストールしてください。
ダウンロードしてから30日間はデモ(無料)で使用することができます。
スタートアップよりNew Patcherを選択します
Patcherウィンドウが表示されます。
RTCオブジェクトをPatcherウインドウに配置します。MaxでExternalオブジェクトを使用するためにはオブジェクトが置かれているディレクトリパスをMaxに指定する必要があります。RTC.mxoを任意のディレクトリに置き、そのパスをMaxの[Options]→[File Preferences]に追加してください。
追加後にMaxを再起動する必要があります。
再起動後、BasicからObjectをドラック&ドロップでPatcherウインドウに配置します。
配置されたObjectに「RTC」と入力してください。画像のように候補でRTCオブジェクトが表示されます。
RTCオブジェクトが表示されると、RTシステムエディター上に「MAX_MSP_RTC」が非アクティブ状態で生成されます。このままではデータポートを持っていないので他コンポーネントと通信ができません。そこで、Max側でオブジェクトを配置することでデータポートを作ります。
2013年9月末日現在、RTCGatewayは以下のデータ型に対応しています。
- TimedLong型
- TimedDouble型
- TimedPose2D型
- TimedVelocity2D型
- TimedBooleanSeq型
ここではTimedLong型のインポート、アウトポートを作成します。RTCオブジェクトを配置した状態で、新たにBasicからObjectをPatcherウインドウに配置し「RTC LongIn in0」と入力します。
ここで入力した「RTC LongIn in0」は型とポートの種類を指定する特定の文字列です。フォーマットは
RTC [データ型名] [ポートの種類( In または Out)] [ポート名]
となっており、データ型名は以下のように対応しています。
- TimedLong型 -> Long
- TimedDouble型 -> Double
- TimedPose2D型 -> Pose2D
- TimedVelocity2D型 -> Velocity2D
- TimedBooleanSeq型 -> BooleanSeq
ポートの種類は頭文字が大文字なので注意してください。ここで指定したポート名でがMAX_MSP_RTCが作成され、ポートをつなぐことができるようになります。ここではTimedLong型の「in0」ポートが作られています。
ポートを作成したらMAX_MSP_RTCをアクティブ状態にします。RTCオブジェクトに「activate」メッセージを送るか、RTシステムエディター上の再生ボタンでアクティベーションができます。非アクティブ状態にするときは「deactive」メッセージを入れるかRTシステムエディター上で停止ボタンをクリックしてください。
NAO RTCとの連携
準備
- NAOと連携するRTCをセットアップします
- RTC Gatewayのヘルプを起動して動作テスト
NAOと連携するRTCをセットアップします
NAO RTCをインストールします.セットアップは以下のページを確認してください
http://ogata-lab.jp/ja/tech_ja/749.html
NAO.pyを実行してNAORTCを起動します.
RTC Gatewayに付属しているヘルプを起動
NAO.maxhelpをダブルクリックして起動します.
MAX_MSP_RTC0.rtcをRT System Editorで確認すると,MAX_MSP_RTC0にサービスポートがついています.これをNAOのRTCに接続します.
双方をactive化すれば実行できるようになります.
メッセージをポチリを押して動作を確認してください.
NAOオブジェクトの作り方
MAPのパッチャーにオブジェクトを配置します.RTC Gatewayの約束では,まず,最初に”RTC”と記入します.
NAOのポートを追加するには,NAOと記入しますが,これだけでは動きません.以下のインターフェース名を記入します.
- ALTextToSpeech 音声合成
- ALMotion モーション
- ALBehaviorManager 動作起動・管理
- ALLed LED管理
- ALMemory NAO内のデータ取得・配置
ALTextToSpeech
- say * : “*”としゃべります
ALMotion
- setStiffnesses : 関節の固さを設定します.例えば,首のヨー軸,ピッチ軸の固さを1.0にする場合は,”setStiffnesses HeadYaw HeadPitch 1.0 1.0″のように記述します.関節の名前はNAOのヘルプを参照してください.
- setAngles : 関節の角度を設定します.例えば,首のヨー軸,ピッチ軸を1.0[rad]に回転させ,最大速度の半分で移動させる場合は, “setAngles HeadYaw HeadPitch 1.0 1.0 0.5″とします.
- getAngles : 関節の角度を取得します.取得した関節角は,RTC NAOオブジェクトの下にあるアウトレットから出力されます.
- moveTo : 指定した(x, y, theta)に移動します
- moveToward : 指定した速度 (vx, vy, vtheta)で移動します
- stopMove : 移動を停止します
BehaviorManager
動作を実行します.これはあらかじめChoregraphでBehaviorを対象とするNAOに保存しておいたときに使えるコマンド群です.