OpenHRPを使ってみた
このページはOpenHRP3を使ってみた体験に基づくメモ書きページです。チュートリアルではありません。

基本的に、HRP関係はもとより、動力学シミュレーションも全くの素人です(ロボットは直感で作って動いてから理由を考える派)。
なので、質問されても全く答えられないことが大半です。ある意味、「直感で動かしてそれっぽく動いた」の記録です。

あくまでメモ書きであって、この通りに動くかどうかとかは全く不明、インストール過程なども大きく省略。 メモ書きなら表に出すなよ、という指摘もありますが、いろいろ試すに当たって、ネットにあったメモ書き程度のものでも参考になったことがおおいので、どうせなら、表に出しておこう、程度です。ご注意ください。

ただ、自分でツールとして使いたいから、やっていることはそれなりにまじめです。 用語:
「分散コンポーネント型ロボットシミュレータ」プロジェクトに係わる複数の研究機関、企業が共同で開発したソフトウエア開発・シミュレーションのための統合ソフトウエアプラットフォーム。
公式ページ(の ミラー)
平たく言えば、シミュレータの中でロボットのモデルをつくって、ボタンをぽちっとすれば、多関節のロボットのシミュレートができる。 本来は、HRPシリーズのシミュレーション用に開発されたので、ヒューマノイドロボットのシミュレーションに強い。
また、OpenRTM(RTミドルウエア)を利用して、そのシミュレーション内のロボット制御プログラムを連結できる。 平たく言えば、ロボットのハードとのやりとり部分とロボットの制御系をOpenRTMで繋ぐようにシステム設計をしておくと、ハードとのやりとり部分をシミュレータにそっくり置き換えると、実機を動かさなくても制御系の開発、チェックができる。
もちろん、「現実に忠実なシミュレーションモデル」か「シミュレーションモデル通りに動く実機」がないと、結果は大きく食い違う。 シミュレーションとはそういうもので、実はこのページの執筆者は、ロボットシミュレーションは常に懐疑的に見ていて、「実機が動く」至上主義。 (なのにシミュレータを試そうとしたのは、実機で試行錯誤するには危険なロボットをつくってしまったから)
環境構築の最終目標である「RTミドルウエア」。
RTミドルウエアも規格であって、実装が二つ以上あるらしいが、ここでは産総研開発のOpenRTM-aistをつかう。

一言で言えば、各種OSの上に積む、ネットワーク重視のロボット技術(Robot Technology)用途向けOSの一種。 「ミドル」というのは、基盤となるいわゆるOS部分とアプリケーションの間にあるという意味合い。 データベースなどもミドルウエアの範疇。そういう「間のソフト」の一種として、大規模ロボット制御・運用ソフトウエアを構築するのを効率化/手助け/再利用性向上などを目的として、国家プロジェクトの一部として開発されたシステム。 なお、ロボット技術はいわゆるロボットにとどまらず計測、制御など、ある意味「物理的実世界と関わり実体を持つコンピュータ応用技術」とも言え、その意味でネットワークベースの広域計測システムに使われることもある。

実装面で注目すべきは、機能を「コンポーネント」と呼ぶソフトウエアのモジュールに分解し、これをRTMを通じてネットワーク経由(もちろん、1台のコンピュータ内のローカルなネットもあり)でリンクして動作させること。 これにより

  • 部分ごとに開発が出来る
  • コンポーネントの入出力をしっかり規定することで流用性が増す
  • 一部分だけをバージョンアップできる
  • 実ロボットとシミュレータをつなぎ替えて制御実験することができる(もちろん、相応のシミュレータが必要)
  • 一部機能だけを別コンピュータに飛ばせる。例えばコンピュータのスペック的に1台で動かし切れないときにコンポーネントの一部をネットワークで接続された別のPCに移動させられる。
といったことが可能となる。
インストールに関しては、ファイルをダウンロードしてボタンを押していただけなので、しかも、すでにOpenRTMのインストールなどはしたあとなので、何が正しいかは不明です。

備忘:

  • OpenRTM関係でインストールしたもので関係有りそうなもの:
    OpenRTM-aist-1.0.0-RELEASE_vc9_100212.msi
    OpenRTM-aist-Python-1.0.1.msi
    PyYAML-3.09.win32-py2.6.exe python-2.6.4.msi
  • OpenHRP関係でインストールしたもの:
    OpenHRPSDK3.1.0-Rel-v2-j.msi:コンパイル済みでインストールできる一式
    OpenHRP-3.1.0-Release.zip:ソースからビルドするためのソース一式
    Package-1.2.0.zip:ビルドで必要なツール
    cmake-2.8.4-win32-x86.exe:ビルドで必要なツール
    eclipse342_hrpdependencies_win32_ja_20100602.zip:ビルドで必要なツール
    jdk-6u24-windows-i586.exe:ビルドで必要なツール
OpenHRP3は、OpenHRPSDK3.. をインストールすれば動きますが、自分でソースからビルドする場合はいろいろ必要です。 ただ使ってみる分には、ビルドはいらないと思いますが、微妙な不具合に気づいて、そのあれこれをするために、ソースビルドをしました。
また、その不具合の解消のためのパッチを頂いたので、それを適用したGrxUIを再構築しました。
基本的には、OpenHRPのサイトにある、WindowsにおけるOpenHRP3のインストール(Ver.3.1.0-Release)の通りに進めてできました。
サイトと異なるところで覚えていること:
  • 前もってコンパイル済みバイナリでインストールしておいた
  • コンピュータ名は8文字超えたまま。
  • Visual C++ は Visual Studio 2008のセット(アカデミック)を導入済み。
  • VC++でのインストールは実行しない(すでにバイナリで済み)
  • eclipse342_hrpdependenciesのEclipseを起動。
    プロジェクト→自動ビルドをはずす。
    プロジェクト→クリーン、ビルドを即時開始。
    ※エラー無し、警告184個。
  • パッケージエクスプローラーでMETA-INFのMANIFEST.MFを開く。
    「概要」が開く。
    同ページの右下のエクスポートのエクスポートウイザード→ダイアログが開く。
    宛先が「D:\home\kumagai\OpenHRP-3.1.0-Release\GrxUIonEclipse-project-0.9.8」だったので、そのまま「完了」。
    D:\home\kumagai\OpenHRP-3.1.0-Release\GrxUIonEclipse-project-0.9.8\pluginscom.generalrobotix.ui.grxui_0.9.8.jarができた。
  • com.generalrobotix.ui.grxui_0.9.8.jarをコンパイル済みバイナリを入れたところの、GrxUI\pluginsにコピーした。
  • シミュレーションを繰り返すと「なにか」過去を引きずる。
    1. コントローラRTCで、isNewすると、前回のシミュレーションの一番最後の入力が読めてしまうケースがある。 これをもってデータが来たと思って、操作をwrite()すると、たぶん、1サイクル分の制御遅れが発生する。
      そのため、Activateで初期化した後に、時刻0が読めるまではwhile(1)でから読みした方がいいらしい。
    2. コントローラブリッジでも、なにか、残る。シミュレーション実行時に聞かれる「コントローラブリッジを初期化するか」の問いで、コントローラを修正していない場合などで「いいえ」を選択すると、前回のなにか影響が出る。
      例:初期化→結果1、初期化→結果2、初期化→結果3 はすべて同じ結果になる。
      例:初期化→結果1→初期化しない→結果2→初期化しない→結果3
        初期化→結果4→初期化しない→結果5→初期化しない→結果6
        は、1=4,2=5,3=6になる。
      つまり、初期化からの継続も含めて再現性はあるが、初期化しないと再現性がなくなる。

  • コントローラブリッジは溜まる。初期化してもなくなるわけではなく、プロセスが存続する。 放棄されたブリッジは、ときどき「不正な処理」で落ちることもあるが、残りやすい。残っていると関連するログファイルは消せない。

  • 個々のファイルは、開くときには絶対パスでも、保存されるときは相対パスに修正される。
    ので、1:モデルやコントローラのビルドディレクトリは近くにまとめておいた方が良い。2:まとめてディレクトリをコピペすると、簡単に一式の複製ができるし、たぶん、ZIPで固めて送ることもできる(VCのクリーンとncbの削除はしておいたほうがいい)。

  • 図で、複数の座標軸が出ている画像があるのは、花子フォトレタッチで、各軸の表示の画面キャプチャを合成。
    手順:メニュー→マスク→色の追加、不要な部分(黒)を選択。その後、選択して、コピペして位置あわせ(枠や上部アイコンを残しておくと位置あわせしやすい)。なお、Ctrl-Aでは、マスクは無視されて選択される。

  • 映像出力はビデオフォーマットで「RGB, 24bit ~」を選んで、ffmpegでmpeg4に変換した(をyoutubeとかtwitpicに上げたり)。
    > ffmpeg -i test01.mov -an -vcodec mpeg4 -vb 10000k aaa.mp4 -i test01.mov=入力 -an=音無 -vcoded mpeg4=圧縮はmpeg4 -vb 10000k=出力ビットレート設定(ファイルサイズとの取引) aaa.mp4=出力ファイル なぜか、デフォの16bitではffmpegが認識してくれなかった。
    出力ビットレートはffmpegが自動的に適値にクリップしてくれる。無駄に大きいサイズにしておけば最高画質。 もとのmovファイルに比べて、100分の1近くに小さくなる(このmovは非圧縮?)。
あくまでメモです。AS ISです。
本ページを読む人に想定するレベルとして、
  • OpenRTMのおおざっぱな原理が分かる。
  • 動力学シミュレーションなるものが、いったい何を根拠にどういう目的で行われるのかを知っている。
  • シミュレートしたい対象については、十分に特性や原理を知っている(シミュレートしなくても実機を動かし理解できる)。
です。 つまり、大学学部生が、突然先生からなんかやれ、といわれてやってみるか、というレベルではいきなりは無理です。 ご注意下さい。
繰り返しますが、本ページはメモ書きであって、チュートリアルではありません。
私も素人なので質問を頂いても、まったくお答えできない部分があります。
自分の使う技術は可能な限り中身を理解すべきという信念ではありますが、そろそろ「ブラックボックスを信じてつかってもいいかな」と思う程度に年をとりました。 といいますか、理解するのは不可能な規模です。