60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
import pybullet as p
|
|
import pybullet_data
|
|
import time
|
|
|
|
p.connect(p.GUI)
|
|
p.setAdditionalSearchPath(pybullet_data.getDataPath())
|
|
p.loadSDF("stadium.sdf")
|
|
p.setGravity(0, 0, -10)
|
|
objects = p.loadMJCF("mjcf/sphere.xml")
|
|
sphere = objects[0]
|
|
p.resetBasePositionAndOrientation(sphere, [0, 0, 1], [0, 0, 0, 1])
|
|
p.changeDynamics(sphere, -1, linearDamping=0.9)
|
|
p.changeVisualShape(sphere, -1, rgbaColor=[1, 0, 0, 1])
|
|
forward = 0
|
|
turn = 0
|
|
|
|
forwardVec = [2, 0, 0]
|
|
cameraDistance = 1
|
|
cameraYaw = 35
|
|
cameraPitch = -35
|
|
|
|
while (1):
|
|
|
|
spherePos, orn = p.getBasePositionAndOrientation(sphere)
|
|
|
|
cameraTargetPosition = spherePos
|
|
p.resetDebugVisualizerCamera(cameraDistance, cameraYaw, cameraPitch, cameraTargetPosition)
|
|
camInfo = p.getDebugVisualizerCamera()
|
|
camForward = camInfo[5]
|
|
|
|
keys = p.getKeyboardEvents()
|
|
for k, v in keys.items():
|
|
|
|
if (k == p.B3G_RIGHT_ARROW and (v & p.KEY_WAS_TRIGGERED)):
|
|
turn = -0.5
|
|
if (k == p.B3G_RIGHT_ARROW and (v & p.KEY_WAS_RELEASED)):
|
|
turn = 0
|
|
if (k == p.B3G_LEFT_ARROW and (v & p.KEY_WAS_TRIGGERED)):
|
|
turn = 0.5
|
|
if (k == p.B3G_LEFT_ARROW and (v & p.KEY_WAS_RELEASED)):
|
|
turn = 0
|
|
|
|
if (k == p.B3G_UP_ARROW and (v & p.KEY_WAS_TRIGGERED)):
|
|
forward = 1
|
|
if (k == p.B3G_UP_ARROW and (v & p.KEY_WAS_RELEASED)):
|
|
forward = 0
|
|
if (k == p.B3G_DOWN_ARROW and (v & p.KEY_WAS_TRIGGERED)):
|
|
forward = -1
|
|
if (k == p.B3G_DOWN_ARROW and (v & p.KEY_WAS_RELEASED)):
|
|
forward = 0
|
|
|
|
force = [forward * camForward[0], forward * camForward[1], 0]
|
|
cameraYaw = cameraYaw + turn
|
|
|
|
if (forward):
|
|
p.applyExternalForce(sphere, -1, force, spherePos, flags=p.WORLD_FRAME)
|
|
|
|
p.stepSimulation()
|
|
time.sleep(1. / 240.)
|