2
\$\begingroup\$

I'm currently in the process of programming a racing simulator. I currently have a full drivetrain set up that includes an Engine, Transmission, Transfer case, and differential.

The engine has two rpm values that it mixes into one value, "UnloadedRPM" & "ActualRPM". UnloadedRPM is used when the clutch is fully depressed or if I am in neutral. ActualRPM is derived from the average wheel rpm and multiplied through the differential, transfer case, and transmission to give me the engine rpm when in gear.

The issue I am running into is with the phenomena known as "Clutch kicking".

In a manual transmission, if you rev the engine close to its max rpm while in gear but with the clutch fully depressed and suddenly release the clutch the sudden jolt of force should cause the connected wheels to spin and lose traction. Given they receive enough force.

My issue is that with my current simulation model when I attempt to perform a "clutch kick" no torque is sent to the wheels because the engine rpm changes from "UnloadedRPM" to "ActualRPM" to quickly and if the wheel are not rotating then the "ActualRPM" is at 0 which also means the Engines output torque is 0.

Solutions that I have tried inlude;

interpolating the clutch value from 1 to 0 so that there is a smooth transition from "UnloadedRPM" and "ActualRPM" but that does not satisfy the conditions for a "clutch kick".

Calculating flywheel torque from it's inertia and angular acceleration/deceleration and applying it the wheels. This does not produce nearly enough torque to rotate the wheels and only applies the torque for one simulation cycle.

setting the wheel velocity manually to the engine RPM right before I release the clutch. this created a very jarring and "spaztic" behavior for the engine.

This does not need to be 100% accurate to the real world. However, it should be able to mimic the real thing and come off as passable for realistic

Any help would be very appreciated.

\$\endgroup\$

2 Answers 2

1
\$\begingroup\$

Instead of setting the RPM of the engine, instead model the clutch as a variable torque limited connection.

When UnloadedRPM (clutch input) != ActualRPM (clutch output), then apply torque to the wheels and counter torque to engine based on the difference and the clutch engagement.

The effect of the counter torque on the unloaded RPM is going to depend on the engine stats. In extreme that might even cause a stall.

\$\endgroup\$
0
\$\begingroup\$

I'm making an engine simulation of my own as well and in my opinion my solution works kinda well:

You said you tried the flywheel thing and it only goes for one cycle. This is the right path, you just gotta model the way that the torque from the kinetic energy of the flywheel dissipates, either through clutch slip or even better if you have an aggressive clutch: drivetrain flex. Really think about it: probably in those cases where the car barely clutch kicks/almost stalls, the thing that saves it from stalling is some sort of flexing in the drivetrain that creates a fast and slight RPM slip not from the engine to the gearbox input but from the gearbox output to the other ends (even the suspension and struts contributes to this but not necessary in the simulation; just do it for gearbox output to diff input I think).

You pair this with the correct flywheel kinetic energy model (where to accelerate the engine, the flywheel torque is "subtracted" from final torque, and when the engine is decelerating that signal is instead positive; smoothing/adding delay in this case will reduce KE torque when hitting the rpm limiter so i wouldn't recommend but idk, it could be right). Include some initial clutch slip as well (obviously not too much, smoothing/delaying clutch torque until it fully locks could be a nice addition to the model) and I think you're good.

I'm not a physicist by any means, but adding all of this feels realistic, not too much torque, it can still stall with a lighter flywheel and lower torque, which should happen still, and adding more flywheel weight and/or more torque helps in a way that at least feels realistic.

If you've not solved this yet, I hope it helps, good luck!!!

\$\endgroup\$
0

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .