Pybullet公式gitリポジトリのサンプルコードを解説するシリーズです(一覧はこちら)。
今回は、soccerball.pyを解説します。(コードのリンクはこちら)
本コードを実行すると、スケールの異なる9個のサッカーボールが生成されます。
使用している機能
本コードは、以下の機能を使用して「オブジェクトの生成」を実現しています。
オブジェクトの生成
loadURDF
関数を使用することで、指定したurdfファイルのオブジェクトを生成できます。
objectId = pybullet.loadURDF(urdfFile, position, globalScaling)
-
objectId
:オブジェクトのID -
urdfFile
:オブジェクトのurdfファイル -
position
:オブジェクトを生成する位置 -
globalScaling
:オブジェクトのスケール
今回は、スケールを変えながら9個のボールのオブジェクトを生成しています。
コメントをつけたサンプルコード
サンプルコードにコメントをつけたものが以下になります(もともとあった不要と思われるコメント等については削除しています)
import pybullet as p
import pybullet_data as pd
import time
# PybulletをGUIモードで接続
p.connect(p.GUI)
# Pybulletに関するデータパスを取得
p.setAdditionalSearchPath(pd.getDataPath())
offset = 0
# スケールを変えながらオブジェクトを生成
for scale in range (1,10,1):
# ボールのオブジェクトを生成
ball = p.loadURDF("soccerball.urdf",[offset,0,1], globalScaling=scale*0.1)
# 動力学特性を変更
p.changeDynamics(ball,-1,linearDamping=0, angularDamping=0, rollingFriction=0.001, spinningFriction=0.001)
# ボールのビジュアルを設定
p.changeVisualShape(ball,-1,rgbaColor=[0.8,0.8,0.8,1])
# オフセットを移動させる
offset += 2*scale*0.1
# 床のオブジェクトを生成
p.loadURDF("plane.urdf")
# 重力を設定
p.setGravity(0,0,-10)
# リアルタイムシミュレーションモードに設定
p.setRealTimeSimulation(1)
# Pybulletに接続されている間ループを繰り返す
while p.isConnected():
time.sleep(0.5)