56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
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)
|
|
|