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.)