import pybullet as p import time import math p.connect(p.GUI) planeId = p.loadURDF(fileName="plane.urdf",baseOrientation=[0.25882,0,0,0.96593]) p.loadURDF(fileName="cube.urdf",basePosition=[0,0,2]) cubeId = p.loadURDF(fileName="cube.urdf",baseOrientation=[0,0,0,1],basePosition=[0,0,4]) #p.changeDynamics(bodyUniqueId=2,linkIndex=-1,mass=0.1) p.changeDynamics(bodyUniqueId=2,linkIndex=-1,mass=1.0) p.setGravity(0,0,-10) p.setRealTimeSimulation(0) def drawInertiaBox(parentUid, parentLinkIndex): mass,frictionCoeff, inertia =p.getDynamicsInfo(bodyUniqueId=parentUid,linkIndex=parentLinkIndex, flags = p.DYNAMICS_INFO_REPORT_INERTIA) Ixx = inertia[0] Iyy = inertia[1] Izz = inertia[2] boxScaleX = 0.5*math.sqrt(6*(Izz + Iyy - Ixx) / mass); boxScaleY = 0.5*math.sqrt(6*(Izz + Ixx - Iyy) / mass); boxScaleZ = 0.5*math.sqrt(6*(Ixx + Iyy - Izz) / mass); halfExtents = [boxScaleX,boxScaleY,boxScaleZ] pts = [[halfExtents[0],halfExtents[1],halfExtents[2]], [-halfExtents[0],halfExtents[1],halfExtents[2]], [halfExtents[0],-halfExtents[1],halfExtents[2]], [-halfExtents[0],-halfExtents[1],halfExtents[2]], [halfExtents[0],halfExtents[1],-halfExtents[2]], [-halfExtents[0],halfExtents[1],-halfExtents[2]], [halfExtents[0],-halfExtents[1],-halfExtents[2]], [-halfExtents[0],-halfExtents[1],-halfExtents[2]]] color=[1,0,0] p.addUserDebugLine(pts[0],pts[1],color,1, parentObjectUniqueId=parentUid, parentLinkIndex = parentLinkIndex) p.addUserDebugLine(pts[1],pts[3],color,1, parentObjectUniqueId=parentUid, parentLinkIndex = parentLinkIndex) p.addUserDebugLine(pts[3],pts[2],color,1, parentObjectUniqueId=parentUid, parentLinkIndex = parentLinkIndex) p.addUserDebugLine(pts[2],pts[0],color,1, parentObjectUniqueId=parentUid, parentLinkIndex = parentLinkIndex) p.addUserDebugLine(pts[0],pts[4],color,1, parentObjectUniqueId=parentUid, parentLinkIndex = parentLinkIndex) p.addUserDebugLine(pts[1],pts[5],color,1, parentObjectUniqueId=parentUid, parentLinkIndex = parentLinkIndex) p.addUserDebugLine(pts[2],pts[6],color,1, parentObjectUniqueId=parentUid, parentLinkIndex = parentLinkIndex) p.addUserDebugLine(pts[3],pts[7],color,1, parentObjectUniqueId=parentUid, parentLinkIndex = parentLinkIndex) p.addUserDebugLine(pts[4+0],pts[4+1],color,1, parentObjectUniqueId=parentUid, parentLinkIndex = parentLinkIndex) p.addUserDebugLine(pts[4+1],pts[4+3],color,1, parentObjectUniqueId=parentUid, parentLinkIndex = parentLinkIndex) p.addUserDebugLine(pts[4+3],pts[4+2],color,1, parentObjectUniqueId=parentUid, parentLinkIndex = parentLinkIndex) p.addUserDebugLine(pts[4+2],pts[4+0],color,1, parentObjectUniqueId=parentUid, parentLinkIndex = parentLinkIndex) drawInertiaBox(cubeId,-1) t=0 while 1: t=t+1 if t > 400: p.changeDynamics(bodyUniqueId=0,linkIndex=-1,lateralFriction=0.01) mass1,frictionCoeff1 =p.getDynamicsInfo(bodyUniqueId=planeId,linkIndex=-1) mass2,frictionCoeff2 =p.getDynamicsInfo(bodyUniqueId=cubeId,linkIndex=-1) print (mass1,frictionCoeff1) print (mass2,frictionCoeff2) time.sleep(1./240.) p.stepSimulation()