Confused about wheel's tractive force...

Started by
4 comments, last by Buckeye 9 years, 1 month ago

Hello,

I been developing a simple car physics system (for learning purposes) in Unity flowing the famous Marco Monster tutorial about Car Physics

http://www.asawicki.info/Mirror/Car%20Physics%20for%20Games/Car%20Physics%20for%20Games.html however I am getting really confused about how compute the wheel's traction force, I simple cant get (understand) enough from the tutorial to compute it, so I really appreciate if you could give me some advice or point to some tutorials about it.

Here is part of my code to compute up to drive torque:


// My gear ratios (unity AnimationCurve)

var gearRatio = _gearRatiosCurve.Evaluate(_currentGear);

// wheel rpm (for now I am just using the easy way) to get my project running...

var wheelRpm = (speed / rearLeftWheel.radius) * 60.0f / (2.0f * Mathf.PI);

var engineRpm = MinEngineRpm + wheelRpm * gearRatio * _differentialRatio;

var engineTorque = _torqueCurve.Evaluate(engineRpm) * _throttle;

var driveTorque = engineTorque * gearRatio * _differentialRatio * _transmissionEfficiency;

// At this point, I need compute the traction torques from both wheels so I can get the total torque on wheel...

Worth not that I am not trying to do a full simulation, so simpler (arcade like) formulas should work for my project.

Thanks in advance!

Kromen

Advertisement

The maximum tangential force that a tire can produce can be simulated as mu * normal-force where the tire touches the ground. mu is the coefficient of friction between the tire and the surface. normal-force is the force normal to the tire's surface where it meets the "ground."

Depending on wet-to-dry conditions, and the type of tire, mu is commonly modeled as 0.3 (wet, slippery) to 0.75 (dry). I don't know how you're modeling the suspension, but the downward force under static conditions (normal-force straight "down") on one of four tires is approx. chassis-mass * gravity / 4, assuming equal weight distribution front-to-back and side-to-side.

Given drive torque, assuming that's the torque to the drive axle, the maximum available force for a tire at the surface, assuming 2 drive wheels and torque applied (divided) equally to each wheel, is drive-torque / ( 2 * radius ).

The tangential force on a drive tire is, then, the lesser of mu*normal-force and drive-torque / (2*radius).

Please don't PM me with questions. Post them in the forums for everyone's benefit, and I can embarrass myself publicly.

You don't forget how to play when you grow old; you grow old when you forget how to play.

Hello Buckeye, thanks for your answer, it really helped me as now I can simulate different terrains and in overall its working, however I cant get the correct wheel angular velocity, as I commented above, I am using the formulas from the Marco Monster tutorial.

Here is my current implementation (for one of the two powered wheels) without suspension force:


// The wheel's drive force (driveTorque is the torque delivered via gearbox)

var driveForce = driveTorque / _radius;

// Normal force in this wheel
 
var normalForce = _rigidbody.mass * 9.81f * 0.25f * _mu;

// Traction force, this is the force I apply to my ridigbody

var tractionForce = Mathf.Min(driveForce, normalForce);

// Now I try to compute the wheel angular velocity (not working... :( )

var tractionTorque = tractionForce * _radius;

// The drive torque minus the friction torques that counteract it (braking torque if you're braking and traction torque from the contact with the road surface)

totalTorque = driveTorque - tractionTorque - brakeTorque;

// totalTorque / cylinder inertia.

var angularAcceleration = totalTorque / (_mass * _radius * _radius * 0.5f);

_angularVelocity += angularAcceleration * Time.deltaTime;

The above in theory should work (i guess biggrin.png), but unfortunately the wheel angular velocity seems not right at all, so I appreciate any help about this.

Regards,

Kromen


so I appreciate any help about this.

About what, exactly? As you're the only one that knows what "seems not right at all" means, the only suggestion I can make is to change your code to get what you want, or change your expectations.

Please don't PM me with questions. Post them in the forums for everyone's benefit, and I can embarrass myself publicly.

You don't forget how to play when you grow old; you grow old when you forget how to play.


so I appreciate any help about this.

About what, exactly? As you're the only one that knows what "seems not right at all" means, the only suggestion I can make is to change your code to get what you want, or change your expectations.

Ha you right, that was a late response :), what I mean about this, is if I plug my computed angular velocity back to my wheelRpm (used to get the engine rpm), the car moves much more slow and wheels slip, much like if the car were on wet or ice surface even with high friction coefficient (mu = 1).

So I ended with a simpler way to compute the wheel's angular velocity, using its relative forward (longitudinal) velocity over its radius.

Anyway I really appreciate you kind help.

Best Regards,

Kromen

Yeah, handling feedback RPM is tricky. You have to decide if the wheel is slipping to determine what mu to use (sliding friction is less than rolling friction), so it gets circular. You have to decide how complicated you want your calcs to be. Simplification as you've done works pretty well. That's why it's called simulation! wink.png

Please don't PM me with questions. Post them in the forums for everyone's benefit, and I can embarrass myself publicly.

You don't forget how to play when you grow old; you grow old when you forget how to play.

This topic is closed to new replies.

Advertisement