<h2>RTCGatewayとは?</h2>
<a href=”https://github.com/ogata-lab/RTCGateway”>RTCGateway</a>は<a href=”http://cycling74.com/”>Cycling’74社</a>のMax(MAX/MSP)とRTミドルウェアである産業総合技術研究所開発の<a href=”http://www.openrtm.org/openrtm/ja”>OpenRTM-aist</a>との間でデータ交換を行うことができるプラグインです。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(<a href=”https://github.com/ogata-lab/”>https://github.com/ogata-lab/</a>)上で配布しています。
<strong>※使い方によってはMaxが強制終了することがあります。自己責任でご利用ください。</strong>
<h2>RTCGatewayビルドの仕方</h2>
Githubからレポジトリをクローンします:
<pre>git clone https://github.com/ogata-lab/RTCGateway</pre>
RTCGatewayは以下の2つをサブモジュールとして利用しています。
MAX 6のエクスターナルオブジェクト開発SDK(https://github.com/Cycling74/max6-sdk)
Mac環境下でのRTミドルウェア開発SDK(https://github.com/ogata-lab/rtmsdk-mac)
クローンしたディレクトリ内で以下のコマンドを実行してください:
<pre>git submodule init
git submodule update</pre>
問題なくサブモジュールがクローンできたら以下のコマンドでビルドを行います:
<pre>./build.sh</pre>
build.shと同じディレクトリにRTC.mxoが生成されます。これがMaxのExternalオブジェクトであるRTCオブジェクトの実行ファイルになります。
<h2>使い方</h2>
クローンしたファイルの中にあるRTC.maxhelpはMaxで開くと対応データ型をすべて使ったサンプルになっています。とりあえず使いたい場合はこれらをコピーしてPatcherに組み込むことができます。以下ではMaxのインストールとRTC.mxoの設定、ポートの追加方法とコンポーネントのアクティブ化について説明します。
Maxが入っていない場合はまずインストールを行います。
<a href=”http://cycling74.com/”>http://cycling74.com/</a>
内の[Download Max]よりMax 6をインストールしてください。
<a href=”http://ogata-lab.jp/wp-content/uploads/2013/08/ようこそ_と_Cycling_74-3.png”><img class=”aligncenter size-medium wp-image-826″ alt=”ようこそ_と_Cycling_74-3″ src=”http://ogata-lab.jp/wp-content/uploads/2013/08/ようこそ_と_Cycling_74-3-300×234.png” width=”300″ height=”234″ /></a>
ダウンロードしてから30日間はデモ(無料)で使用することができます。
スタートアップよりNew Patcherを選択します
<a href=”http://ogata-lab.jp/wp-content/uploads/2013/08/Getting_Started_with_Max6.png”><img class=”aligncenter size-medium wp-image-827″ alt=”Getting_Started_with_Max6″ src=”http://ogata-lab.jp/wp-content/uploads/2013/08/Getting_Started_with_Max6-300×233.png” width=”300″ height=”233″ /></a>
Patcherウィンドウが表示されます。
RTCオブジェクトをPatcherウインドウに配置します。MaxでExternalオブジェクトを使用するためにはオブジェクトが置かれているディレクトリパスをMaxに指定する必要があります。RTC.mxoを任意のディレクトリに置き、そのパスをMaxの[Options]→[File Preferences]に追加してください。
<p style=”text-align: center;”><a href=”http://ogata-lab.jp/wp-content/uploads/2013/08/Menubar_と_File_Preferences_と_Untitled1__unlocked__と_document.png”><img class=”aligncenter wp-image-854″ alt=”Menubar_と_File_Preferences_と_Untitled1__unlocked__と_document” src=”http://ogata-lab.jp/wp-content/uploads/2013/08/Menubar_と_File_Preferences_と_Untitled1__unlocked__と_document.png” width=”550″ height=”204″ /></a></p>
追加後にMaxを再起動する必要があります。
再起動後、BasicからObjectをドラック&ドロップでPatcherウインドウに配置します。
<p style=”text-align: center;”><a href=”http://ogata-lab.jp/wp-content/uploads/2013/08/Untitled1__unlocked__と_Max-3.png”><img class=”aligncenter wp-image-828″ alt=”Untitled1__unlocked__と_Max 3″ src=”http://ogata-lab.jp/wp-content/uploads/2013/08/Untitled1__unlocked__と_Max-3-1024×535.png” width=”573″ height=”300″ /></a></p>
配置されたObjectに「RTC」と入力してください。画像のように候補でRTCオブジェクトが表示されます。
<p style=”text-align: center;”><a href=”http://ogata-lab.jp/wp-content/uploads/2013/08/Untitled1__unlocked_.png”><img class=”aligncenter wp-image-830″ alt=”Untitled1__unlocked_” src=”http://ogata-lab.jp/wp-content/uploads/2013/08/Untitled1__unlocked_.png” width=”311″ height=”274″ /></a></p>
RTCオブジェクトが表示されると、RTシステムエディター上に「MAX_MSP_RTC」が非アクティブ状態で生成されます。このままではデータポートを持っていないので他コンポーネントと通信ができません。そこで、Max側でオブジェクトを配置することでデータポートを作ります。
2013年9月末日現在、RTCGatewayは以下のデータ型に対応しています。
<ol>
<li>TimedLong型</li>
<li>TimedDouble型</li>
<li>TimedPose2D型</li>
<li>TimedVelocity2D型</li>
<li>TimedBooleanSeq型</li>
</ol>
ここではTimedLong型のインポート、アウトポートを作成します。RTCオブジェクトを配置した状態で、新たにBasicからObjectをPatcherウインドウに配置し「RTC LongIn in0」と入力します。
<p style=”text-align: center;”>?<a href=”http://ogata-lab.jp/wp-content/uploads/2013/08/Untitled1__unlocked_1.png”><img class=”aligncenter wp-image-851″ alt=”Untitled1__unlocked_” src=”http://ogata-lab.jp/wp-content/uploads/2013/08/Untitled1__unlocked_1.png” width=”530″ height=”302″ /></a></p>
ここで入力した「RTC LongIn in0」は型とポートの種類を指定する特定の文字列です。フォーマットは
RTC [データ型名] [ポートの種類( In または Out)] [ポート名]
となっており、データ型名は以下のように対応しています。
<ol>
<li>TimedLong型 -> Long</li>
<li>TimedDouble型 -> Double</li>
<li>TimedPose2D型 -> Pose2D</li>
<li>TimedVelocity2D型 -> Velocity2D</li>
<li>TimedBooleanSeq型 -> BooleanSeq</li>
</ol>
ポートの種類は頭文字が大文字なので注意してください。ここで指定したポート名でがMAX_MSP_RTCが作成され、ポートをつなぐことができるようになります。ここではTimedLong型の「in0」ポートが作られています。
<p style=”text-align: center;”><a href=”http://ogata-lab.jp/wp-content/uploads/2013/08/RT_System_Editor_-__-_Eclipse_SDK_と_eclipse_?_eclipse_?_80×24.png”><img class=”aligncenter wp-image-852″ alt=”RT_System_Editor_-__-_Eclipse_SDK_と_eclipse_?_eclipse_?_80×24″ src=”http://ogata-lab.jp/wp-content/uploads/2013/08/RT_System_Editor_-__-_Eclipse_SDK_と_eclipse_?_eclipse_?_80×24.png” width=”515″ height=”277″ /></a></p>
ポートを作成したらMAX_MSP_RTCをアクティブ状態にします。RTCオブジェクトに「activate」メッセージを送るか、RTシステムエディター上の再生ボタンでアクティベーションができます。非アクティブ状態にするときは「deactive」メッセージを入れるかRTシステムエディター上で停止ボタンをクリックしてください。