Jump to content
  • Advertisement
Sign in to follow this  
kromen

Confused about wheel's tractive force...

This topic is 1380 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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

Share this post


Link to post
Share on other sites
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).

Edited by Buckeye

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites


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.

Share this post


Link to post
Share on other sites

 


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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!