61 lines
1.6 KiB
Python
61 lines
1.6 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.) |