Pybullet公式gitリポジトリのサンプルコードを解説するシリーズです(一覧はこちら)。
今回は、loadingBench.pyを解説します。(コードのリンクはこちら)
本コードを実行すると、「モデルの読み込みにかかった時間をログファイルに記録」することができます。
使用している機能
本コードは、以下の機能を使用して「ログの記録の開始」「ログの記録の停止」を実現しています。
ログの記録の開始
startStateLogging
関数を使用することで、ログファイルの記録を開始できます。
timinglog = pybullet.startStateLogging(pybullet.STATE_LOGGING_PROFILE_TIMINGS, logFile)
-
timingLog
:ログのID -
STATE_LOGGING_PROFILE_TIMINGS
:操作がされたタイミングのログを記録するモード- どの処理にどの程度の時間がかかっているかを解析可能
-
logFile
:ログファイル
ログの記録の停止
stopStateLogging
関数を使用することで、ログの記録を停止できます。
pybullet.stopStateLogging(timinglog)
-
timingLog
:記録を停止するログのID
コメントをつけたサンプルコード
サンプルコードにコメントをつけたものが以下になります(もともとあった不要と思われるコメント等については削除しています)
import pybullet as p
import time
import pybullet_data
# PybulletをGUIモードで接続
p.connect(p.GUI)
# Pybulletに関するデータパスを取得
p.setAdditionalSearchPath(pybullet_data.getDataPath())
# シミュレーションをリセット
p.resetSimulation()
# ログの記録を開始
timinglog = p.startStateLogging(p.STATE_LOGGING_PROFILE_TIMINGS, "loadingBenchVR.json")
# レンダリングを無効化
p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 0)
# 床のオブジェクトを生成
print("load plane.urdf")
p.loadURDF("plane.urdf")
# r2d2のオブジェクトを生成
print("load r2d2.urdf")
p.loadURDF("r2d2.urdf", 0, 0, 1)
# キッチンのオブジェクトを生成
print("load kitchen/1.sdf")
p.loadSDF("kitchens/1.sdf")
# プレートのオブジェクトをy座標を変更して100回生成する
print("load 100 times plate.urdf")
for i in range(100):
p.loadURDF("dinnerware/plate.urdf", 0, i, 1)
# レンダリングを有効化
p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 1)
# ログの記録を停止
p.stopStateLogging(timinglog)
print("stopped state logging")
# カメラ画像を取得
p.getCameraImage(320, 200)
while (1):
# シミュレーションを一時刻分進める
p.stepSimulation()