Post Reply 
 
Thread Rating:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Force Feedback bug
07-15-2012, 04:06 PM
Post: #1
Force Feedback bug
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);
...
}
Find all posts by this user
Quote this message in a reply
07-15-2012, 04:53 PM
Post: #2
 
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.
Find all posts by this user
Quote this message in a reply
07-15-2012, 06:28 PM
Post: #3
 
Shouldn't feedback be set to zero before 10 iterations loop in CARDYNAMICS::updateAction() ?
Find all posts by this user
Quote this message in a reply
07-16-2012, 01:54 AM
Post: #4
 
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
Find all posts by this user
Quote this message in a reply
07-16-2012, 05:15 AM
Post: #5
 
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
Find all posts by this user
Quote this message in a reply
07-16-2012, 05:24 AM
Post: #6
 
Academically accurate simulator ?
Find all posts by this user
Quote this message in a reply
07-16-2012, 05:33 AM
Post: #7
 
Well, if you account for things like contact patch displacement in an Ackermann geometry I'd call it reasonably accurate.
Leo
Find all posts by this user
Quote this message in a reply
07-16-2012, 05:55 AM
Post: #8
 
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.
Find all posts by this user
Quote this message in a reply
07-16-2012, 06:32 AM
Post: #9
 
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?
Find all posts by this user
Quote this message in a reply
07-16-2012, 07:20 AM
Post: #10
 
I agree that this is the best solution.
Find all posts by this user
Quote this message in a reply
Post Reply 


Forum Jump:


User(s) browsing this thread: 1 Guest(s)