Pybullet公式gitリポジトリのサンプルコードを解説するシリーズです(一覧はこちら)。
今回は、satCollision.pyを解説します。(コードのリンクはこちら)
本コードを実行すると、SAT(衝突検出アルゴリズム)の有効化された状態で、オブジェクトが生成されます。
※ SAT(Separating Axis Theorem)は複雑な形状の衝突を検出するのに向いている衝突検出アルゴリズムです。
使用している機能
本コードは、以下の機能を使用すると「SAT(衝突検出アルゴリズム)の有効化」ができます。
SAT(衝突検出アルゴリズム)の有効化
setPhysicsEngineParameter
関数を使用することで、物理エンジンに関するパラメータを設定できます。
pybullet.setPhysicsEngineParameter(enableSAT)
-
enableSAT
:SAT(衝突検出アルゴリズム)を有効化するか(0
or1
)
コメントをつけたサンプルコード
サンプルコードにコメントをつけたものが以下になります(もともとあった不要と思われるコメント等については削除しています)
import pybullet as p
import time
import pybullet_data
# PybulletをGUIモードで接続
p.connect(p.GUI)
# Pybulletに関するデータパスを取得
p.setAdditionalSearchPath(pybullet_data.getDataPath())
# 重力を設定
p.setGravity(0, 0, -10)
# SAT機能を有効化
p.setPhysicsEngineParameter(enableSAT=1)
# キューブのオブジェクトを生成
p.loadURDF("cube_concave.urdf", [0, 0, -25],
globalScaling=50,
useFixedBase=True,
flags=p.URDF_INITIALIZE_SAT_FEATURES)
# 床のオブジェクトを生成
p.loadURDF("cube.urdf", [0, 0, 1], globalScaling=1, flags=p.URDF_INITIALIZE_SAT_FEATURES)
# アヒルのオブジェクトを生成
p.loadURDF("duck_vhacd.urdf", [1, 0, 1], globalScaling=1, flags=p.URDF_INITIALIZE_SAT_FEATURES)
# Pybulletが起動している間、ループを繰り返す
while (p.isConnected()):
# シミュレーションを1時刻分進める
p.stepSimulation()
# 衝突点情報を取得
pts = p.getContactPoints()
time.sleep(1. / 240.)