Bullet Collision Detection & Physics Library: btContactSolverInfo.h Source File

Bullet Collision Detection & Physics Library

btContactSolverInfo.h
Go to the documentation of this file.
1 /*
2 Bullet Continuous Collision Detection and Physics Library
3 Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
4
5 This software is provided 'as-is', without any express or implied warranty.
6 In no event will the authors be held liable for any damages arising from the use of this software.
7 Permission is granted to anyone to use this software for any purpose,
8 including commercial applications, and to alter it and redistribute it freely,
9 subject to the following restrictions:
10
11 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
12 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
13 3. This notice may not be removed or altered from any source distribution.
14 */
15
16 #ifndef BT_CONTACT_SOLVER_INFO
17 #define BT_CONTACT_SOLVER_INFO
18
19 #include "LinearMath/btScalar.h"
20
21 enum btSolverMode
22 {
23 SOLVER_RANDMIZE_ORDER = 1,
24 SOLVER_FRICTION_SEPARATE = 2,
25 SOLVER_USE_WARMSTARTING = 4,
26 SOLVER_USE_2_FRICTION_DIRECTIONS = 16,
27 SOLVER_ENABLE_FRICTION_DIRECTION_CACHING = 32,
28 SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION = 64,
29 SOLVER_CACHE_FRIENDLY = 128,
30 SOLVER_SIMD = 256,
31 SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS = 512,
32 SOLVER_ALLOW_ZERO_LENGTH_FRICTION_DIRECTIONS = 1024,
33 SOLVER_DISABLE_IMPLICIT_CONE_FRICTION = 2048,
34 SOLVER_USE_ARTICULATED_WARMSTARTING = 4096,
35 };
36
37 struct btContactSolverInfoData
38 {
39 btScalar m_tau;
40 btScalar m_damping; //global non-contact constraint damping, can be locally overridden by constraints during 'getInfo2'.
41 btScalar m_friction;
42 btScalar m_timeStep;
43 btScalar m_restitution;
44 int m_numIterations;
45 btScalar m_maxErrorReduction;
46 btScalar m_sor; //successive over-relaxation term
47 btScalar m_erp; //error reduction for non-contact constraints
48 btScalar m_erp2; //error reduction for contact constraints
49 btScalar m_deformable_erp; //error reduction for deformable constraints
50 btScalar m_deformable_cfm; //constraint force mixing for deformable constraints
51 btScalar m_deformable_maxErrorReduction; // maxErrorReduction for deformable contact
52 btScalar m_globalCfm; //constraint force mixing for contacts and non-contacts
53 btScalar m_frictionERP; //error reduction for friction constraints
54 btScalar m_frictionCFM; //constraint force mixing for friction constraints
55
56 int m_splitImpulse;
57 btScalar m_splitImpulsePenetrationThreshold;
58 btScalar m_splitImpulseTurnErp;
59 btScalar m_linearSlop;
60 btScalar m_warmstartingFactor;
61 btScalar m_articulatedWarmstartingFactor;
62 int m_solverMode;
63 int m_restingContactRestitutionThreshold;
64 int m_minimumSolverBatchSize;
65 btScalar m_maxGyroscopicForce;
66 btScalar m_singleAxisRollingFrictionThreshold;
67 btScalar m_leastSquaresResidualThreshold;
68 btScalar m_restitutionVelocityThreshold;
69 bool m_jointFeedbackInWorldSpace;
70 bool m_jointFeedbackInJointFrame;
71 int m_reportSolverAnalytics;
72 int m_numNonContactInnerIterations;
73 };
74
75 struct btContactSolverInfo : public btContactSolverInfoData
76 {
77 inline btContactSolverInfo()
78 {
79 m_tau = btScalar(0.6);
80 m_damping = btScalar(1.0);
81 m_friction = btScalar(0.3);
82 m_timeStep = btScalar(1.f / 60.f);
83 m_restitution = btScalar(0.);
84 m_maxErrorReduction = btScalar(20.);
85 m_numIterations = 10;
86 m_erp = btScalar(0.2);
87 m_erp2 = btScalar(0.2);
88 m_deformable_erp = btScalar(0.06);
89 m_deformable_cfm = btScalar(0.01);
90 m_deformable_maxErrorReduction = btScalar(0.1);
91 m_globalCfm = btScalar(0.);
92 m_frictionERP = btScalar(0.2); //positional friction 'anchors' are disabled by default
93 m_frictionCFM = btScalar(0.);
94 m_sor = btScalar(1.);
95 m_splitImpulse = true;
96 m_splitImpulsePenetrationThreshold = -.04f;
97 m_splitImpulseTurnErp = 0.1f;
98 m_linearSlop = btScalar(0.0);
99 m_warmstartingFactor = btScalar(0.85);
100 m_articulatedWarmstartingFactor = btScalar(0.85);
101 //m_solverMode = SOLVER_USE_WARMSTARTING | SOLVER_SIMD | SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION|SOLVER_USE_2_FRICTION_DIRECTIONS|SOLVER_ENABLE_FRICTION_DIRECTION_CACHING;// | SOLVER_RANDMIZE_ORDER;
102 m_solverMode = SOLVER_USE_WARMSTARTING | SOLVER_SIMD; // | SOLVER_RANDMIZE_ORDER;
103 m_restingContactRestitutionThreshold = 2; //unused as of 2.81
104 m_minimumSolverBatchSize = 128; //try to combine islands until the amount of constraints reaches this limit
105 m_maxGyroscopicForce = 100.f;
106 m_singleAxisRollingFrictionThreshold = 1e30f;
107 m_leastSquaresResidualThreshold = 0.f;
108 m_restitutionVelocityThreshold = 0.2f; //if the relative velocity is below this threshold, there is zero restitution
109 m_jointFeedbackInWorldSpace = false;
110 m_jointFeedbackInJointFrame = false;
111 m_reportSolverAnalytics = 0;
112 m_numNonContactInnerIterations = 1; // the number of inner iterations for solving motor constraint in a single iteration of the constraint solve
113 }
114 };
115
117 struct btContactSolverInfoDoubleData
118 {
119 double m_tau;
120 double m_damping; //global non-contact constraint damping, can be locally overridden by constraints during 'getInfo2'.
121 double m_friction;
122 double m_timeStep;
123 double m_restitution;
124 double m_maxErrorReduction;
125 double m_sor;
126 double m_erp; //used as Baumgarte factor
127 double m_erp2; //used in Split Impulse
128 double m_globalCfm; //constraint force mixing
129 double m_splitImpulsePenetrationThreshold;
130 double m_splitImpulseTurnErp;
131 double m_linearSlop;
132 double m_warmstartingFactor;
133 double m_articulatedWarmstartingFactor;
134 double m_maxGyroscopicForce;
135 double m_singleAxisRollingFrictionThreshold;
136
137 int m_numIterations;
138 int m_solverMode;
139 int m_restingContactRestitutionThreshold;
140 int m_minimumSolverBatchSize;
141 int m_splitImpulse;
142 char m_padding[4];
143 };
145 struct btContactSolverInfoFloatData
146 {
147 float m_tau;
148 float m_damping; //global non-contact constraint damping, can be locally overridden by constraints during 'getInfo2'.
149 float m_friction;
150 float m_timeStep;
151
152 float m_restitution;
153 float m_maxErrorReduction;
154 float m_sor;
155 float m_erp; //used as Baumgarte factor
156
157 float m_erp2; //used in Split Impulse
158 float m_globalCfm; //constraint force mixing
159 float m_splitImpulsePenetrationThreshold;
160 float m_splitImpulseTurnErp;
161
162 float m_linearSlop;
163 float m_warmstartingFactor;
164 float m_articulatedWarmstartingFactor;
165 float m_maxGyroscopicForce;
166
167 float m_singleAxisRollingFrictionThreshold;
168 int m_numIterations;
169 int m_solverMode;
170 int m_restingContactRestitutionThreshold;
171
172 int m_minimumSolverBatchSize;
173 int m_splitImpulse;
174
175 };
176
177 #endif //BT_CONTACT_SOLVER_INFO
btSolverMode
btSolverMode
Definition: btContactSolverInfo.h:22
SOLVER_SIMD
@ SOLVER_SIMD
Definition: btContactSolverInfo.h:30
SOLVER_DISABLE_IMPLICIT_CONE_FRICTION
@ SOLVER_DISABLE_IMPLICIT_CONE_FRICTION
Definition: btContactSolverInfo.h:33
SOLVER_USE_ARTICULATED_WARMSTARTING
@ SOLVER_USE_ARTICULATED_WARMSTARTING
Definition: btContactSolverInfo.h:34
SOLVER_CACHE_FRIENDLY
@ SOLVER_CACHE_FRIENDLY
Definition: btContactSolverInfo.h:29
SOLVER_ENABLE_FRICTION_DIRECTION_CACHING
@ SOLVER_ENABLE_FRICTION_DIRECTION_CACHING
Definition: btContactSolverInfo.h:27
SOLVER_ALLOW_ZERO_LENGTH_FRICTION_DIRECTIONS
@ SOLVER_ALLOW_ZERO_LENGTH_FRICTION_DIRECTIONS
Definition: btContactSolverInfo.h:32
SOLVER_FRICTION_SEPARATE
@ SOLVER_FRICTION_SEPARATE
Definition: btContactSolverInfo.h:24
SOLVER_USE_WARMSTARTING
@ SOLVER_USE_WARMSTARTING
Definition: btContactSolverInfo.h:25
SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS
@ SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS
Definition: btContactSolverInfo.h:31
SOLVER_RANDMIZE_ORDER
@ SOLVER_RANDMIZE_ORDER
Definition: btContactSolverInfo.h:23
SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION
@ SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION
Definition: btContactSolverInfo.h:28
SOLVER_USE_2_FRICTION_DIRECTIONS
@ SOLVER_USE_2_FRICTION_DIRECTIONS
Definition: btContactSolverInfo.h:26
btScalar.h
btScalar
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:314
btContactSolverInfoData
Definition: btContactSolverInfo.h:38
btContactSolverInfoData::m_jointFeedbackInJointFrame
bool m_jointFeedbackInJointFrame
Definition: btContactSolverInfo.h:70
btContactSolverInfoData::m_damping
btScalar m_damping
Definition: btContactSolverInfo.h:40
btContactSolverInfoData::m_numNonContactInnerIterations
int m_numNonContactInnerIterations
Definition: btContactSolverInfo.h:72
btContactSolverInfoData::m_deformable_maxErrorReduction
btScalar m_deformable_maxErrorReduction
Definition: btContactSolverInfo.h:51
btContactSolverInfoData::m_reportSolverAnalytics
int m_reportSolverAnalytics
Definition: btContactSolverInfo.h:71
btContactSolverInfoData::m_friction
btScalar m_friction
Definition: btContactSolverInfo.h:41
btContactSolverInfoData::m_numIterations
int m_numIterations
Definition: btContactSolverInfo.h:44
btContactSolverInfoData::m_jointFeedbackInWorldSpace
bool m_jointFeedbackInWorldSpace
Definition: btContactSolverInfo.h:69
btContactSolverInfoData::m_maxErrorReduction
btScalar m_maxErrorReduction
Definition: btContactSolverInfo.h:45
btContactSolverInfoData::m_deformable_erp
btScalar m_deformable_erp
Definition: btContactSolverInfo.h:49
btContactSolverInfoData::m_sor
btScalar m_sor
Definition: btContactSolverInfo.h:46
btContactSolverInfoData::m_restingContactRestitutionThreshold
int m_restingContactRestitutionThreshold
Definition: btContactSolverInfo.h:63
btContactSolverInfoData::m_splitImpulsePenetrationThreshold
btScalar m_splitImpulsePenetrationThreshold
Definition: btContactSolverInfo.h:57
btContactSolverInfoData::m_splitImpulse
int m_splitImpulse
Definition: btContactSolverInfo.h:56
btContactSolverInfoData::m_solverMode
int m_solverMode
Definition: btContactSolverInfo.h:62
btContactSolverInfoData::m_frictionERP
btScalar m_frictionERP
Definition: btContactSolverInfo.h:53
btContactSolverInfoData::m_leastSquaresResidualThreshold
btScalar m_leastSquaresResidualThreshold
Definition: btContactSolverInfo.h:67
btContactSolverInfoData::m_warmstartingFactor
btScalar m_warmstartingFactor
Definition: btContactSolverInfo.h:60
btContactSolverInfoData::m_maxGyroscopicForce
btScalar m_maxGyroscopicForce
Definition: btContactSolverInfo.h:65
btContactSolverInfoData::m_restitution
btScalar m_restitution
Definition: btContactSolverInfo.h:43
btContactSolverInfoData::m_linearSlop
btScalar m_linearSlop
Definition: btContactSolverInfo.h:59
btContactSolverInfoData::m_articulatedWarmstartingFactor
btScalar m_articulatedWarmstartingFactor
Definition: btContactSolverInfo.h:61
btContactSolverInfoData::m_deformable_cfm
btScalar m_deformable_cfm
Definition: btContactSolverInfo.h:50
btContactSolverInfoData::m_minimumSolverBatchSize
int m_minimumSolverBatchSize
Definition: btContactSolverInfo.h:64
btContactSolverInfoData::m_restitutionVelocityThreshold
btScalar m_restitutionVelocityThreshold
Definition: btContactSolverInfo.h:68
btContactSolverInfoData::m_globalCfm
btScalar m_globalCfm
Definition: btContactSolverInfo.h:52
btContactSolverInfoData::m_frictionCFM
btScalar m_frictionCFM
Definition: btContactSolverInfo.h:54
btContactSolverInfoData::m_tau
btScalar m_tau
Definition: btContactSolverInfo.h:39
btContactSolverInfoData::m_splitImpulseTurnErp
btScalar m_splitImpulseTurnErp
Definition: btContactSolverInfo.h:58
btContactSolverInfoData::m_erp
btScalar m_erp
Definition: btContactSolverInfo.h:47
btContactSolverInfoData::m_timeStep
btScalar m_timeStep
Definition: btContactSolverInfo.h:42
btContactSolverInfoData::m_singleAxisRollingFrictionThreshold
btScalar m_singleAxisRollingFrictionThreshold
Definition: btContactSolverInfo.h:66
btContactSolverInfoData::m_erp2
btScalar m_erp2
Definition: btContactSolverInfo.h:48
btContactSolverInfoDoubleData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btContactSolverInfo.h:118
btContactSolverInfoDoubleData::m_friction
double m_friction
Definition: btContactSolverInfo.h:121
btContactSolverInfoDoubleData::m_maxErrorReduction
double m_maxErrorReduction
Definition: btContactSolverInfo.h:124
btContactSolverInfoDoubleData::m_articulatedWarmstartingFactor
double m_articulatedWarmstartingFactor
Definition: btContactSolverInfo.h:133
btContactSolverInfoDoubleData::m_numIterations
int m_numIterations
Definition: btContactSolverInfo.h:137
btContactSolverInfoDoubleData::m_linearSlop
double m_linearSlop
Definition: btContactSolverInfo.h:131
btContactSolverInfoDoubleData::m_globalCfm
double m_globalCfm
Definition: btContactSolverInfo.h:128
btContactSolverInfoDoubleData::m_timeStep
double m_timeStep
Definition: btContactSolverInfo.h:122
btContactSolverInfoDoubleData::m_minimumSolverBatchSize
int m_minimumSolverBatchSize
Definition: btContactSolverInfo.h:140
btContactSolverInfoDoubleData::m_erp
double m_erp
Definition: btContactSolverInfo.h:126
btContactSolverInfoDoubleData::m_splitImpulse
int m_splitImpulse
Definition: btContactSolverInfo.h:141
btContactSolverInfoDoubleData::m_splitImpulsePenetrationThreshold
double m_splitImpulsePenetrationThreshold
Definition: btContactSolverInfo.h:129
btContactSolverInfoDoubleData::m_damping
double m_damping
Definition: btContactSolverInfo.h:120
btContactSolverInfoDoubleData::m_tau
double m_tau
Definition: btContactSolverInfo.h:119
btContactSolverInfoDoubleData::m_restingContactRestitutionThreshold
int m_restingContactRestitutionThreshold
Definition: btContactSolverInfo.h:139
btContactSolverInfoDoubleData::m_warmstartingFactor
double m_warmstartingFactor
Definition: btContactSolverInfo.h:132
btContactSolverInfoDoubleData::m_singleAxisRollingFrictionThreshold
double m_singleAxisRollingFrictionThreshold
it is only used for 'explicit' version of gyroscopic force
Definition: btContactSolverInfo.h:135
btContactSolverInfoDoubleData::m_sor
double m_sor
Definition: btContactSolverInfo.h:125
btContactSolverInfoDoubleData::m_splitImpulseTurnErp
double m_splitImpulseTurnErp
Definition: btContactSolverInfo.h:130
btContactSolverInfoDoubleData::m_restitution
double m_restitution
Definition: btContactSolverInfo.h:123
btContactSolverInfoDoubleData::m_erp2
double m_erp2
Definition: btContactSolverInfo.h:127
btContactSolverInfoDoubleData::m_solverMode
int m_solverMode
Definition: btContactSolverInfo.h:138
btContactSolverInfoDoubleData::m_padding
char m_padding[4]
Definition: btContactSolverInfo.h:142
btContactSolverInfoDoubleData::m_maxGyroscopicForce
double m_maxGyroscopicForce
Definition: btContactSolverInfo.h:134
btContactSolverInfoFloatData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btContactSolverInfo.h:146
btContactSolverInfoFloatData::m_linearSlop
float m_linearSlop
Definition: btContactSolverInfo.h:162
btContactSolverInfoFloatData::m_splitImpulsePenetrationThreshold
float m_splitImpulsePenetrationThreshold
Definition: btContactSolverInfo.h:159
btContactSolverInfoFloatData::m_splitImpulse
int m_splitImpulse
Definition: btContactSolverInfo.h:173
btContactSolverInfoFloatData::m_articulatedWarmstartingFactor
float m_articulatedWarmstartingFactor
Definition: btContactSolverInfo.h:164
btContactSolverInfoFloatData::m_maxErrorReduction
float m_maxErrorReduction
Definition: btContactSolverInfo.h:153
btContactSolverInfoFloatData::m_erp2
float m_erp2
Definition: btContactSolverInfo.h:157
btContactSolverInfoFloatData::m_restingContactRestitutionThreshold
int m_restingContactRestitutionThreshold
Definition: btContactSolverInfo.h:170
btContactSolverInfoFloatData::m_warmstartingFactor
float m_warmstartingFactor
Definition: btContactSolverInfo.h:163
btContactSolverInfoFloatData::m_damping
float m_damping
Definition: btContactSolverInfo.h:148
btContactSolverInfoFloatData::m_restitution
float m_restitution
Definition: btContactSolverInfo.h:152
btContactSolverInfoFloatData::m_minimumSolverBatchSize
int m_minimumSolverBatchSize
Definition: btContactSolverInfo.h:172
btContactSolverInfoFloatData::m_sor
float m_sor
Definition: btContactSolverInfo.h:154
btContactSolverInfoFloatData::m_timeStep
float m_timeStep
Definition: btContactSolverInfo.h:150
btContactSolverInfoFloatData::m_friction
float m_friction
Definition: btContactSolverInfo.h:149
btContactSolverInfoFloatData::m_maxGyroscopicForce
float m_maxGyroscopicForce
Definition: btContactSolverInfo.h:165
btContactSolverInfoFloatData::m_tau
float m_tau
Definition: btContactSolverInfo.h:147
btContactSolverInfoFloatData::m_erp
float m_erp
Definition: btContactSolverInfo.h:155
btContactSolverInfoFloatData::m_splitImpulseTurnErp
float m_splitImpulseTurnErp
Definition: btContactSolverInfo.h:160
btContactSolverInfoFloatData::m_solverMode
int m_solverMode
Definition: btContactSolverInfo.h:169
btContactSolverInfoFloatData::m_numIterations
int m_numIterations
Definition: btContactSolverInfo.h:168
btContactSolverInfoFloatData::m_singleAxisRollingFrictionThreshold
float m_singleAxisRollingFrictionThreshold
Definition: btContactSolverInfo.h:167
btContactSolverInfoFloatData::m_globalCfm
float m_globalCfm
Definition: btContactSolverInfo.h:158
btContactSolverInfo
Definition: btContactSolverInfo.h:76
btContactSolverInfo::btContactSolverInfo
btContactSolverInfo()
Definition: btContactSolverInfo.h:77