.Tom 1 Posted July 23, 2020 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 this post Link to post Share on other sites
reyhard 2082 Posted July 27, 2020 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: 1. Start with dampingRateInAir at 4500 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 this post Link to post Share on other sites
.Tom 1 Posted August 23, 2020 this solved my problem, thanks 1 Share this post Link to post Share on other sites