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行目)