Simplify the parameter interface for NNWalkers. Keys 1-9 cause speedup.

This commit is contained in:
Benelot
2016-09-18 00:42:34 +02:00
parent f0f694145d
commit 7cf4a2352c
2 changed files with 185 additions and 115 deletions

View File

@@ -102,6 +102,7 @@ void* GROUND_ID = (void*)1;
class NN3DWalkersExample : public CommonTimeWarpBase
{
btScalar m_Time;
btScalar m_SpeedupTimestamp;
btScalar m_targetAccumulator;
btScalar m_targetFrequency;
btScalar m_motorStrength;
@@ -116,6 +117,7 @@ public:
NN3DWalkersExample(struct GUIHelperInterface* helper)
:CommonTimeWarpBase(helper),
m_Time(0),
m_SpeedupTimestamp(0),
m_motorStrength(0.5f),
m_targetFrequency(3),
m_targetAccumulator(0),
@@ -150,8 +152,6 @@ public:
m_guiHelper->resetCamera(dist,pitch,yaw,targetPos[0],targetPos[1],targetPos[2]);
}
// virtual void renderScene();
// Evaluation
void update(const btScalar timeSinceLastTick);
@@ -520,7 +520,9 @@ bool legContactProcessedCallback(btManifoldPoint& cp, void* body0, void* body1)
// Make a circle with a 0.9 radius at (0,0,0)
// with RGB color (1,0,0).
if(nn3DWalkers->m_dynamicsWorld->getDebugDrawer() != NULL){
nn3DWalkers->m_dynamicsWorld->getDebugDrawer()->drawSphere(cp.getPositionWorldOnA(), 0.1, btVector3(1., 0., 0.));
if(!gIsHeadless){
nn3DWalkers->m_dynamicsWorld->getDebugDrawer()->drawSphere(cp.getPositionWorldOnA(), 0.1, btVector3(1., 0., 0.));
}
}
if(ID1 != GROUND_ID && ID1){
@@ -558,7 +560,7 @@ void floorNNSliderValue(float notUsed) {
void NN3DWalkersExample::initPhysics()
{
setupParameterInterface(); // parameter interface to use timewarp
setupBasicParamInterface(); // parameter interface to use timewarp
gContactProcessedCallback = legContactProcessedCallback;
@@ -760,19 +762,17 @@ bool NN3DWalkersExample::keyboardCallback(int key, int state)
case '[':
m_motorStrength /= 1.1f;
return true;
break;
case ']':
m_motorStrength *= 1.1f;
return true;
break;
case 'l':
printWalkerConfigs();
break;
return true;
default:
break;
}
return false;
return CommonTimeWarpBase::keyboardCallback(key,state);
}
void NN3DWalkersExample::exitPhysics()
@@ -791,15 +791,6 @@ void NN3DWalkersExample::exitPhysics()
CommonRigidBodyBase::exitPhysics();
}
//void NN3DWalkersExample::renderScene()
//{
// m_guiHelper->syncPhysicsToGraphics(m_dynamicsWorld);
//
// m_guiHelper->render(m_dynamicsWorld);
//
// debugDraw(m_dynamicsWorld->getDebugDrawer()->getDebugMode());
//}
class CommonExampleInterface* ET_NN3DWalkersCreateFunc(struct CommonExampleOptions& options)
{
nn3DWalkers = new NN3DWalkersExample(options.m_guiHelper);
@@ -919,6 +910,11 @@ void NN3DWalkersExample::update(const btScalar timeSinceLastTick) {
scheduleEvaluations(); /**!< Start new evaluations and finish the old ones. */
drawMarkings(); /**!< Draw markings on the ground */
// if(m_Time > m_SpeedupTimestamp + 1.0f){ // print effective speedup
// b3Printf("Avg Effective speedup: %f real time",calculatePerformedSpeedup());
// m_SpeedupTimestamp = m_Time;
// }
}
void NN3DWalkersExample::updateEvaluations(const btScalar timeSinceLastTick) {
@@ -1020,19 +1016,21 @@ void NN3DWalkersExample::scheduleEvaluations() {
}
void NN3DWalkersExample::drawMarkings() {
for(int i = 0; i < NUM_WALKERS;i++) // draw current distance plates of moving walkers
{
if(m_walkersInPopulation[i]->isInEvaluation()){
btVector3 walkerPosition = m_walkersInPopulation[i]->getPosition();
char performance[10];
sprintf(performance, "%.2f m", btSqrt(m_walkersInPopulation[i]->getDistanceFitness()));
m_guiHelper->drawText3D(performance,walkerPosition.x(),walkerPosition.y()+1,walkerPosition.z(),3);
if(!gIsHeadless){
for(int i = 0; i < NUM_WALKERS;i++) // draw current distance plates of moving walkers
{
if(m_walkersInPopulation[i]->isInEvaluation()){
btVector3 walkerPosition = m_walkersInPopulation[i]->getPosition();
char performance[10];
sprintf(performance, "%.2f m", btSqrt(m_walkersInPopulation[i]->getDistanceFitness()));
m_guiHelper->drawText3D(performance,walkerPosition.x(),walkerPosition.y()+1,walkerPosition.z(),3);
}
}
}
for(int i = 2; i < 50; i+=2){ // draw distance circles
if(m_dynamicsWorld->getDebugDrawer()){
m_dynamicsWorld->getDebugDrawer()->drawArc(btVector3(0,0,0),btVector3(0,1,0),btVector3(1,0,0),btScalar(i), btScalar(i),btScalar(0),btScalar(SIMD_2_PI),btVector3(10*i,0,0),false);
for(int i = 2; i < 50; i+=2){ // draw distance circles
if(m_dynamicsWorld->getDebugDrawer()){
m_dynamicsWorld->getDebugDrawer()->drawArc(btVector3(0,0,0),btVector3(0,1,0),btVector3(1,0,0),btScalar(i), btScalar(i),btScalar(0),btScalar(SIMD_2_PI),btVector3(10*i,0,0),false);
}
}
}
}