python-3.x - PyBullet 中的确定性OverlappingPairs 设置有什么作用?
问题描述
在 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 相关的可测量输出。
解决方案
推荐阅读
- visual-studio - Team Foundation Server Build Agent 缺少一些功能 - 如何添加?
- vue.js - Vue.JS - “历史”和“哈希”路由器?
- python - 对象如何转换为类对象?
- python - 如何在被调用脚本关闭时将关于浏览器窗口保持打开状态的python数据传递回调用脚本
- reactjs - 带有分页的 ReactJS BootstrapTable 不适用于 ExportCSV
- python - 在 if 语句中测试 None
- rust - 具有部分移动错误的结构
- ios - 关注 SwiftUI 中的下一个 TextField/SecureField
- javascript - Javascript 获取变量问题
- python - 如何在给定点数的情况下绘制最佳椭圆?