Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

pybulletをJupyter Notebookでつかう その1:とりあえずキューブを動かす

実際のところ

ライブラリ群の読み込み

pybulletは当然として、描画のためにIPython.displayのdisplayとclear_outputよみます。

import pybullet as p
import time
import pybullet_data
from IPython.display import display, clear_output
import matplotlib.pyplot as plt

Pybulletのセットアップ

# PyBulletのセットアップ
physicsClient = p.connect(p.DIRECT)  # GUIなしでシミュレーション
p.setAdditionalSearchPath(pybullet_data.getDataPath())  # デフォルトのデータパスを設定

# 重力の設定
p.setGravity(0, 0, -10)

# 平面の追加
planeId = p.loadURDF("plane.urdf")

# キューブの追加
cubeStartPos = [0,0,1]
cubeStartOrientation = p.getQuaternionFromEuler([0,0,0])
cubeId = p.loadURDF("cube.urdf",cubeStartPos, cubeStartOrientation)

描画

for i in range(100):
    p.stepSimulation()
    cubePos, cubeOrn = p.getBasePositionAndOrientation(cubeId)
    
    # グラフの描画
    plt.figure(figsize=(5,5))
    plt.xlim(-2, 2)
    plt.ylim(-2, 2)
    plt.plot(cubePos[0], cubePos[1], 'bo')  # XとYの位置にキューブをプロット
    
    display(plt.gcf())  # 現在の図を表示
    clear_output(wait=True)  # 次の図を表示する前に出力をクリア
    plt.close()  # 図を閉じる
    time.sleep(0.1)  # 少し待つ

p.disconnect()