import pybullet as p import time p.connect(p.GUI) p.createCollisionShape(p.GEOM_PLANE) p.createMultiBody(0,0) sphereRadius = 0.05 colSphereId = p.createCollisionShape(p.GEOM_SPHERE,radius=sphereRadius) colBoxId = p.createCollisionShape(p.GEOM_BOX,halfExtents=[sphereRadius,sphereRadius,sphereRadius]) mass = 1 visualShapeId = -1 link_Masses=[1] linkCollisionShapeIndices=[colBoxId] linkVisualShapeIndices=[-1] linkPositions=[[0,0,0.11]] linkOrientations=[[0,0,0,1]] linkInertialFramePositions=[[0,0,0]] linkInertialFrameOrientations=[[0,0,0,1]] indices=[0] jointTypes=[p.JOINT_REVOLUTE] axis=[[0,0,1]] for i in range (3): for j in range (3): for k in range (3): basePosition = [1+i*5*sphereRadius,1+j*5*sphereRadius,1+k*5*sphereRadius+1] baseOrientation = [0,0,0,1] if (k&2): sphereUid = p.createMultiBody(mass,colSphereId,visualShapeId,basePosition,baseOrientation) else: sphereUid = p.createMultiBody(mass,colBoxId,visualShapeId,basePosition,baseOrientation,linkMasses=link_Masses,linkCollisionShapeIndices=linkCollisionShapeIndices,linkVisualShapeIndices=linkVisualShapeIndices,linkPositions=linkPositions,linkOrientations=linkOrientations,linkInertialFramePositions=linkInertialFramePositions, linkInertialFrameOrientations=linkInertialFrameOrientations,linkParentIndices=indices,linkJointTypes=jointTypes,linkJointAxis=axis) p.changeDynamics(sphereUid,-1,spinningFriction=0.001, rollingFriction=0.001,linearDamping=0.0) for joint in range (p.getNumJoints(sphereUid)): p.setJointMotorControl2(sphereUid,joint,p.VELOCITY_CONTROL,targetVelocity=1,force=10) p.setGravity(0,0,-10) p.setRealTimeSimulation(1) p.getNumJoints(sphereUid) for i in range (p.getNumJoints(sphereUid)): p.getJointInfo(sphereUid,i) while (1): keys = p.getKeyboardEvents() print(keys) time.sleep(0.01)