Full Version: bullet dynamics
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
I've checked in a bunch of new code(r2807). I hope I haven't broken too much.

- bullet vdrift synchronization rewrite(fetch forces from bullet)
- constraint based suspension(unsprung mass simulation still needs some polishing)
- clutch bugfix(switch to constraint based clutch)

Report your issues here.
This is unrelated to your latest change (and may have been a bug from long ago) but I noticed that the TCS is (hyper) active in neutral, which makes it hard to rev. Tested with TC6 on rouen.
The calculated wheel moment of inertia is too low, makes TCS go mad. It is an issue for heavy cars(greater normal force means stronger oscillations). A workaround would be to increase the inertia. At the moment a factor of two is used. I'd prefer to fix the tire oscillations. Will see if I can figure it out.
By the way, the current TCS is adjusting the throttle due to some heuristic. I'd like to merge it(internally) with the ABS to use the brakes to control traction. It could be developed to a full ESC(optional) someday.
I was just thinking we could disable TCS in neutral for now....
Suspension forces first second M7 hitting Paul Rickard (r2812). Looks like a damped oscillation to me, lol. You might notice the noise. The car is oscillating sligthly all the time. Need to compare it with the case without tire forces.

[Image: M70kij6.png]

red = front left
green = front right
blue = rear left
magenta = rear right

Update(suspension forces only):

[Image: M7_clear6g2ai.png]

The suspension looks quite good, the noise is coming from tire code.
The tires are an extremely stiff problem (very high forces from very small movement) so I'm not sure how much you'll be able to fix those oscillations without increasing the frequency of the simulation... although, what numerical integration method are you using? I previously found the SUVAT method to be the most stable, but maybe more experimentation is in order. Here's my previous findings:
I've already been using your findings as reference while working on the suspension, thanks. The wheel/tire simulation has not changed, still running SUVAT. Now that the suspension is kinda OK. I am looking into the wheels/tire forces to get a better idea of what is going on there.

By the way, I've just checked some moments of inertia("principal axes"):
M7: 200, 2405, 2558
F1-02: 65, 650, 705

The value for the x-axis(longitudinal) is a bit low. Maybe we should go away from particles towards bounding box inertia. Would need the bounding boxes for car components(engine, fuel tank, bodywork) though to get the center of mass right.
The tire forces(longitudinal) don't look that good(M7, Paul Rickard) . The normal force for the front tires is about 2800, rear 4000. The forces are exceeding the normal force, need to check the tire slip values, pacejka curve.
3412.7 -3976.57 903.867 5200.34
-3624.11 3030.86 -5259.24 -3626.98
3275.24    3451.03 3851.89 4137.6
-3794.56 -2962.15 -4716.76 -3894.72
3129.43 -1692.9 3984.28 4757.65
-3891.92 3805.49 -4717.65 -4018.12
2932.54 -3310.46 4011.66 4731.03
3667.67 4008.26 -4706.29 -4033.07
-3052.99 -3041.55 4074.73 4723.54
-2719.6 -3004.13 -4611.24 -4023.25
Have been playing around with a friction constraint(relative to car body). It removes the car jiggling, especially noticeable with the F1-02 standing still(full brakes). But I am not sure if it's worth the computation time. It doesn't help with the slip. Sad

    MATHVECTOR <T, 3> position = wheel_contact.GetPosition() - Position();
    T friction_magnitude = tire_friction.Magnitude();
    if (friction_magnitude > 0)
        MATHVECTOR <T, 3> tangent = tire_friction / friction_magnitude;
        T rel_velocity =;
        T max_friction = std::abs(rel_velocity) / (body.GetInvEffectiveMass(position, tangent) * dt);
        if (friction_magnitude > max_friction) friction_magnitude = max_friction;
        else if (friction_magnitude < -max_friction) friction_magnitude = -max_friction;
        tire_friction = tangent * friction_magnitude;
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16