Forums

Full Version: Force Feedback bug
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
feedback is never reset to zero before the iteration loop.
In fact it is not even intialised before first use.
Is this intended?

Leo

Code:
void CARDYNAMICS::updateAction(btCollisionWorld * collisionWorld, btScalar dt)
{
...
    int repeats = 10;
    btScalar dt_internal = dt / repeats;
    for (int i = 0; i < repeats; ++i)
    {
        Tick(dt_internal, force, torque);

        feedback += 0.5 * (tire[FRONT_LEFT].GetFeedback() + tire[FRONT_RIGHT].GetFeedback());
    }
    feedback /= (repeats + 1);
...
}
Good catch.

The loop is OK, just a low pass to smooth the value (n + 1 values / n + 1). But the initial value should be set of course.

I've pushed a fix, don't have access to a ff-device to test atm unfortunately.
Shouldn't feedback be set to zero before 10 iterations loop in CARDYNAMICS::updateAction() ?
It is the algorithmic implementation of a low pass filter(to smooth the value):
Quote:for i from 1 to n
y[i] :=a * x[i] + (1 - a) * y[i-1]
with a = 10/11.

It would be more obvious with:
Code:
    float new_feedback = 0
    for (int i = 0; i < repeats; ++i)
    {
        ...
        new_feedback += 0.5 * (tire[FRONT_LEFT].GetFeedback() + tire[FRONT_RIGHT].GetFeedback());
    }
    new_feedback /= repeats;                            // average of internal solver loop aka new_feedback
    float a = repeats / (repeats + 1)                    // weight
    feedback = a * new_feedback + (1 - a) * feedback;    // low pass
Sure, I could see exponentially decaying LPF algorithm but I was not sure if it was intentional. I am just surprised to see an arbitrary bodge in an academically accurate simulator. Smile
Leo
Academically accurate simulator ?
Well, if you account for things like contact patch displacement in an Ackermann geometry I'd call it reasonably accurate.
Leo
For my taste, there is a bit too much stuff going on at tire contacts and the suspension behaves not so well at the simulation steps we are running. But yeah, it is somewhat of an approximation/compromise.

I wish I had time to work on my fork to make it a bit more accurate.
OK, one thing that could be done is to move the low pass filter stuff out of the simulation into force feedback code and return current "normalized steering torque" instead of the feedback value.

Anyone interested?
I agree that this is the best solution.