在 PyBullet 示例中找到这一行并不罕见:
p.setPhysicsEngineParameter(deterministicOverlappingPairs=1)
“deterministicOverlappingPairs”设置的目的是什么?我为什么要设置它?
我查看了文档,发现此设置与碰撞检测有关。但是,文档中并未解释幕后究竟发生了什么。
下面提供了一个基本脚本,它允许通过将“--dop”参数设置为 0 或 1 来调用它来测试设置。参数被传递到第 11 行的函数中:
import pybullet as p
import pybullet_data
import argparse
from datetime import datetime
numSteps = 500
numObjects = 50
def setupWorld(dop):
p.resetSimulation()
# The line I am interested in
p.setPhysicsEngineParameter(deterministicOverlappingPairs=dop)
p.loadURDF("plane.urdf")
kukaId = p.loadURDF("kuka_iiwa/model_free_base.urdf", [0, 0, 10])
for i in range(p.getNumJoints(kukaId)):
p.setJointMotorControl2(kukaId, i, p.POSITION_CONTROL, force=0)
for i in range(numObjects):
cube = p.loadURDF("cube_small.urdf", [0, i * 0.02, (i + 1) * 0.2])
p.stepSimulation()
p.setGravity(0, 0, -10)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Select run mode')
parser.add_argument('--dop', metavar=1, type=int,
help='Set value for deterministicOverlappingPairs')
args = parser.parse_args()
p.connect(p.GUI, options="--width=1024 --height=768")
p.setAdditionalSearchPath(pybullet_data.getDataPath())
start_time = datetime.now()
setupWorld(args.dop)
for i in range(numSteps):
p.stepSimulation()
print(f"Runtime = {datetime.now()-start_time}")
通过使用命令行参数“--dop 0”和“--dop 1”运行此脚本,我没有注意到运行时的显着变化。
因为,我不知道确定性OverlappingPairs 应该如何影响模拟,所以我无法提供一个示例脚本,该脚本具有与确定性OverlappingPairs 相关的可测量输出。