07-15-2008, 11:04 AM,
|
|
cologne
Member
|
Posts: 203
Threads: 35
Joined: Mar 2007
|
|
i've been thinking about suspension, also...
I think there is a problem in current simulation
We define wheel-position, travel and stiffness.
Real suspension does have a spring-force, when in down-position! So the springforce isn´t zero.
The best would be, to define a zero-Position of the wheel relative to the car body. this should be the desired Position when the car stands still. Additionally we need a negative and a positive travel.
The spring-stiffness - linear or a function - should be load with the wheel load. This should be the zero-point for the zero-Position of the wheel of the wheel.
|
|
07-15-2008, 08:52 PM,
|
|
cotharyus
Senior Member
|
Posts: 332
Threads: 17
Joined: Oct 2006
|
|
Remember Joe, not all springs use a straight linear rate - some springs use a compound or dual rate, where you actually have a lighter spring to keep things smooth to a point, then a stiffer spring to give it guts if you exceed a certain amount of travel. In general, as far as I know, this only applies to rally and some specialized off road (baja, dakar) vehicles, but I think everyone has always agreed that such tracks and vehicles would be fun to have, so lets leave an allowance for them.
|
|
07-16-2008, 07:36 AM,
|
|
cologne
Member
|
Posts: 203
Threads: 35
Joined: Mar 2007
|
|
Quote:then the travel is how far the springs can compress above that position.
This implicit says there is no spring-force on the lifted out wheel
But the values are
Wheel lifted out
static_wheelload = 0;
springforce_min > 0; travel = 0;
Wheel in defined position
springforce_zero = f( travel=0 );
static_wheelload = f(springtravel_zero );
Wheel in upper position
springforce_max >0; travel = max;
where
springforce = f( travel );
if linear springforce = f( travel ) = stiffness * travel;
--------
proposal
travel_negative = 5 defined frome the static wheelposition downwards
travel_positive = 10 defined frome the static wheelposition upwards
springtype = linear define the type of spring normalized to the wheel
linear_stiffness = 20000 define parameter for linear type
During car initialization compute one time
static_wheelload = f(springtravel_zero );
|
|
07-26-2008, 09:39 AM,
|
|
cologne
Member
|
Posts: 203
Threads: 35
Joined: Mar 2007
|
|
Quote:'re saying that with the car lifted in the air the wheel goes to the negative travel limit, which isn't necessarily where the spring force is zero.
That the point!
|
|
09-07-2008, 06:26 PM,
|
|
cologne
Member
|
Posts: 203
Threads: 35
Joined: Mar 2007
|
|
@joe
I tend to prefer a solution with interpolation points as used for the torque-curve
spring-xx = m, N
Another similar proposal defines the linear springrate as before, but allows additional factors
spring-constant = 600000
spring-factor-00 = 0.05, 1.1
spring-factor-01 = 0.10, 2.2
This means 5 cm travel x 600000 x 1.1 => force
This means 10 cm travel x 600000 x 2.2 => force
The same can be used for damperforces
bounce = 4000
rebound = 12000
damper-factor-00 = 5, 0.5
damper-factor-01 = 10, 1.6
I find these solutions good implementable, as well for the tune-up people.
|
|
07-20-2009, 06:42 AM,
|
|
Bringing this back up more to note down a few thoughts than to point out any issues, please forgive me if I start talking a load of crap
Rising rate springs has been mentioned, has this been implemented at all? Also on the same track is damper rates, there is a fairly good graph here:
EDIT: dead link
Googling images for "shock dyno" turned up quite a few more. I would imagine this would need something similar to the engine rpm-torque table, would it be feasible to implement that?
Another thing with spring rates is bump stops and it's a big thing. Rallying regulations used to (and may still) require manufacturers to use standard springs, they got around it by using the bump stops as the spring. Its just a block of rubber so its more or less an exponential curve for the rate but implementing it would probably mess up the whole zero position at the top of travel thing.
On the lower limit of suspension travel, its generally done with an almost rigid stop, usually a strap on a live axle and built into the shock for most other types. Usually there is about half an inch of give which could be the same for all cars without causing any trouble.
For the hinge points, its already been said that this is a very basic implementation. My thoughts on a slightly more complicated way of working it out is 2 hinge points, the first for the camber rotation which is generally aimed at the contact patch of the opposite tyre, in effect it tries to behave like a live axle.
The second hinge point relates to the movement of the contact patch with relation to suspension travel which generally pushes the contact patch out as the wheel rises on modern cars. This creates a kind of anti-roll behavior built into the suspension and is generally close to the center of gravity. It's the reason most modern cars are comfortable but feel very planted on the road and a lot of older cars (beetle and triumph spitfire for example) have really screwed up suspension.
I think that would give a more accurate (but still wrong) representation of suspension movement without getting into the huge complication of mathematical representations of every possible suspension configuration.
cheers
|
|
07-20-2009, 08:14 AM,
|
|
Tried something with the damper effects to give a more realistic curve, carsuspension.h@207:
Code: ///compute the suspension force for the given time interval
T GetForce(T dt) const
{
T damping = bounce;
//note that displacement is defined opposite to the classical definition (positive values mean compressed instead of extended)
velocity = (displacement - last_displacement)/dt;
//velocity = (displacement - last_last_displacement)*0.5/dt;
if (velocity < 0)
{
damping = rebound;
damp_force = sqrt(-velocity) * damping;
damp_force = -damp_force;
}
else
{
damp_force = sqrt(velocity) * damping;
}
spring_force = displacement * spring_constant; //when compressed, the spring force will push the car in the positive z direction
//damp_force = velocity * damping; //when compression is increasing, the damp force will push the car in the positive z direction
return spring_force + damp_force;
}
Works a bit too well, I wish I could buy dampers that good Doesn't seem too bad with the damper settings as they are in the .car file, if inertia could be added to the unsprung weight it could be quite realistic.
cheers
|
|
07-22-2009, 11:02 PM,
|
|
joevenzon
Administrator
|
Posts: 2,679
Threads: 52
Joined: Jun 2005
|
|
stan.distortion Wrote:Rising rate springs has been mentioned, has this been implemented at all?
Nope. :-(
Quote:Also on the same track is damper rates, there is a fairly good graph here:
http://www.streetracetech.com/Suspension_Basics.html
Googling images for "shock dyno" turned up quite a few more. I would imagine this would need something similar to the engine rpm-torque table, would it be feasible to implement that?
Yep, that's feasible.
Quote:Another thing with spring rates is bump stops and it's a big thing. Rallying regulations used to (and may still) require manufacturers to use standard springs, they got around it by using the bump stops as the spring. Its just a block of rubber so its more or less an exponential curve for the rate but implementing it would probably mess up the whole zero position at the top of travel thing.
On the lower limit of suspension travel, its generally done with an almost rigid stop, usually a strap on a live axle and built into the shock for most other types. Usually there is about half an inch of give which could be the same for all cars without causing any trouble.
A bumpstop could definitely be added; wouldn't be too tough.
Quote:For the hinge points, its already been said that this is a very basic implementation. My thoughts on a slightly more complicated way of working it out is 2 hinge points, the first for the camber rotation which is generally aimed at the contact patch of the opposite tyre, in effect it tries to behave like a live axle.
The second hinge point relates to the movement of the contact patch with relation to suspension travel which generally pushes the contact patch out as the wheel rises on modern cars. This creates a kind of anti-roll behavior built into the suspension and is generally close to the center of gravity. It's the reason most modern cars are comfortable but feel very planted on the road and a lot of older cars (beetle and triumph spitfire for example) have really screwed up suspension.
I think that would give a more accurate (but still wrong) representation of suspension movement without getting into the huge complication of mathematical representations of every possible suspension configuration.
That could be done. Right now the camber doesn't change as the suspension compresses; only the wheel/contact patch movement is implemented.
|
|
08-01-2009, 12:42 PM,
|
|
joevenzon
Administrator
|
Posts: 2,679
Threads: 52
Joined: Jun 2005
|
|
stan.distortion Wrote:Also on the same track is damper rates, there is a fairly good graph here:
http://www.streetracetech.com/Suspension_Basics.html
Googling images for "shock dyno" turned up quite a few more. I would imagine this would need something similar to the engine rpm-torque table, would it be feasible to implement that?
Okay, this is implemented in R2523. I implemented it as cologne suggested. Here's an example (this goes in the suspension-front and suspension-rear sections):
Code: damper-factor-1 = 0.08,1.0
damper-factor-2 = 0.1, 0.7
The damper-factor-* parameters define a curve for the damper response. Points are defined by specifying an x,y pair where x is an absolute value of suspension velocity in m/s and y is the factor to be applied to the damping coefficient. In this example, the damper factor will be 1.0 when the compression velocity absolute value is between 0 and 0.08 m/s, and then the damper factor will change linearly to 0.7 at 0.1 m/s (and beyond). The damper factor gets applied to the bonce or rebound damper coefficient, depending on the direction of travel. You can put as many damper-factor points as you want (just increase the damper-factor- number for each additional point).
|
|
08-01-2009, 01:57 PM,
|
|
joevenzon
Administrator
|
Posts: 2,679
Threads: 52
Joined: Jun 2005
|
|
stan.distortion Wrote:Rising rate springs has been mentioned, has this been implemented at all?
Yes, in R2524. :-)
Code: spring-factor-1 = 0.052, 1.0
spring-factor-2 = 0.055, 1.2
The spring-factor-1 and 2 parameters define a curve for the spring response. These can be omitted if desired, in which case a factor of 1.0 will be used everywhere. Points are defined by specifying an x,y pair where x is the suspension displacement in meters and y is the factor to be applied to the spring coefficient. In this example, the spring factor will be 1.0 when the displacement is between 0 and 0.052 m, and then the spring factor will change linearly to 1.2 at 0.055 m (and beyond). The spring factor gets multiplied by the spring-constant. You can put as many spring-factor points as you want (just increase the spring-factor- number for each additional point). Note that displacement values are relative to the "zero g", "zero force" position. For best results, start VDrift with the -debug option and observe suspension displacements during maneuvering to determine where you want to put your points.
|
|
|