pybullet: stepSimulation () не эквивалентно setRealTimeSimulation (1) - PullRequest
0 голосов
/ 03 апреля 2020

Я хочу управлять процедурно сгенерированным роботом. Рассмотрим следующий код:

import time
import pybullet as p
import pybullet_data
import sys

physicsClient = p.connect(p.GUI)
p.setPhysicsEngineParameter(enableFileCaching=0)
p.setAdditionalSearchPath(pybullet_data.getDataPath())
p.resetSimulation()
p.setGravity(0, 0, -10)
planeId = p.loadURDF("plane.urdf")
robot = p.loadURDF(sys.argv[1], [0, 0, 2])
p.setRealTimeSimulation(1)
for t in range(200000):
    p.getKeyboardEvents()

p.resetSimulation()
p.setGravity(0, 0, -10)
planeId = p.loadURDF("plane.urdf")
robot = p.loadURDF(sys.argv[1], [0, 0, 2])
p.setRealTimeSimulation(0)
for t in range(200000):
    p.stepSimulation()
    time.sleep(1. / 240.)
p.disconnect()

Если этот код сохранен в test.py, вы можете запустить

python test.py <filename>

, где <filename> - файл URDF.

Первая половина проходит нормально. Вторая половина, мой файл URDF сходит с ума и улетает. Примеры файлов URDF с таким поведением: ссылка на файл URDF ссылка на файл URDF Если вы сохраните файлы URDF по этим ссылкам и запустите тестовый файл, вы увидите причудливое поведение.

Я также пробовал этот код, используя некоторые примеры файлов URDF, предоставленных pybullet, например, их файлы URDF для кубов и гуманоидов, и они, кажется, работают нормально. Должна быть некоторая проблема в обработке физики моих файлов URDF, но я не уверен, почему они должны отличаться.

...