15. Interactive Simulation

         

 

This is the last ODE (Open Dynamics Engine) tutorial. Thank you very much for reading so far.

The last tutorial explains how to make an interactive simulation. You can use a keyboard to control objext in ODE. To realize that you have to make a command function which defines keys how to control objects.

Keyboard operation

The following sample code show the command function.  You can add force to objects and restart the simulation.

void  prepDrawStuff()
{
  fn.version = DS_VERSION;
  fn.start   = &start;
  fn.step    = &simLoop;
  fn.command = &command; // command function for key input
  fn.stop    = NULL;
  fn.path_to_textures = "../../drawstuff/textures";
}

/*** Command function is called by key input ***/
void command(int cmd)
{
  switch (cmd) {
    case ’s’: dBodyAddForce(pillar.body,50, 0, 0);break; // When s key is pressed
    case ‘j’: dBodyAddForce(ball.body ,0,-10, 0);break; // When j key is pressed   
    case ‘k’: dBodyAddForce(ball.body,0,  0,50);break; // When k is pressed
    case ‘l’: dBodyAddForce(ball.body,0, 10, 0);break; // When l is pressed
    case ‘r’:restart();break;   // When r is pressed
  }
}

/***  Restart simulation ***/
void restart()
{
  // Destroy
  dJointGroupDestroy(contactgroup); // Destroy a joint group
  destroyBall();    // Destroy a ball  
  destroyCylinder(); // Destroy a cylinder

  // Create
  contactgroup = dJointGroupCreate(0); // Create a new contact group
  createBall();   // Create a new ball
  createPillar();  // Create a new cylinder
}

/*** Destroy a ball ***/
void destroyBall()
{
  dBodyDestroy(ball.body);
  dGeomDestroy(ball.geom);
}

void destroyCylinder()
{
  dBodyDestroy(pillar.body);
  dGeomDestroy(pillar.geom);
}

static void simLoop (int pause)
{
  if (!pause) {
    dSpaceCollide(space,0,&nearCallback);
    dWorldStep(world,0.01);
    dJointGroupEmpty(contactgroup);
  }
 drawObject(ball.geom,1.3,0,0);
 drawObject(pillar.geom,0,0,1.3);
}

The command function process the key inputs. The command function realize an interactive simlation. In this case, the ’s’, ‘ j’ , ‘k’ , ‘ l’ keys add force the cylinder geometry.

Restart

If the  ’r’ key is pressed, then restart a simulation. However, if you want to restart the simulationm,  you must do some necessary processes. In the sample program,  to simplify, destroy the body and the geometry and rebirth them.

  • Delete the contact joiont
  • Reset the position and posture of bodies.
  • Reset the velocity and anglular velocity of the bodies.
  • If you control joints, reset the target velocity and the torque.

The source code, sample15.cpp,  can be downloaded from here.

Please download and enjoy it .

Thank you very much again for reading this ODE tutorials.

Cheers,

demu (Kosei Demura)


2 Responses to “ 15. Interactive Simulation ”

  1. demu MonsterID Icon demu 2009-05-24

    Hi zz,

    Thanks a lot !

    demu

  2. zz MonsterID Icon zz 2009-05-24

    it’s very good!

コメントどうぞ (Leave a Reply)

カウンタ (since 2008-3-15)