0

在 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 相关的可测量输出。

4

0 回答 0