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