Pybullet公式gitリポジトリのサンプルコードを解説するシリーズです(一覧はこちら)。
今回は、load_soft_body.pyを解説します。(コードのリンクはこちら)
本コードを実行すると、ソフトボディのオブジェクトが生成されます。
使用している機能
本コードは、以下の機能を使用して「ソフトボディのオブジェクトの生成」を実現しています。
ソフトボディのオブジェクトの生成
loadSoftBody
関数を使用することで、ソフトボディのオブジェクトを生成できます。
softBodyId = p.loadSoftBody(objectFile)
-
softBodyId
:ソフトボディのオブジェクトのID -
objectFile
:ソフトボディのオブジェクトのファイル
コメントをつけたサンプルコード
サンプルコードにコメントをつけたものが以下になります(もともとあった不要と思われるコメント等については削除しています)
import pybullet as p
from time import sleep
import pybullet_data
# PybulletをGUIモードで接続
physicsClient = p.connect(p.GUI)
# Pybulletに関するデータパスを取得
p.setAdditionalSearchPath(pybullet_data.getDataPath())
# 重力を設定
p.setGravity(0, 0, -10)
# 床のオブジェクトを生成
planeId = p.loadURDF("plane.urdf", [0,0,-2])
# ボックスのオブジェクトをベースリンクを固定した状態で生成
boxId = p.loadURDF("cube.urdf", [0,3,2],useMaximalCoordinates = True)
# ソフトボディのウサギのオブジェクトを生成
bunnyId = p.loadSoftBody("bunny.obj")#.obj")#.vtk")
# リアルタイムシミュレーションを有効化
useRealTimeSimulation = 1
if (useRealTimeSimulation):
p.setRealTimeSimulation(1)
# 床とボックスの動力学情報を取得
print(p.getDynamicsInfo(planeId, -1))
print(p.getDynamicsInfo(boxId, -1))
# ボックスの重量を10kgに変更
p.changeDynamics(boxId,-1,mass=10)
# pybulletが接続されている間、ループを接続
while p.isConnected():
# 重力を設定
p.setGravity(0, 0, -10)
if (useRealTimeSimulation):
sleep(0.01) # Time in seconds.
else:
p.stepSimulation()