2
$\begingroup$

I am working with OpenRAVE simulator and I am using ODE Physics (OpenRAVE plugin to support ODE).

I have a robot in an environment and multiple other objects that are subject to the physics engine. I would like to send velocities to the robot for the duration of 1 second (in real time). I am able to achieve something like this with the following logic:

penv->StartSimulation(0.001);
while(true) {    
    {
        EnvironmentMutex::scoped_lock lock(penv->GetMutex());
        robot->SetVelocity(OpenRAVE::Vector(0.1, 0, 0), OpenRAVE::Vector(0, 0, 0));
    }
}
penv->StopSimulation();

Note that although not included in the code above, I keep a timer since the start of the simulation and I am constantly checking it until I reach 1 second of difference, in which case I break out of the while loop.

Now, what I really want to do, is to simulate the real time into simulation time. So the same result to happen in faster time (i.e fast-forward) the result of applying the robot velocities for 1 real time second but let's say in 10, 100ms or any other time less than a second. I am basically looking on how to get the final result of applying the velocities (including how the environment will react to the robot-to-object interactions using the physics engine).

I have tried few things but nothing worked. Here is the closest I can get:

penv->StartSimulation(0.001, false);
double sim = 0.000001 * penv->GetSimulationTime();
while(true) {
    if (0.000001*penv->GetSimulationTime() > sim+1)
    {
        break;
    }

    {
        EnvironmentMutex::scoped_lock lock(penv->GetMutex());
        robot->SetVelocity(OpenRAVE::Vector(0.1, 0, 0), OpenRAVE::Vector(0, 0, 0));
    }
}
penv->StopSimulation();

The false at the StartSimulation indicates that the simulation does not happen in real time and the SimulationStep is called as fast as possible.

The problem I am getting is that the robot (and probably the physics) are not keeping the robot at the right position. When I execute the above solution by the end of it, the robot is fall down from the ground for some reason. I have also tried calling penv->StepSimulation(0.001); but this did nothing more.

Any ideas?

$\endgroup$

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.