Commit Graph

347 Commits

Author SHA1 Message Date
erwincoumans
fafa939d33 Merge pull request #1579 from lunkhound/parallel-solver-wip3
Multithreaded constraint solver
2018-03-26 17:11:05 -07:00
Lunkhound
e526e48df8 parallel solver: slightly overallocate to reduce how often allocation is needed 2018-03-13 04:19:02 -07:00
Lunkhound
eec478709a parallel solver: small tweaks and fixes 2018-03-06 02:43:59 -08:00
a
86ca7dc2d1 Fix for #1567 2018-03-05 23:25:25 +01:00
Lunkhound
06690e542b fix compile error for GCC 2018-02-27 00:30:45 -08:00
Lunkhound
b8720f2161 parallel solver: various changes
- threading: adding btSequentialImpulseConstraintSolverMt
 - task scheduler: added parallelSum so that parallel solver can compute residuals
 - CommonRigidBodyMTBase: add slider for solver least squares residual and allow multithreading without needing OpenMP, TBB, or PPL
 - taskScheduler: don't wait for workers to sleep/signal at the end of each parallel block
 - parallel solver: convertContacts split into an allocContactConstraints and setupContactConstraints stage, the latter of which is done in parallel
 - parallel solver: rolling friction is now interleaved along with normal friction
 - parallel solver: batchified split impulse solving + some cleanup
 - parallel solver: sorting batches from largest to smallest
 - parallel solver: added parallel batch creation
 - parallel solver: added warmstartingWriteBackContacts func + other cleanup
 - task scheduler: truncate low bits to preserve determinism with parallelSum
 - parallel solver: reducing dynamic mem allocs and trying to parallelize more of the batch setup
 - parallel solver: parallelize updating constraint batch ids for merging
 - parallel solver: adding debug visualization
 - task scheduler: make TBB task scheduler parallelSum deterministic
 - parallel solver: split batch gen code into separate file; allow selection of batch gen method
 - task scheduler: add sleepWorkerThreadsHint() at end of simulation
 - parallel solver: added grain size per phase
 - task Scheduler: fix for strange threading issue; also no need for main thread to wait for workers to sleep
 - base constraint solver: break out joint setup into separate function for profiling/overriding
 - parallel solver: allow different batching method for contacts vs joints
 - base constraint solver: add convertJoint and convertBodies to make it possible to parallelize joint and body conversion
 - parallel solver: convert joints and bodies in parallel now
 - parallel solver: speed up batch creation with run-length encoding
 - parallel solver: batch gen: run-length expansion in parallel; collect constraint info in parallel
 - parallel solver: adding spatial grid batching method
 - parallel solver: enhancements to spatial grid batching
 - sequential solver: moving code for writing back into functions that derived classes can call
 - parallel solver: do write back of bodies and joints in parallel
 - parallel solver: removed all batching methods except for spatial grid (others were ineffective)
 - parallel solver: added 2D or 3D grid batching options; and a bit of cleanup
 - move btDefaultTaskScheduler into LinearMath project
2018-02-26 22:47:33 -08:00
erwincoumans
8ff75e11cd fixes related to torsional friction, due to recent cone friction update. 2017-11-28 20:09:56 -08:00
d3x0r
88b49947b5 Composite of fixed code for mingw64(on windows) and general fixes for msvc.
1) (win32window) don't convert char to wide, use char direct to window.
2) (CMakeLists) Don't link one library as static CPPLIB and no others (mismatched allocations)
3) (macros) Fix Gwen macros for mingw64 on windows build.  (changes are by compiler(msc_ver) not platform)
4) (FileUtils) sprintf_s reference by platform, not compiler (mingw64 support)
5) (b3OpenCLUtils) fix bad define name _MSVC_VER->_MSC_VER
6) (compoundCollision) remove unused variables, simplify operation.
7) (impulseconstraint) remove duplicated code block
2017-10-28 14:42:38 -07:00
erwincoumans
eb97e06280 fix minitaur.urdf: move lower-leg inertia to center, add missing collision for one of the motors, add contact parameters for friction_anchor, spinning friction, compliance (stiffness/damping)
fix in indexing for maximal coordinates (unused by default, still experimental, requires many iterations for Minitaur due to extreme mass-ratio, hence use of reduces/generalized coordinates)
modify quadruped.py to test maximal coordinates
wrap angular servo (positional) target within [-PI,PI] in btGeneric6DofSpring2Constraint
add 'j' key to show body frames in wireframe/debug mode
2017-09-02 01:05:42 -07:00
Lunkhound
b7f35000aa NNCG solver: apply rolling friction consistently regardless of the solver flags 2017-07-02 21:12:25 -07:00
Lunkhound
e9ec5044d1 SequentialImpulseConstraintSolver: fix bugs with SOLVER_SIMD flag 2017-06-10 04:33:40 -07:00
Erwin Coumans
b645963879 expose pybullet changeDynamics(spinningFriction=..., rollingFriction=..., restitution=...)
Bullet C-API b3ChangeDynamicsInfoSetSpinningFriction/RollingFriction/Resitution
b3PhysicsParamSetRestitutionVelocityThreshold, / pybullet.setPhysicsEngineParameter restitutionVelocityThreshold:
if the velocity is below this threshhold, the restitution is zero (this prevents energy buildup at near-resting state)
pybullet restitution.py example.
2017-05-26 18:14:38 -07:00
Andrew Meadows
81758bf1b3 'powered' is bool not int 2017-05-12 15:47:03 -07:00
Andrew Meadows
4a1c682c3c fix typo: Velosity-->Velocity 2017-05-12 15:46:01 -07:00
Erwin Coumans
fc6fb7b14c initialize values (padding etc) help asan/msan tests 2017-05-09 18:00:28 -07:00
Gregery Barton
72b0b76b64 getSolveSwingLimit() returns wrong value
Should return m_solveSwingLimit instead of m_solveTwistLimit
2017-05-06 11:45:26 +10:00
nicolaichuk
5527e36139 Merge remote-tracking branch 'remotes/bulletphysics/master'
# Conflicts:
#	src/BulletCollision/CollisionDispatch/btCollisionWorldImporter.h
2017-03-23 14:28:49 +03:00
nicolaichuk
74b1044a05 move constructor for abstract class in protected 2017-03-23 14:14:14 +03:00
Erwin Coumans
0b017b0f53 fix issue with btMultiBody friction in combination with soft contacts (friction should not re-use normal contact cfm/erp)
implement friction anchors, position friction correction, disabled by default. Use colObj->setCollisionFlag(flag | CF_HAS_FRICTION_ANCHOR); See test/RobotClientAPI/SlopeFrictionMain.cpp. In URDF or SDF, add <friction_anchor/> in <contact> section of <link> to enable.
PhysicsServer: properly restore old activation state after releasing picked object
btMultiBodyConstraintSolver: disable flip/flop of contact/friction constraint solving by default (it breaks some internal flaky unit tests)
2017-03-20 10:58:07 -07:00
Szabolcs Dombi
953bc0d3e7 float to btScalar 2017-03-13 18:22:36 +01:00
Erwin Coumans
c0c4c8ba3f fix many warnings
remove btMultiSapBroadphase.*
make collisionFilterGroup/collisionFilterMark int (instead of short int)
2017-01-15 22:26:11 -08:00
Lunkhound
6d2c7b9aba constraint solver: fix bug in getOrInitSolverBody (threadsafe case only) for kinematic objects 2016-12-19 21:31:38 -08:00
Erwin Coumans
379a852f93 fix compile issues 2016-12-16 18:43:21 -08:00
Erwin Coumans
8ff1e55166 disable VERBOSE_RESIDUAL_PRINTF 2016-12-16 18:12:33 -08:00
Erwin Coumans
dcd02a1e15 add option to terminate PGS constraint solvers based on a least square residual threshold
(for example solverInfo().m_leastSquaresResidualThreshold = 1e-7 and use large m_numSolverIterations
disable sphere-sphere contact cache, it is buggy (some contact point stay in the cache, when sphere penetrates more than total margins)
tweak some gpu demo settings
2016-12-16 18:09:52 -08:00
Lunkhound
2f4ec4f8c9 collisionObject: renamed uniqueId to worldArrayIndex; removed linear search in removeCollisionObject 2016-11-12 12:41:55 -08:00
Lunkhound
1c3686ca51 MultiThreaded Demo:
- fixing various race conditions throughout (usage of static vars, etc)
 - addition of a few lightweight mutexes (which are compiled out by default)
 - slight code rearrangement in discreteDynamicsWorld to facilitate multithreading
 - PoolAllocator::allocate() can now be called when pool is full without
     crashing (null pointer returned)
 - PoolAllocator allocate and freeMemory, are OPTIONALLY threadsafe
     (default is un-threadsafe)
 - CollisionDispatcher no longer checks if the pool allocator is full
     before calling allocate(), instead it just calls allocate() and
     checks if the return is null -- this avoids a race condition
 - SequentialImpulseConstraintSolver OPTIONALLY uses different logic in
     getOrInitSolverBody() to avoid a race condition with kinematic bodies
 - addition of 2 classes which together allow simulation islands to be run
   in parallel:
    - btSimulationIslandManagerMt
    - btDiscreteDynamicsWorldMt
 - MultiThreadedDemo example in the example browser demonstrating use of
   OpenMP, Microsoft PPL, and Intel TBB
 - use multithreading for other demos
 - benchmark demo: add parallel raycasting
2016-10-30 12:47:27 -07:00
Erwin Coumans
96c1ee4256 revert default contact 'erp' (error-reduction-parameter) from 0.8 to 0.2
as it used to be.
2016-09-26 07:55:30 -07:00
Erwin Coumans
567b003654 separate spinning and rolling friction coefficients, exposed in URDF as spinning_friction / m_rolling_friction
improvements in VR demo, add grasper etc.
2016-09-16 00:57:00 +01:00
Erwin Coumans
ecd814c9c5 export contact friction/damping through URDF and API
convert from contact friction/damping to cfm/erp
btCollisionObject::setContactFrictionAndDamping
2016-09-02 16:40:56 -07:00
Erwin Coumans
e98fca1e5e implement pybullet.getContactPointData(), two optional object unique ids as filter
returns a pylist of contact points. Each point has the following data:

	0     int m_contactFlags;//unused for now
         1     int m_bodyUniqueIdA;
         2     int m_bodyUniqueIdB;
         3     int m_linkIndexA;
         4     int m_linkIndexB;
         5-6-7     double m_positionOnAInWS[3];//contact point location on object A, in world space coordinates
         8-9-10     double m_positionOnBInWS[3];//contact point location on object A, in world space coordinates
         11-12-13     double m_contactNormalOnBInWS[3];//the separating contact normal, pointing from object B towards object A
         14     double m_contactDistance;//negative number is penetration, positive is distance.

         15    double m_normalForce;
2016-09-01 18:28:39 -07:00
yunfeibai
9c4cfde3d6 Fixed constraint for btMultiBody and btRigidBody. 2016-08-15 13:19:00 -07:00
Erwin Coumans
149129826a remove unused findex from btTypedConstraint.h 2016-06-13 18:33:18 -07:00
Erwin Coumans
098e0158ea fix compile issue(s) in BT_USE_DOUBLE_PRECISION mode 2016-05-26 18:21:57 -07:00
erwin coumans
6c9bfce975 Support btMultiBody soft contact using ERP and CFM. Also support custom relaxation parameter to allow successive over relaxation.
Added demos for rigid and multi body soft (compliant) contact.
Will also add simplified Hertz compliant contact, by dynamically modifying the ERP/CFM to mimic a non-linear spring.
Note that btManifoldPoint is growing too big, we need to implement proper contact constraints derived from btTypedConstraint.
2016-02-22 18:40:00 -08:00
erwin coumans
645a88176d Enable softness for btRigidBody contacts. This is implemented by some value (CFM, constraint force mixing) to the main diagonal of A.
CFM for contacts use world CFM value by default, and can override with custom CFM value using the
BT_CONTACT_FLAG_HAS_CONTACT_CFM stored in m_contactPointFlags.
Boolean m_lateralFrictionInitialized is replaced 'BT_CONTACT_FLAG_LATERAL_FRICTION_INITIALIZED' flag stored in int m_contactPointFlags in btManifoldPoint.
Enable successive over-relaxation parameter (SOR) for contacts. btMLCPSolver uses global CFM.
In one of the next commits, contact softness will be enabled btMultiBody contacts.
Also need to review use of CFM in btMLCPSolvers (only world CFM is used at the moment)
2016-01-22 17:43:36 -08:00
Erwin Coumans
5da9e37a05 add BT_DECLARE_ALIGNED_ALLOCATOR() for btTypedConstraint 2015-11-26 12:43:10 -08:00
erwincoumans
5ded2d3ee4 Merge pull request #398 from MakoEnergy/master
Constraint Accessibility.
2015-10-27 12:01:11 -07:00
Cameron White
86880a2795 Only use the max motor impulse if it is positive (it defaults to -1). 2015-08-27 16:03:02 -04:00
Cameron White
29b251e81b Use the max motor impulse if the motor is enabled. 2015-08-04 10:54:34 -04:00
MakoEnergy
b94533d059 Added a method to retrieve the parameter flags to the btSliderConstraint. 2015-05-29 00:15:12 -05:00
MakoEnergy
2f96d050ee Added a method to retrieve the parameter flags to the btPoint2PointConstraint. 2015-05-27 21:00:30 -05:00
MakoEnergy
e48e14889c Created a few getters and setters for the btHingeConstraint. 2015-05-27 16:00:30 -05:00
MakoEnergy
ec84ce3304 Added 4 fetch methods to the 6DoF spring constraint. 2015-05-22 16:26:18 -05:00
Gabor Puhr
98e1334a64 Auto limitation of spring stiffness and damping in btGeneric6DofSpring2Constraint is now optional.
Fix: spring stiffness limitation used the mass incorrectly in btGeneric6DofSpring2Constraint.
2015-05-22 12:58:28 +02:00
MakoEnergy
26c533f02c Added 3 fetch methods and made other methods Const. 2015-05-17 16:48:53 -05:00
MakoEnergy
3bf26c8bbe Final set of fetch methods, for secondary data for the limits. 2015-05-15 16:12:31 -05:00
MakoEnergy
c30a3baad0 Added a method to retrieve the parameter flags to the btConeTwistConstraint. 2015-05-09 04:32:20 -05:00
MakoEnergy
150d0dfc02 Fixed a couple errors with my last commit.
Fixed an error where I placed the wrong brackets and fixed a styling error where I had capitalized the first letter of a function name.
2015-05-08 00:22:09 -05:00
MakoEnergy
b53106319f Created a bunch of "get" methods for the btConeTwistConstraint. 2015-05-07 23:41:19 -05:00