bindings for setting warmstarting factor
fix space
This commit is contained in:
@@ -668,6 +668,15 @@ B3_SHARED_API int b3PhysicsParamSetNumSolverIterations(b3SharedMemoryCommandHand
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
B3_SHARED_API int b3PhysicsParamSetWarmStartingFactor(b3SharedMemoryCommandHandle commandHandle, double warmStartingFactor)
|
||||||
|
{
|
||||||
|
struct SharedMemoryCommand* command = (struct SharedMemoryCommand*)commandHandle;
|
||||||
|
b3Assert(command->m_type == CMD_SEND_PHYSICS_SIMULATION_PARAMETERS);
|
||||||
|
command->m_physSimParamArgs.m_warmStartingFactor = warmStartingFactor;
|
||||||
|
command->m_updateFlags |= SIM_PARAM_UPDATE_WARM_STARTING_FACTOR;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
B3_SHARED_API int b3PhysicsParamSetSolverResidualThreshold(b3SharedMemoryCommandHandle commandHandle, double solverResidualThreshold)
|
B3_SHARED_API int b3PhysicsParamSetSolverResidualThreshold(b3SharedMemoryCommandHandle commandHandle, double solverResidualThreshold)
|
||||||
{
|
{
|
||||||
struct SharedMemoryCommand* command = (struct SharedMemoryCommand*)commandHandle;
|
struct SharedMemoryCommand* command = (struct SharedMemoryCommand*)commandHandle;
|
||||||
|
|||||||
@@ -338,6 +338,7 @@ extern "C"
|
|||||||
B3_SHARED_API int b3PhysicsParamSetNumSubSteps(b3SharedMemoryCommandHandle commandHandle, int numSubSteps);
|
B3_SHARED_API int b3PhysicsParamSetNumSubSteps(b3SharedMemoryCommandHandle commandHandle, int numSubSteps);
|
||||||
B3_SHARED_API int b3PhysicsParamSetRealTimeSimulation(b3SharedMemoryCommandHandle commandHandle, int enableRealTimeSimulation);
|
B3_SHARED_API int b3PhysicsParamSetRealTimeSimulation(b3SharedMemoryCommandHandle commandHandle, int enableRealTimeSimulation);
|
||||||
B3_SHARED_API int b3PhysicsParamSetNumSolverIterations(b3SharedMemoryCommandHandle commandHandle, int numSolverIterations);
|
B3_SHARED_API int b3PhysicsParamSetNumSolverIterations(b3SharedMemoryCommandHandle commandHandle, int numSolverIterations);
|
||||||
|
B3_SHARED_API int b3PhysicsParamSetWarmStartingFactor(b3SharedMemoryCommandHandle commandHandle, double warmStartingFactor);
|
||||||
B3_SHARED_API int b3PhysicsParamSetCollisionFilterMode(b3SharedMemoryCommandHandle commandHandle, int filterMode);
|
B3_SHARED_API int b3PhysicsParamSetCollisionFilterMode(b3SharedMemoryCommandHandle commandHandle, int filterMode);
|
||||||
B3_SHARED_API int b3PhysicsParamSetUseSplitImpulse(b3SharedMemoryCommandHandle commandHandle, int useSplitImpulse);
|
B3_SHARED_API int b3PhysicsParamSetUseSplitImpulse(b3SharedMemoryCommandHandle commandHandle, int useSplitImpulse);
|
||||||
B3_SHARED_API int b3PhysicsParamSetSplitImpulsePenetrationThreshold(b3SharedMemoryCommandHandle commandHandle, double splitImpulsePenetrationThreshold);
|
B3_SHARED_API int b3PhysicsParamSetSplitImpulsePenetrationThreshold(b3SharedMemoryCommandHandle commandHandle, double splitImpulsePenetrationThreshold);
|
||||||
|
|||||||
@@ -9042,6 +9042,10 @@ bool PhysicsServerCommandProcessor::processSendPhysicsParametersCommand(const st
|
|||||||
m_data->m_dynamicsWorld->getSolverInfo().m_reportSolverAnalytics = clientCmd.m_physSimParamArgs.m_reportSolverAnalytics;
|
m_data->m_dynamicsWorld->getSolverInfo().m_reportSolverAnalytics = clientCmd.m_physSimParamArgs.m_reportSolverAnalytics;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (clientCmd.m_updateFlags & SIM_PARAM_UPDATE_WARM_STARTING_FACTOR)
|
||||||
|
{
|
||||||
|
m_data->m_dynamicsWorld->getSolverInfo().m_warmstartingFactor = clientCmd.m_physSimParamArgs.m_warmStartingFactor;
|
||||||
|
}
|
||||||
SharedMemoryStatus& serverCmd = serverStatusOut;
|
SharedMemoryStatus& serverCmd = serverStatusOut;
|
||||||
serverCmd.m_type = CMD_CLIENT_COMMAND_COMPLETED;
|
serverCmd.m_type = CMD_CLIENT_COMMAND_COMPLETED;
|
||||||
return hasStatus;
|
return hasStatus;
|
||||||
|
|||||||
@@ -482,6 +482,7 @@ enum EnumSimParamUpdateFlags
|
|||||||
SIM_PARAM_CONSTRAINT_SOLVER_TYPE = 1 << 24,
|
SIM_PARAM_CONSTRAINT_SOLVER_TYPE = 1 << 24,
|
||||||
SIM_PARAM_CONSTRAINT_MIN_SOLVER_ISLAND_SIZE = 1 << 25,
|
SIM_PARAM_CONSTRAINT_MIN_SOLVER_ISLAND_SIZE = 1 << 25,
|
||||||
SIM_PARAM_REPORT_CONSTRAINT_SOLVER_ANALYTICS = 1 << 26,
|
SIM_PARAM_REPORT_CONSTRAINT_SOLVER_ANALYTICS = 1 << 26,
|
||||||
|
SIM_PARAM_UPDATE_WARM_STARTING_FACTOR = 1 << 27,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,8 @@
|
|||||||
//Please don't replace an existing magic number:
|
//Please don't replace an existing magic number:
|
||||||
//instead, only ADD a new one at the top, comment-out previous one
|
//instead, only ADD a new one at the top, comment-out previous one
|
||||||
|
|
||||||
#define SHARED_MEMORY_MAGIC_NUMBER 2019060190
|
#define SHARED_MEMORY_MAGIC_NUMBER 201908050
|
||||||
|
//#define SHARED_MEMORY_MAGIC_NUMBER 2019060190
|
||||||
//#define SHARED_MEMORY_MAGIC_NUMBER 201904030
|
//#define SHARED_MEMORY_MAGIC_NUMBER 201904030
|
||||||
//#define SHARED_MEMORY_MAGIC_NUMBER 201902120
|
//#define SHARED_MEMORY_MAGIC_NUMBER 201902120
|
||||||
//#define SHARED_MEMORY_MAGIC_NUMBER 201811260
|
//#define SHARED_MEMORY_MAGIC_NUMBER 201811260
|
||||||
@@ -935,6 +936,7 @@ struct b3PhysicsSimulationParameters
|
|||||||
double m_gravityAcceleration[3];
|
double m_gravityAcceleration[3];
|
||||||
int m_numSimulationSubSteps;
|
int m_numSimulationSubSteps;
|
||||||
int m_numSolverIterations;
|
int m_numSolverIterations;
|
||||||
|
double m_warmStartingFactor;
|
||||||
int m_useRealTimeSimulation;
|
int m_useRealTimeSimulation;
|
||||||
int m_useSplitImpulse;
|
int m_useSplitImpulse;
|
||||||
double m_splitImpulsePenetrationThreshold;
|
double m_splitImpulsePenetrationThreshold;
|
||||||
|
|||||||
@@ -336,19 +336,19 @@ static PyObject* pybullet_stepSimulation(PyObject* self, PyObject* args, PyObjec
|
|||||||
struct b3ForwardDynamicsAnalyticsArgs analyticsData;
|
struct b3ForwardDynamicsAnalyticsArgs analyticsData;
|
||||||
int numIslands = 0;
|
int numIslands = 0;
|
||||||
int i;
|
int i;
|
||||||
PyObject* pyAnalyticsData = PyTuple_New(numIslands);
|
PyObject* val = 0;
|
||||||
|
|
||||||
numIslands = b3GetStatusForwardDynamicsAnalyticsData(statusHandle, &analyticsData);
|
numIslands = b3GetStatusForwardDynamicsAnalyticsData(statusHandle, &analyticsData);
|
||||||
|
PyObject* pyAnalyticsData = PyTuple_New(numIslands);
|
||||||
|
|
||||||
for (i=0;i<numIslands;i++)
|
for (i=0;i<numIslands;i++)
|
||||||
{
|
{
|
||||||
int numFields = 4;
|
val = Py_BuildValue("{s:i, s:i, s:i, s:d}",
|
||||||
PyObject* pyIslandData = PyTuple_New(numFields);
|
"islandId", analyticsData.m_islandData[i].m_islandId,
|
||||||
PyTuple_SetItem(pyIslandData, 0, PyLong_FromLong(analyticsData.m_islandData[i].m_islandId));
|
"numBodies", analyticsData.m_islandData[i].m_numBodies,
|
||||||
PyTuple_SetItem(pyIslandData, 1, PyLong_FromLong(analyticsData.m_islandData[i].m_numBodies));
|
"numIterationsUsed", analyticsData.m_islandData[i].m_numIterationsUsed,
|
||||||
PyTuple_SetItem(pyIslandData, 2, PyLong_FromLong(analyticsData.m_islandData[i].m_numIterationsUsed));
|
"remainingResidual", analyticsData.m_islandData[i].m_remainingLeastSquaresResidual);
|
||||||
PyTuple_SetItem(pyIslandData, 3, PyFloat_FromDouble(analyticsData.m_islandData[i].m_remainingLeastSquaresResidual));
|
PyTuple_SetItem(pyAnalyticsData, i, val);
|
||||||
PyTuple_SetItem(pyAnalyticsData, i, pyIslandData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return pyAnalyticsData;
|
return pyAnalyticsData;
|
||||||
@@ -1577,6 +1577,9 @@ static PyObject* pybullet_setPhysicsEngineParameter(PyObject* self, PyObject* ar
|
|||||||
|
|
||||||
int minimumSolverIslandSize = -1;
|
int minimumSolverIslandSize = -1;
|
||||||
int reportSolverAnalytics = -1;
|
int reportSolverAnalytics = -1;
|
||||||
|
|
||||||
|
double warmStartingFactor = -1;
|
||||||
|
|
||||||
int physicsClientId = 0;
|
int physicsClientId = 0;
|
||||||
|
|
||||||
static char* kwlist[] = {"fixedTimeStep",
|
static char* kwlist[] = {"fixedTimeStep",
|
||||||
@@ -1603,11 +1606,12 @@ static PyObject* pybullet_setPhysicsEngineParameter(PyObject* self, PyObject* ar
|
|||||||
"globalCFM",
|
"globalCFM",
|
||||||
"minimumSolverIslandSize",
|
"minimumSolverIslandSize",
|
||||||
"reportSolverAnalytics",
|
"reportSolverAnalytics",
|
||||||
|
"warmStartingFactor",
|
||||||
"physicsClientId", NULL};
|
"physicsClientId", NULL};
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, keywds, "|diidiidiiddddiididdiidiii", kwlist, &fixedTimeStep, &numSolverIterations, &useSplitImpulse, &splitImpulsePenetrationThreshold, &numSubSteps,
|
if (!PyArg_ParseTupleAndKeywords(args, keywds, "|diidiidiiddddiididdiidiidi", kwlist, &fixedTimeStep, &numSolverIterations, &useSplitImpulse, &splitImpulsePenetrationThreshold, &numSubSteps,
|
||||||
&collisionFilterMode, &contactBreakingThreshold, &maxNumCmdPer1ms, &enableFileCaching, &restitutionVelocityThreshold, &erp, &contactERP, &frictionERP, &enableConeFriction, &deterministicOverlappingPairs, &allowedCcdPenetration, &jointFeedbackMode, &solverResidualThreshold, &contactSlop, &enableSAT, &constraintSolverType, &globalCFM, &minimumSolverIslandSize,
|
&collisionFilterMode, &contactBreakingThreshold, &maxNumCmdPer1ms, &enableFileCaching, &restitutionVelocityThreshold, &erp, &contactERP, &frictionERP, &enableConeFriction, &deterministicOverlappingPairs, &allowedCcdPenetration, &jointFeedbackMode, &solverResidualThreshold, &contactSlop, &enableSAT, &constraintSolverType, &globalCFM, &minimumSolverIslandSize,
|
||||||
&reportSolverAnalytics, &physicsClientId))
|
&reportSolverAnalytics, &warmStartingFactor, &physicsClientId))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -1728,6 +1732,10 @@ static PyObject* pybullet_setPhysicsEngineParameter(PyObject* self, PyObject* ar
|
|||||||
{
|
{
|
||||||
b3PhysicsParamSetSolverAnalytics(command, reportSolverAnalytics);
|
b3PhysicsParamSetSolverAnalytics(command, reportSolverAnalytics);
|
||||||
}
|
}
|
||||||
|
if (warmStartingFactor >= 0)
|
||||||
|
{
|
||||||
|
b3PhysicsParamSetWarmStartingFactor(command, warmStartingFactor);
|
||||||
|
}
|
||||||
statusHandle = b3SubmitClientCommandAndWaitStatus(sm, command);
|
statusHandle = b3SubmitClientCommandAndWaitStatus(sm, command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user