Merge pull request #1919 from erwincoumans/master
btMultiBody: fix indexing issue causing wrong friction to be reported, remove obsolete BT_PYBULLET_GRPC and PYBULLET_EGL
This commit is contained in:
34
examples/pybullet/examples/contactFriction.py
Normal file
34
examples/pybullet/examples/contactFriction.py
Normal file
@@ -0,0 +1,34 @@
|
||||
import pybullet as p
|
||||
p.connect(p.GUI)
|
||||
useMaximalCoordinates = False
|
||||
p.loadURDF("plane.urdf", useMaximalCoordinates=useMaximalCoordinates )
|
||||
#p.loadURDF("sphere2.urdf",[0,0,1])
|
||||
p.loadURDF("cube.urdf",[0,0,1], useMaximalCoordinates=useMaximalCoordinates )
|
||||
p.setGravity(0,3,-10)
|
||||
while(1):
|
||||
p.stepSimulation()
|
||||
pts = p.getContactPoints()
|
||||
|
||||
print("num pts=",len(pts))
|
||||
totalNormalForce = 0
|
||||
totalFrictionForce = [0,0,0]
|
||||
totalLateralFrictionForce=[0,0,0]
|
||||
for pt in pts:
|
||||
#print("pt.normal=",pt[7])
|
||||
#print("pt.normalForce=",pt[9])
|
||||
totalNormalForce += pt[9]
|
||||
#print("pt.lateralFrictionA=",pt[10])
|
||||
#print("pt.lateralFrictionADir=",pt[11])
|
||||
#print("pt.lateralFrictionB=",pt[12])
|
||||
#print("pt.lateralFrictionBDir=",pt[13])
|
||||
totalLateralFrictionForce[0]+=pt[11][0]*pt[10]+pt[13][0]*pt[12]
|
||||
totalLateralFrictionForce[1]+=pt[11][1]*pt[10]+pt[13][1]*pt[12]
|
||||
totalLateralFrictionForce[2]+=pt[11][2]*pt[10]+pt[13][2]*pt[12]
|
||||
|
||||
|
||||
print("totalNormalForce=",totalNormalForce)
|
||||
print("totalLateralFrictionForce=",totalLateralFrictionForce)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -9704,30 +9704,14 @@ PyMODINIT_FUNC
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
PyInit_pybullet(void)
|
||||
#else
|
||||
#ifdef BT_USE_EGL2
|
||||
initpybullet_egl(void)
|
||||
#else
|
||||
#ifdef BT_PYBULLET_GRPC
|
||||
initpybullet_grpc(void)
|
||||
#else
|
||||
initpybullet(void)
|
||||
#endif //BT_USE_EGL2
|
||||
#endif //BT_PYBULLET_GRPC
|
||||
#endif
|
||||
{
|
||||
PyObject* m;
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
m = PyModule_Create(&moduledef);
|
||||
#else
|
||||
#ifdef BT_USE_EGL2
|
||||
m = Py_InitModule3("pybullet_egl", SpamMethods, "Python bindings for Bullet");
|
||||
#else
|
||||
#ifdef BT_PYBULLET_GRPC
|
||||
m = Py_InitModule3("pybullet_grpc", SpamMethods, "Python bindings for Bullet");
|
||||
#else
|
||||
m = Py_InitModule3("pybullet", SpamMethods, "Python bindings for Bullet");
|
||||
#endif //BT_USE_EGL2
|
||||
#endif //BT_PYBULLET_GRPC
|
||||
#endif
|
||||
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
|
||||
@@ -1232,7 +1232,7 @@ void btMultiBodyConstraintSolver::convertMultiBodyContact(btPersistentManifold*
|
||||
/////setup the friction constraints
|
||||
#define ENABLE_FRICTION
|
||||
#ifdef ENABLE_FRICTION
|
||||
solverConstraint.m_frictionIndex = frictionIndex;
|
||||
solverConstraint.m_frictionIndex = m_multiBodyFrictionContactConstraints.size();
|
||||
|
||||
///Bullet has several options to set the friction directions
|
||||
///By default, each contact has only a single friction direction that is recomputed automatically every frame
|
||||
@@ -1501,10 +1501,14 @@ btScalar btMultiBodyConstraintSolver::solveGroupCacheFriendlyFinish(btCollisionO
|
||||
if ((infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS))
|
||||
{
|
||||
pt->m_appliedImpulseLateral2 = m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex + 1].m_appliedImpulse;
|
||||
} else
|
||||
{
|
||||
pt->m_appliedImpulseLateral2 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
//do a callback here?
|
||||
}
|
||||
}
|
||||
#if 0
|
||||
//multibody joint feedback
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user