import pybullet as p import time import math p.connect(p.GUI) useMaximalCoordinates = False p.setGravity(0, 0, -10) plane = p.loadURDF("plane.urdf", [0, 0, -1], useMaximalCoordinates=useMaximalCoordinates) p.setRealTimeSimulation(0) velocity = 1 num = 40 p.configureDebugVisualizer(p.COV_ENABLE_GUI, 0) p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 1) #disable this to make it faster p.configureDebugVisualizer(p.COV_ENABLE_TINY_RENDERER, 0) p.setPhysicsEngineParameter(enableConeFriction=1) for i in range(num): print("progress:", i, num) x = velocity * math.sin(2. * 3.1415 * float(i) / num) y = velocity * math.cos(2. * 3.1415 * float(i) / num) print("velocity=", x, y) sphere = p.loadURDF("sphere_small_zeroinertia.urdf", flags=p.URDF_USE_INERTIA_FROM_FILE, useMaximalCoordinates=useMaximalCoordinates) p.changeDynamics(sphere, -1, lateralFriction=0.02) #p.changeDynamics(sphere,-1,rollingFriction=10) p.changeDynamics(sphere, -1, linearDamping=0) p.changeDynamics(sphere, -1, angularDamping=0) p.resetBaseVelocity(sphere, linearVelocity=[x, y, 0]) prevPos = [0, 0, 0] for i in range(2048): p.stepSimulation() pos = p.getBasePositionAndOrientation(sphere)[0] if (i & 64): p.addUserDebugLine(prevPos, pos, [1, 0, 0], 1) prevPos = pos p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 1) while (1): time.sleep(0.01)