|

3.2. モーションエディタ
モーションエディタはモーションを作成するためのツールであり,大きく分けて登録されているモーションを一覧できる画面とモーションを編集するための画面からなる(図3)

図3. モーションエディタ.
モーション一覧画面(図3左)では,各モーションごとにモーション名,モーションの説明が表示され,その右にモーションに対する操作として,編集(Edit),複製(Copy),送信(Send),削除(Delete)の4つのボタンが用意されている.

図4. モーション一覧画面.
モーション名あるいは編集ボタンを押す事で,モーションの編集画面へと移動する.複製ボタンによってモーションの複製が作成され,その際にはモーション名として後ろに新たな数字が連番となるようにつけられる.送信ボタンを押す事でロボットへとモーションが送信され,ロボットによってモーションが実行される.削除ボタンはモーションを削除するが,その際には確認ダイアログが表示され,誤操作を防止している.
モーション一覧画面の最下部には操作メニューとして2つの機能が表示されている.Newは新規モーションの作成であり,Importはモーションのファイルからの取り込みである.

図5. モーション一覧画面操作メニュー
これらのボタンをクリックするとYahoo! User Interfaceを利用したダイアログが表示され,それぞれモーション名とファイル名の入力が促される.なお,モーション名はロボット内で使用するための制限として8文字の英数字でなくてはならない.

図6. モーション名入力ダイアログ.
モーションの編集画面は図7のような画面となっている.

図7. モーション編集画面.
一番上に大きな文字で表示されているのがモーション名で,クリックすることで編集することができる.その下にはモーションの説明が標示されており,これもクリックで編集が可能である(図8).水色の背景色の列がフレームを表し,各関節の角度と変化のスピードを表すフレーム数が表示されている.これらの数字もすべてクリックすることで編集することができる.なお,関節の角度として空白を指定することもでき,その場合は関節の角度を変えないということを意味する.

図8. フレーム編集
フレームの各数字の右には,フレームに対する操作ボタンが並び,左から順に,複製,左右入れ替え,ロボットへ送信,削除を行うことができる.
フレーム表示の下にはフレームの追加として,AddとRecieveの2つのコマンドが並んでいる.Addはすべての指定が空白のフレームが追加され,Recieveは現在のロボットの関節の角度が返される.
さらに,その下にはモーションの操作メニューとして,モーションの送信(Send),初期姿勢へ戻す(Get up),左右入れ替え(Change LR),モーションのローカルへの保存(Export),モーションをロボット内に保存(Upload),モーションリストへ戻る(Back)が用意されている.Uploadはロボット内にモーションを保存することでLuaスクリプトからモーションを呼び出せるようにするために用いられる.
3.3. ロボットからの関節角度の読み込み
モーションの作成は,モーションエディタで直接関節角度を入力するほか,ロボットから関節角度を読み込むことでも可能である.ユーザは図9のようにロボットの関節を手で動かしてポーズを設定することができる.まず,足先のセンサーをクリックして関節を脱力させ(図9左),ポーズを決めた後,再度,足先のセンサーをクリックして関節を固定する(図9右).そのようにしポーズを決めた後で,Receiveボタンを押すことでそのポーズの関節角度を読み込んで1つのフレームを設定できる.
同様にして,いくつかのポーズをフレームとして読み込むことで,パラパラ漫画のように,より直感的にモーションを作成できる.

図9. ポーズの設定
ポーズの設定は,頭,右前足,左前足,右後足,左後足をそれぞれ別個に動かすことで実現される.足を動かす場合は,背中の接触センサーに触れながら足先の肉球センサーをクリックすることで,クリックされた足全体,つまり3つの間接すべてを脱力させることができる.もう一度その肉球センサーをクリックすると,脱力していた関節を固定することができる.頭を動かす場合も同様に,背中の接触センサーに触れながら頭の接触センサーをクリックすることで,首から先の3つの関節を脱力,固定することができる.ただし,どこかの関節グループが脱力している間は,他の関節を脱力することはできない.例えば,右前足と左前足を同時に脱力させることはできない.
3.4. シミュレータ
モーションを作成する際には,モーションの確認をするためにロボットを用いる必要がある.しかし,実機を常に用いることには幾つかの点で問題がある.ひとつ目の理由としてあげられる点は,実機はモーション作成において1時間程度しかバッテリーが持たないということがある.また,過度の連続使用はロボット本体の寿命を縮める結果となる.ふたつ目の理由として,ロボットの台数の問題がある.十分な台数のロボットが確保できていればよいが,しばしばロボットの台数が足りなくなってしまい,実機を用いるしか手段がなくては,その間,作業が中断してしまう.そして,最後に,これが最も大きな欠点であるが,そもそもロボットがなければモーションを作ることも見ることもできない.当然ながらロボットが常に使用できる環境というのは考えられなく,ロボットが使用できないこともしばしばである.しかし,モーションがどんなものであったのか見ることができなくてはスクリプトを作成することもままらない.
そこで,そういったロボットが使用できない環境において,代替手段としてシミュレータによるモーションの作成と確認ができることは重要である.
ロボカップ4足ロボットリーグ用のシミュレータとして,いくつかのものが提案されているが,我々はイタリアのローマ大学によるAIBO 3D Simulatorを使用した.これは市販されているゲームであるアンリアル・トーナメントのゲームエンジンを利用したロボットシミュレータであり,RoboCupにおいてレスキューシミュレーションリーグで大会が開催されているUSARシミュレータを4足ロボットリーグ用へと改造したものである.

図10. 4足ロボットリーグ用USARsim
このロボットシミュレータ上で動作するロボットは,ゲームサーバに対してネットワークを通じて関節の角度を命令する事によって動作する.そこで,我々のモーションエディタで用いているプロトコルを解釈し,それによる関節角度の変化の指示に対して線形補完を行い,一定時間ごとにロボットシミュレータへと指示を送るシミュレータ上のロボットに対するラッパープログラムを作成した.これにより,モーションエディタは接続相手が実機であるかシミュレータ上のロボットであるかを意識することなく使用することができる.
3.5. 歩行エディタ
歩行エディタは歩行のためのパラメータを作成するためのツールである.モーションエディタと同様に登録された歩行を一覧できる画面と歩行パラメータを編集するための画面からなる.(図11)

図11. 歩行エディタ
歩行一覧画面での操作はモーション一覧画面と同様であるので省略する.歩行編集画面では歩行動作のための65個のパラメータを設定することができる.画面下部にはSave(保存),Send(送信),Stop(停止),Download(ローカルにダウンロード)のボタンが並ぶ.
3.6. スクリプトエディタ
我々がこれまでに開発したロボットプログラムでは,AIBO中でスクリプト言語Luaを動作させることが可能である.Luaはブラジルのカトリカ大学で開発されたスクリプト言語であり,軽量で高速に動作することから組み込み用途に向いているという特徴を持つ.
スクリプトエディタはLuaスクリプトの編集を行うためのツールで,作成したスクリプトはその場でロボットへと送信し実行させることができる.(図12)

スクリプト一覧画面 スクリプト表示画面

スクリプト表示画面
図12. スクリプトエディタ
3.7. オブジェクト認識モニタ
オブジェクト認識モニタはロボット内でのオブジェクト認識の様子をモニタリングするツールである.オブジェクト認識の様子のモニタリングは,目の前を通過させたボールがどう見えているかを確認するなど,即時性が重要となる.そこでオブジェクト認識モニタはWebアプリケーションではなく,Processingを使用して作成されたJavaアプレットによって実装され,サーバを介することなく,直接ロボットからUDP通信を用いてオブジェクトの認識結果を受信する.

操作画面
モニタ
図13. オブジェクト認識モニタ
ロボットからのUDP通信はブロードキャストを用いて行われる.もちろん,普段はブロードキャストを行っていないため,オブジェクトの認識結果を受信するためにはブロードキャストを開始する必要がある.そのためのボタンがStart StatusServerである.
ブロードキャストされた情報を可視化するためのツールはProcessingで作成され,別途,JollyPochieSDKの一部として配布されているが,サーバとクライアントが同一マシンであるときは,Monitorボタンを押すことでオブジェクト認識モニタを起動することができる.

図14. オブジェクト認識結果のネットワーク上での流れ
モニタは画面上がロボットのカメラ方向を表し,白い同心円によってロボットからの距離を1 m単位で示している.このツールを用いることで,各オブジェクトが正しい方向と正しい距離に見えているかを容易に調べることができる.
3.8. 自己位置同定モニタ
自己位置同定モニタは,ロボットが認識した各種ランドマークとなっているオブジェクトの情報を元に自己位置の同定を行い,その同定結果とロボット内部での同定結果を比較表示するプロウグラムである.
ロボットに対する操作やプログラムの起動はオブジェクト認識モニタと同様である(図15左).

操作画面 モニタ
図15. 自己位置同定モニタ
ロボット内部で計算された内部状態をロボットから受信できるとなお正確であるが,我々のチームでは自己位置同定に,何百ものパーティクルを使用するパーティクルフィルタを用いているため,それらパーティクルの情報を高速に送受信することは難しい.そこで,クライアントプログラム内でロボットと同じアルゴリズムを用いて自己位置同定を行い,その結果とロボットによる同定結果を比較表示している.
ただし,アルゴリズムは確率的アルゴリズムであるためクライアント内の計算結果とロボット内の計算結果は異なる.結果がどの程度異なるかは逆に同定された自己位置どの程度安定しているかを示し,大きく異なるときにはその原因を調査することになる.
多くの場合,原因は,オブジェクト認識におけるオブジェクトまでの距離推定の間違いであったり,オブジェクトの誤認識である.そこで,ここで自己位置の同定が安定しない場合,前述のオブジェクト認識モニタに戻って,各オブジェクトの認識結果を確認を行ったり,後述するカメラ画像を確認して,色認識が正しく行われているかを確認することになる.
3.9. カメラ画像モニタ
カメラ画像モニタを用いるとAIBOのカメラによって捉えられている画像ならびに,それに対して色認識をおこなった結果を見ることができる(図16).カメラ画像は2秒ごとにリアルタイムに更新される.

カメラ画像 色認識結果
図16. カメラ画像モニタ
色認識には,その時の光量などに合わせて適切な色認識テーブルを用いる必要があり,カメラ画像モニタを用いる事で,用いられている色認識テーブルが適切なものであるかどうかを確認することができる.
このとき,カメラ画像の更新はJavaScriptにより2秒ごとにWebブラウザからWebサーバへと画像を要求することによって行われている.その画像の要求に対して,WebサーバはAIBOと通信しカメラ画像を取得する.ここで,AIBOから送られてくる画像データはWebブラウザによって表示できる形式にはなっていないため,Webサーバ内のプログラムよって一般的な画像形式の一つであるPNG形式へと変換されWebブラウザへと送信される.したがって,WebブラウザはあくまでWebサーバとのみ通信し,ロボットとは直接は通信を行っていない.

図17. カメラ画像のネットワーク上の流れ
Java AppletやFlashなどを埋め込み画像を表示するためには,それらが自分が提供されているWebサーバとだけしか通信できないというセキュリティ上の制約があるが,この方式であれば,その制約も問題とならないため,Java AppletやFlashを用いたより高度なクライアントを作成することも可能である.
3.10. ロボットプログラム
Jolly Pochieのサッカーロボットの構成は図18のようになっている.AIBOのOSであるAperiosでは,並列実行されるオブジェクト間の通信によって処理が進む.特に,OPEN-RではOVirtualRobotというオブジェクトが定義されており,このオブジェクトと通信することでAIBOの各種機能を使用することができる.

図18. フレームワーク.
Jolly Pochieでは,OVirtualRobotとの通信を代表するオブジェクトして,JPObjectというオブジェクトを定義している.個々の機能要素はJPObjectにプラグインされるモジュールとして実装される.JPObjectがOVirtualRobotとの通信の仲立ちをし,動作,画像,センサー,ネットワークなどのイベントが生じたときには,それぞれに対応したモジュールを呼び出すことで処理される.
このような構成にすることで,各モジュール開発の独立性が高められ,また,OPEN-Rの機能を隠蔽し開発を容易なものにしている.その結果,Jolly
Pochieでは,これまでに200以上ものモジュールが作成された.それらモジュールの構成によって何種類もの異なるロボットを得ることができ,サッカーロボット以外にも,写真撮影やレース競技用などの特殊な用途のロボットも用意されている.
本プロジェクトでは,このJolly Pochieのフレームワークを用い,主に通信に関わるモジュールの開発を行った.開発されたモジュールには,以下のものがある.
13. RCMotion.
14.
モーションデータを受信し,再生するモジュール.
15. RCJointAngle.
16.
現在の関節角度を送信するモジュール.
17. RCGaitsMixer.
18.
歩行データを受信し,再生するモジュール.
19. RCLuaScript.
20.
Luaスクリプトを受信し,実行するモジュール.このモジュールはLua編集画面のみな らず,多くの画面から使用されている(モーションの保存,StatusServerの起動など).
21. RCCapture.
22.
画像の送信を行うモジュール.
23. StatusServer.
24. オブジェクト認識結果や自己位置の推定結果などの内部情報をUDPを通してブロードキャストする.
|