0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

【Pybulletサンプル解説】SAT(衝突検出アルゴリズム)を有効化【satCollision.py】

Posted at

Pybullet公式gitリポジトリのサンプルコードを解説するシリーズです(一覧はこちら)。


今回は、satCollision.pyを解説します。(コードのリンクはこちら

本コードを実行すると、SAT(衝突検出アルゴリズム)の有効化された状態で、オブジェクトが生成されます。

※ SAT(Separating Axis Theorem)は複雑な形状の衝突を検出するのに向いている衝突検出アルゴリズムです。

satCollision.gif

使用している機能

本コードは、以下の機能を使用すると「SAT(衝突検出アルゴリズム)の有効化」ができます。

SAT(衝突検出アルゴリズム)の有効化

setPhysicsEngineParameter 関数を使用することで、物理エンジンに関するパラメータを設定できます。

pybullet.setPhysicsEngineParameter(enableSAT)
  • enableSAT:SAT(衝突検出アルゴリズム)を有効化するか(0 or 1

コメントをつけたサンプルコード

サンプルコードにコメントをつけたものが以下になります(もともとあった不要と思われるコメント等については削除しています)

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.)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?