summaryrefslogtreecommitdiff
path: root/examples/SharedMemory/PhysicsServerCommandProcessor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/SharedMemory/PhysicsServerCommandProcessor.cpp')
-rw-r--r--examples/SharedMemory/PhysicsServerCommandProcessor.cpp93
1 files changed, 93 insertions, 0 deletions
diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp
index cd4260469..fb35cb66e 100644
--- a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp
+++ b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp
@@ -757,6 +757,97 @@ PhysicsServerCommandProcessor::~PhysicsServerCommandProcessor()
delete m_data;
}
+void logCallback(btDynamicsWorld *world, btScalar timeStep)
+{
+ PhysicsServerCommandProcessor* proc = (PhysicsServerCommandProcessor*) world->getWorldUserInfo();
+ proc->logObjectStates(timeStep);
+
+}
+#include "../Utils/RobotLoggingUtil.h"
+
+void PhysicsServerCommandProcessor::logObjectStates(btScalar timeStep)
+{
+ //quick hack
+ static FILE* logFile = 0;
+ static btScalar logTime = 0;
+ //printf("log state at time %f\n",logTime);
+
+ btAlignedObjectArray<std::string> structNames;
+ std::string structTypes;
+ //'t', 'r', 'p', 'y', 'q0', 'q1', 'q2', 'q3', 'q4', 'q5', 'q6', 'q7', 'u0', 'u1', 'u2', 'u3', 'u4', 'u5', 'u6', 'u7', 'xd', 'mo'
+ structNames.push_back("t");
+ structNames.push_back("r");
+ structNames.push_back("p");
+ structNames.push_back("y");
+
+ structNames.push_back("q0");
+ structNames.push_back("q1");
+ structNames.push_back("q2");
+ structNames.push_back("q3");
+ structNames.push_back("q4");
+ structNames.push_back("q5");
+ structNames.push_back("q6");
+ structNames.push_back("q7");
+
+ structNames.push_back("u0");
+ structNames.push_back("u1");
+ structNames.push_back("u2");
+ structNames.push_back("u3");
+ structNames.push_back("u4");
+ structNames.push_back("u5");
+ structNames.push_back("u6");
+ structNames.push_back("u7");
+
+ structNames.push_back("dx");
+ structNames.push_back("mo");
+
+
+
+/* structNames.push_back("timeStamp");
+ structNames.push_back("objectId");
+ structNames.push_back("posX");
+ structNames.push_back("posY");
+ structNames.push_back("posZ");
+ */
+
+ structTypes = "fIfff";//I = int, f = float, B char
+
+ if (logFile==0)
+ {
+ logFile = createMinitaurLogFile("d:/logTest.txt", structNames, structTypes);
+ }
+
+ if (logFile)
+ {
+ for (int i=0;i<m_data->m_dynamicsWorld->getNumMultibodies();i++)
+ {
+ btMultiBody* mb = m_data->m_dynamicsWorld->getMultiBody(i);
+ btVector3 pos = mb->getBasePos();
+
+ MinitaurLogRecord logData;
+ float timeStamp = logTime;
+ int objectUniqueId = mb->getUserIndex2();
+ float posX = pos[0];
+ float posY = pos[1];
+ float posZ = pos[2];
+
+ logData.m_values.push_back(timeStamp);
+ logData.m_values.push_back(objectUniqueId);
+ logData.m_values.push_back(posX);
+ logData.m_values.push_back(posY);
+ logData.m_values.push_back(posZ);
+ //at the moment, appendMinitaurLogData will directly write to disk (potential delay)
+ //better to fill a huge memory buffer and once in a while write it to disk
+ appendMinitaurLogData(logFile, structTypes, logData);
+
+ }
+ fflush(logFile);
+ }
+ //void closeMinitaurLogFile(FILE* f);
+
+ logTime += timeStep;
+
+}
void PhysicsServerCommandProcessor::createEmptyDynamicsWorld()
{
@@ -803,6 +894,8 @@ void PhysicsServerCommandProcessor::createEmptyDynamicsWorld()
// m_data->m_dynamicsWorld->getSolverInfo().m_minimumSolverBatchSize = 2;
//todo: islands/constraints are buggy in btMultiBodyDynamicsWorld! (performance + see slipping grasp)
+
+ m_data->m_dynamicsWorld->setInternalTickCallback(logCallback,this);
}
void PhysicsServerCommandProcessor::deleteCachedInverseKinematicsBodies()