# Vehicle doesn't accelerate faster than 12kph

## Recommended Posts

As the title says, i have a problem with the physx.hpp and the tank only reaches 12kph, it doesn't change gears.

This is the physx that i'm using

simulation= tankX;
maxSpeed=75;
waterResistanceCoef=0.4200;
enginePower=536.904;
maxOmega=251.327;
minOmega=83.776;
peakTorque=2000;

torqueCurve[] 		= {
{0, 0},
{(1600/2640), (2650/2850)},
{(1800/2640), (2800/2850)},
{(1900/2640), (2850/2850)},
{(2000/2640), (2800/2850)},
{(2200/2640), (2750/2850)},
{(2400/2640), (2600/2850)},
{(2640/2640), (2350/2850)}
};
thrustDelay			= 0.42;    	/// how much time does it take to get the full thrust (default 1), used to reduce initial wheel slipping
clutchStrength 		= 180.0;
fuelCapacity		= 2000;
brakeIdleSpeed		= 0.75; 	/// speed in m/s below which braking is applied
switchTime			= 0;
latency 			= 2;
tankTurnForce		= 335500; /// Random magic number, expected to be something like 11 x mass of vehicle

/// Gearbox and transmission
idleRpm = 800; // RPM at which the engine idles.
redRpm = 2400; // RPM at which the engine redlines.

engineLosses = 20; // power losses on the engine's crank-shaft (before the gearbox) in Nm. (Multiplied by the gear ratio)
transmissionLosses = 15; // power losses on wheel axis (in/after the gearbox) in Nm. (Constant)
changeGearType="rpmratio";
changeGearOmegaRatios[] = {
__EVAL(2400/2400)    , __EVAL(1200/2400),   // R1
__EVAL(800/2400)     , 0,                   // N
__EVAL(2300/2400)    , __EVAL(1200/2400),   // D1
__EVAL(2300/2400)    , __EVAL(1200/2400),   // D2
__EVAL(2300/2400)    , __EVAL(1200/2400),   // D3
__EVAL(2300/2400)    , __EVAL(1200/2400),   // D4
__EVAL(2300/2400)    , __EVAL(1200/2400),	// D5
__EVAL(2300/2400)    , __EVAL(1200/2400),   // D6
__EVAL(2300/2400)    , __EVAL(1200/2400)    // D7
};

class complexGearbox {
GearboxRatios[]    = {
"R2",-1.709,
"N",0,
"D1",6.267,
"D2",4.7,
"D3",3.318,
"D4",1.709,
"D5",1.128,
"D6",0.910,
"D7",0.752
};
gearBoxMode        = "full-auto"; //gearbox can be of type: full-auto (only requires 'W' or 'S'), auto (requires shift between drive and reverse), semi-auto, manual
moveOffGear        = 2; // defines what gear an automatic or semi-automatic gearbox will move off from stationary in. 1 by default.
driveString        = "D"; // string to display in the HUD for forward gears.
neutralString      = "N"; // string to display in the HUD for neutral gear.
reverseString      = "R"; // string to display in the HUD for reverse gears.
transmissionDelay  = 0.1;
};
/// end of gearbox

class Wheels {
class L2 {
boneName = "wheel_podkoloL1";
center   = "wheel_1_2_axis";
boundary = "wheel_1_2_bound";
damping  = 75.0;
// tanks do not have steerable wheels
steering = 0;
/// We need to distinguish the side to apply the right thrust value
side = "left";
/// weight of the wheel is defined per wheel, it reduces overall mass of vehicle
weight = 150;
mass = 150;
MOI = 25;
latStiffX = 25;
latStiffY = 280;
longitudinalStiffnessPerUnitGravity = 100000;
maxBrakeTorque = 40000;
sprungMass = 4000.0;
springStrength = 324000;
springDamperRate = 36000;
dampingRate = 1.0;
dampingRateInAir = 8830.0;
dampingRateDamaged = 10.0;
dampingRateDestroyed = 10000.0;
maxDroop = 0.15;
maxCompression = 0.15;
};
class L3: L2 {
boneName = "wheel_podkolol2";
center   = "wheel_1_3_axis";
boundary = "wheel_1_3_bound";
};
class L4: L2 {
boneName = "wheel_podkolol3";
center   = "wheel_1_4_axis";
boundary = "wheel_1_4_bound";
};
class L5: L2 {
boneName = "wheel_podkolol4";
center   = "wheel_1_5_axis";
boundary = "wheel_1_5_bound";
};
class L6: L2 {
boneName = "wheel_podkolol5";
center   = "wheel_1_6_axis";
boundary = "wheel_1_6_bound";
};
class L7: L2 {
boneName = "wheel_podkolol6";
center   = "wheel_1_7_axis";
boundary = "wheel_1_7_bound";
};
// rear left wheel, usually Idler or Drive Sproket
// Note, this wheel may not always be touching the ground, but we need it anyway!
class L9: L2 {
boneName = "wheel_podkolol9";
center   = "wheel_1_9_axis";
boundary = "wheel_1_9_bound";
sprungMass = 1500.0;
springStrength = 37500;
springDamperRate = 7500;
maxDroop = 0;
maxCompression = 0;
};
// front left wheel, usually Idler or Drive Sproket
// Note, this wheel may not always be touching the ground, but we need it anyway!
class L1: L2 {
boneName = "";
center   = "wheel_1_1_axis";
boundary = "wheel_1_1_bound";
sprungMass = 1500.0;
springStrength = 37500;
springDamperRate = 7500;
maxDroop = 0;
maxCompression = 0;
};

class R2: L2 {
boneName = "wheel_podkolop1";
center   = "wheel_2_2_axis";
boundary = "wheel_2_2_bound";
side = "right";
};
class R3: R2 {
boneName = "wheel_podkolop2";
center   = "wheel_2_3_axis";
boundary = "wheel_2_3_bound";
};
class R4: R2 {
boneName = "wheel_podkolop3";
center   = "wheel_2_4_axis";
boundary = "wheel_2_4_bound";
};
class R5: R2 {
boneName = "wheel_podkolop4";
center   = "wheel_2_5_axis";
boundary = "wheel_2_5_bound";
};
class R6: R2 {
boneName = "wheel_podkolop5";
center   = "wheel_2_6_axis";
boundary = "wheel_2_6_bound";
};
class R7: R2 {
boneName = "wheel_podkolop6";
center   = "wheel_2_7_axis";
boundary = "wheel_2_7_bound";
};
// rear right wheel, usually Idler or Drive Sproket
// Note, this wheel may not always be touching the ground, but we need it anyway!
class R9: R2 {
boneName = "wheel_podkolop9";
center   = "wheel_2_9_axis";
boundary = "wheel_2_9_bound";
sprungMass = 1500.0;
springStrength = 37500;
springDamperRate = 7500;
maxDroop = 0;
maxCompression = 0;
};
// front right wheel, usually Idler or Drive Sproket
// Note, this wheel may not always be touching the ground, but we need it anyway!
class R1: R2 {
boneName = "";
center   = "wheel_2_1_axis";
boundary = "wheel_2_1_bound";
sprungMass = 1500.0;
springStrength = 37500;
springDamperRate = 7500;
maxDroop = 0;
maxCompression = 0;
};
};

##### Share on other sites
mass		= 188;
MOI			= __EVAL(1.0*(0.5*188*(0.387^2)));		// radius 0.378626m

Use above equation to calculate MOI & then tweak dampingRate & dampingRateInAir - it's important that both parameters are keeping same value. Depending on amount of wheels, their size, spacing & mass that value can go anywhere from 1 to 9000.

To make is easier, try to follow following algorithm:

a) If it's too fast then pick value between 4500 & 9000 - in this case it will be 6750

b) If it's too slow then pick value between 4500 & 0- in this case it will be 2250

Generally, try to narrow down correct value by taking between middle value till you are closer to correct one. It's quite essential to diag_mergeConfigFile ( you can search for information about it on forums or Bohemia wiki - i.e.

dampingRate				= 1385.0;
dampingRateInAir		= 1385.0;

• 2

##### Share on other sites

this solved my problem, thanks

• 1

×

• Clubs