.bashrc の場合 export OPENHRPHOME=$HOME/src/OpenHRP export PATH=/usr/local/OpenHRP/jdk1.5.0_08/bin:$PATH
.cshrc の場合 setenv OPENHRPHOME ${HOME}/src/OpenHRP setenv PATH /usr/local/OpenHRP/jdk1.5.0_08/bin:${PATH}
スクリプト言語Jythonをインストールします. インタプリタも持つオブジェクト指向のスクリプト言語であるpythonを, Javaで実装したものです. OpenHRPを使って,ヒューマノイドのシミュレータや実機を動かすときに, フロントエンドとして使用することができるものです.
which java
と打ち込み,結果が
/usr/local/OpenHRP/jdk1.5.0_08/bin/java
となっていることを確認した上で,
cd ~ikuo/archives/ java jython_21
を実行します(CLASSPATHがカレントディレクトリに通っている必要有り).ダイアログウィンドウが出てきて質問をされます.全て「Next」としていればOKです.
※jythonのホームページ http://www.jython.org/
図.HRP2V |
図.HRP2JSK |
参考図.HRP2W (HRP2Vの前身) |
cd mkdir -p src cd src tar zxvf ~ikuo/archives/OpenHRP-lec08.tar.gz
としてソースツリーを展開.
☆ ☆ ☆
cd ${OPENHRPHOME}/bin/ ls -l lservrcとするとライセンスファイル"lservrc"が, どのファイルへのシンボリックリンクになっているかがわかります.
ln -sf ~ikuo/license/63-67/lservrc ${OPENHRPHOME}/bin/なお,
ls -F ~ikuo/license/とすると,
26-28/ 32/ 37-39/ 44-45/ 48-51/ 56-62/ 69-70/ 79/ 29-30/ 33-35/ 40-42/ 46/ 52/ 63-67/ 71-76/ 80/ 31/ 36/ 43/ 47/ 53-55/ 68/ 77-78/のように表示され,PCの番号の対応がわかります. mechpc26〜mechpc80が使用可能です.
☆ ☆ ☆
cd ${OPENHRPHOME}/bin make clean make ROBOT=HRP2W
として,特にエラーメッセージが出ていないことを確認し,
./Auditor.sh
と実行すると,ヒューマノイドHRP2V(右図)のシミュレーターが起動します.
※HRP2Vを使うために前身であるHRP2Wを指定するのは, HRP2VがまだOpenHRPにサポートされていないため,サポートされているHRP2Wの名前を借りているため.
☆ ☆ ☆
cd ${OPENHRPHOME}/bin make clean # 本来は,make ROBOT=それまで使っていたロボット clean とするのが正解だが・・・. make ROBOT=HRP2JSK
として,特にエラーメッセージが出ていないことを確認し,
./Auditor.sh
と実行すると,ヒューマノイドHRP2JSK(右図)のシミュレーターが起動します.
☆ ☆ ☆
うまく起動しない場合,$OPENHRPHOME/Make.vars をエディタで立ち上げ,
# Jython installed directory JYTHON_DIR = $(HOME)/jython-2.1
という行の$(HOME)の部分を消して,自分のホームディレクトリを/から記入します(例:JYTHON_DIR = /home/ikuo/jython-2.1). 学生は/home/ではない場合があるので,注意が必要です./home06/等の場合があります.
General Robotix 社のオンラインドキュメント
https://www.generalrobotix.com/openhrpsupport/support_main.htm を参考にすること.アクセスするために必要なパスワードは演習中に発表します.
このオンラインドキュメントの Auditorのところ に詳しい説明が記載されています.
cd ~/src/ tar zxvf ~ikuo/archives/sample.tgz
とすると,サンプルプラグインとそれを使用するためのスクリプトファイルが~/src/SamplePlugins20080514/以下に展開されます.~/src/SamplePlugins20080514/script/sample?.py がjython のスクリプト,~/src/SamplePlugins20080514/sample?.cpp がそのプラグインのソースです.
これらのサンプルを実行して,どのような動作が生成されるかを確認してください.
※注意事項:
- プラグインのコンパイルは,~/src/SamplePlugins20080514/ で,make します.
- make した結果は,${OPENHRPHOME}/Controller/IOserver/robot/${ROBOT}/bin/ に出力されます.
- これらのサンプルは,HRP2JSK用です.
- 結果の確認は,スクリプト実行終了後に play ボタンを押すとわかりやすいです.
OpenHRPでは,モデルはVRMLベースで記述します.サンプルのモデルは
$ cat $OPENHRPHOME/etc/box.wrl
で見ることができます.厳密なVRMLとは異なりOpenHRP独自規格ですが,物体の形状定義部分はVRMLであることが確認できます. ここでは新しいモデル
$ cat $OPENHRPHOME/etc/table.wrl
を準備しているので,これを入れるようにします.
$OPENHRPHOME/client/gui2/property/defaut.properties の中の, simulation.model1.url = file://$(simulation.openhrphome)/etc/floor.wrl の下の行に, simulation.model2.id = table simulation.model2.url = file://$(simulation.openhrphome)/etc/table.wrl を追加します.初期位置を変更したい場合, simulation.model2.translation = 0 0 3 #上に3m simulation.model2.rotation = 1 0 0 0 1 0 0 0 1
以降,同様にして3次元モデルを導入したい場合には,
$OPENHRPHOME/etc/
のディレクトリにVRMLを置き,上記のファイルを訂正すれば良い.
様々な運動パターンを生成するために,bodycontol pluginが用意されています.
これは,サンプルと同様にjythonのスクリプトから利用することが可能です.
動作生成スクリプトの記述フォーマット例として,bodysample-HRP2JSK.py 及び,bodysample-HRP2V.py が用意されています.
それぞれ,そのロボットのシミュレータを起動して呼び出してください.
~/src/OpenHRP/jsk/script/にある(~/src/OpenHRP/Controller/IOserver/robot/ロボット名/bin/script/にもあります).
行動の変更は,スクリプトの以下の部分を編集することで可能です.
# # vvvvvv change here vvvvvv # bc.sendMsg(":inverse-kinematics :rarm 0.2 -0.3 0.2 0 -90 20 4.0") bc.sendMsg(":inverse-kinematics :larm 0.2 0.3 0.2 0 -90 -20 4.0") bc.sendMsg(":wait-interpolation") bc.sendMsg(":neck-angles 20 20 2.0") bc.sendMsg(":waist-location 0.8 0.2 0 60") bc.sendMsg(":neck-angles 40 20 4.0") bc.sendMsg(":wait-interpolation") bc.sendMsg(":torso-angles 20 20 4.0") bc.sendMsg(":wait-interpolation") # # ^^^^^^ change here ^^^^^^ #
簡単な記法を以下に説明します.
bc.sendMsg(":inverse-kinematics :rarm x y z r p y time")
右手先をロボットの腰座標基準で x, y, z[m], r, p, y[deg]に移動させる.移動する時間をtime[sec]で指定する.
bc.sendMsg(":inverse-kinematics :larm x y z r p y time")
右手先位置指令と同じ.
bc.sendMsg(":neck-angles p y time")
首にピッチ軸,ヨー軸を p, y[deg]にする.角度変更はtime[sec]かけて行う.
bc.sendMsg(":torso-angles p y time")
腰角度を p, y[deg]にする.角度変更はtime[sec]かけて行う.
bc.sendMsg(":waist-location x y z r")
腰の位置が x, y, z[m] 角度をr[deg]にすように,歩行する.現在はz には 0を入れなければならない.
なお,:waist-location は,現在HRP2W・HRP2Vでは使用できない.
bc.sendMsg(":wait-interpolation")
現在実行している動作が終了するのを待つ.
ms.sendMsg(":wait time")
time[sec]待つ.待っている間はスクリプトは次のステップに移動しない.
seq.sendMsg(":joint-angles 0 0 -26 50 -24 0 0 0 -26 50 -24 0 0 0 0 0 20 -10 0 -100 0 -10 0 10 10 0 -25 -80 -10 0 2.0")
とすると全身の関節角度標準姿勢にを2.0[sec]で変更させるようになる.
seq.waitInterpolation()
で終了まで待つ.
seq.sendMsg(":joint-angle LARM_JOINT0 90 0.5") seq.sendMsg(":wait-interpolation")
LARM_JOINT0の部分はAuditorのjointの名前を参考に適宜書き換える
90のところが具体的な角度
0.5のところが何秒間で動くか
bc→seq→bcの順で使いたいとしたら,
bc.start() bcを使った命令 bc.stop() seqを使った命令 bc.start() bc.stop()
というように,必ずbc.stop()をする必要がある.
でないと,ロボットが崩れ落ちる.
bodysample-*.py と同じディレクトリにある,bodysample2-*.py は, bcプラグインとseqプラグインを併用した例なので,参考にすると良い.
システムプラグインの,dynamicsプラグインは,逆運動学計算の機能を提供し ている. General Robotix のオンラインマニュアルの, 2.3.8 dynamicsの節を参照して,試してみても良いだろう.
x y z thetaのように回転軸(x y z)と回転角度thetaで表現する.回転行列ではないので注意.
bodysample-HRP2JSK.pyの中の,
use_st=1
の部分を,
use_st=0
にすることで,歩行時の安定化プラグインであるstabilizer(st) の使用・不使用を切り替えることが可能です. stの有無によってシミュレーションの結果が変化するかどうか確認してください.
Auditorのメニューの,
Mode->Simulation->Property->Integration Method
の部分を変更することで,動力学シミュレーション時の 数値積分手法を変更することが可能です.
Euler->オイラー法.通常時はこれになっています. Runge Kutta->ルンゲ・クッタ法.オイラー法に比べて正確な積分値が得られるが計算時間がかかります. No Sim.->動力学シミュレーションを行わず,ロボットの関節角度時系列および移動のみが再現されます.
No Sim.モードの際には,bodysample-*.pyをベースにする場合はuse_st=0としなければならないことに注意してください. 試行錯誤的に動作を作っている最中は,No Simモードで確認し,最終確認のみ動力学シミュレーションにかけることで,効率的な開発が行えます.
1.面白い動作を作ってTAを笑わせよ.AND/OR 将来ヒューマノイドが役に立ちそうな利用場面を考え,そこでのロボット動作をプログラミングせよ.
2.log pluginを使うと,関節角度やセンサ情報の時系列データを取得することができる.自分の作成した運動のlogをとり,gnuplot等を使って解析せよ.
3.センサ情報に応じて,動作が変更される例を考え,https://www.generalrobotix.com/openhrpsupport/online_manual/manual2/auditor2.htm#_Toc94441112 を参考にスクリプトを作成せよ.
少くとも上のURLにあるサンプルの意味は考えてみること.
4.机や箱など,床以外の3次元物体を登場させ,ヒューマノイドと物理的な相互作用をする動作を作成せよ.
5.stに代わる新しい歩行時の安定化アルゴリズムを考案し,プラグインとして実装せよ.