Pythonによるスクリプト作成¶
前のチュートリアルでは、シミュレーションプロジェクトをXML形式で記述しましたが、Pythonスクリプトを使ってシミュレーションを設定することもできます。
以下はスクリプトの例です:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import hrpsys
import hrpsysext
import commands
openhrp_dir = commands.getoutput("pkg-config --variable=prefix openhrp3.1")
model_dir="file://"+openhrp_dir+"/share/OpenHRP-3.1/sample/model/"
sim = hrpsysext.Simulator()
sim.initViewer()
box = sim.loadBody("box", model_dir+"box.wrl")
box.rootLink().R = [0,0,0]
box2 = sim.loadBody("box2", model_dir+"box2.wrl")
sim.addCollisionCheckPair(box, box2)
sim.initialize()
sim.simulate(1.0)
|
このスクリプトは:
hrpsysライブラリとhrpsysextライブラリをインポート(1-2行目)
pkg-configコマンドを子プロセスとして起動しOpenHRPサンプルフォルダを取得(5-6行目)
シミュレータのロード(8-9行目)
2つの箱を作成し、位置を設定する(10-12行目)
箱の間の干渉チェックを設定する(13行目)
シミュレーションを1秒間実行する(14-15行目)
Pythonスクリプトのみでシミュレーション世界全体を記述することもできます:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import hrpsys
import hrpsysext
sim = hrpsysext.Simulator()
sim.initViewer()
body = sim.createBody("body")
root = body.rootLink()
s1 = root.addCube(0.2, 1.0, 0.2)
s1.diffuse = [1,0,0,1]
child = root.addChildLink("child")
child.b = [0,0.5,0]
child.jointType = "rotate"
child.a = [1,0,0]
child.m = 1.0
child.c = [0,0.5,0]
child.I = [1,0,0,0,1,0,0,0,1]
s2 = child.addCube(0.5, 1.0, 0.1)
s2.b = [0,0.5,0]
s2.diffuse = [0,1,0,1]
sim.initialize()
sim.simulate(3)
|
このスクリプトは:
hrpsysライブラリとhrpsysextライブラリをインポート(1-2行目)
シミュレータをロードする(4-5行目)
プリミティブを使って赤色で箱型のモデルを作成する(7-11行目)
関節を作成し各物理パラメータを設定する(13-19行目)
2つ目の箱を作成し関節で接続する(20-22行目)
シミュレーションを初期化し3秒間実行する(24-25行目)