From ebf4f35dd7771c5d18492d59ec38dd38ab12130e Mon Sep 17 00:00:00 2001
From: Sidi Liang <1467329765@qq.com>
Date: Fri, 17 Jan 2020 20:15:26 +0800
Subject: [PATCH] Engine: MAJOR bug fix
---
Nasal/engine.nas | 28 ++++++++++++++++------------
followme_e-tron.xml | 2 +-
2 files changed, 17 insertions(+), 13 deletions(-)
diff --git a/Nasal/engine.nas b/Nasal/engine.nas
index 755d262..742c793 100644
--- a/Nasal/engine.nas
+++ b/Nasal/engine.nas
@@ -1,4 +1,5 @@
#//Followme EV electric engine by Sidi Liang
+var N2LBS = 0.2248089;
var Engine = {
#//Class for any electric engine
#//mTorque: Max torque, mPower: Max Power, rpmAtMPower: RPM at max power
@@ -17,7 +18,7 @@ var Engine = {
isRunning: func(){
return me.runningState;
},
-
+
direction: 1,
setDirection: func(dir){
me.direction = dir;
@@ -41,6 +42,10 @@ var Engine = {
return me.gear;
},
+ rotor_moi: 2.5,
+ wheel_moi: 0.7688,
+ wheel_radius: 0.31, #//M
+
rpm: 0,
maxTorque: 460, #Nm
@@ -64,7 +69,7 @@ var Engine = {
var friction_lbs = props.getNode("/",1).getValue("fdm/jsbsim/forces/fbx-gear-lbs");
var friction = 4.4492 * friction_lbs;
#//var frictionTorque = friction * 0.045;
- var angularDecelaeration = friction * 0.072; #//frictionTorque = friction * 0.15 * 0.3, angularDecelaeration = frictionTorque/0.625;
+ var angularDecelaeration = friction * me.wheel_radius * (1/me.wheel_moi) * 0.25; #//frictionTorque = friction * wheel_radius, angularDecelaeration = frictionTorque/wheel_moi;
#print(angularAcceleration);
#print("de"~angularDecelaeration);
@@ -80,7 +85,7 @@ var Engine = {
if(angularSpeed + totalAcceleration * 0.1 > 10){
angularSpeed = angularSpeed + totalAcceleration * 0.1;
}else if(angularSpeed + totalAcceleration * 0.1 < 10){
- #print("angularSpeed + totalAcceleration * 0.1 < 10");
+ #print("angularSpeed + totalAcceleration * 0.01 < 10");
angularSpeed = angularSpeed + angularAcceleration * 0.1;
}
}else if(me.getDirection() == -1){
@@ -122,26 +127,26 @@ var Engine = {
var cmdPower = throttle * me.ratedPower;
#print("cmdPower: "~cmdPower);
- me.activePower_kW = math.abs(me.rpm * me.torque / 10824);
+ me.activePower_kW = math.abs(me.rpm * me.torque / 9549);
if(math.abs(me.rpm) < cmdRpm){
#print("me.rpm < cmdRpm");
me.torque = throttle * me.maxTorque * direction;
- var angularAcceleration = me.torque / 0.175; #rad/s^2
+ var angularAcceleration = me.torque / me.rotor_moi; #rad/s^2
me.rpm = me.rpm_calculate(angularAcceleration);
}else if(throttle == 0){
me.activePower_kW = 0;
me.torque = 0;
- var angularAcceleration = direction * math.abs(me.torque) / 0.175; #rad/s^2
+ var angularAcceleration = direction * math.abs(me.torque) / me.rotor_moi; #rad/s^2
me.rpm = me.rpm_calculate(angularAcceleration);
}else{
me.activePower_kW = cmdPower;
- var angularAcceleration = direction * math.abs(me.torque) / 0.175; #rad/s^2
+ var angularAcceleration = direction * math.abs(me.torque) / me.rotor_moi; #rad/s^2
me.rpm = me.rpm_calculate(angularAcceleration);
- me.torque = direction * math.abs(me.activePower_kW / me.rpm * 10824);
+ me.torque = direction * math.abs((9549 * me.activePower_kW) / me.rpm);
}
- var force = 3.33 * me.torque * me.gear;
+ var force = (1/me.wheel_radius) * me.torque * me.gear;#//unit: N
me.outputForce = force;
@@ -150,7 +155,7 @@ var Engine = {
}
- outputForce(me.outputForce);
+ outputForce(me.outputForce * N2LBS);
},
@@ -253,5 +258,4 @@ var startEngine = func(){
var stopEngine = func(){
engine_1.stopEngine();
print("Engine stopped");
-}
-
+}
\ No newline at end of file
diff --git a/followme_e-tron.xml b/followme_e-tron.xml
index 1d4a47f..a88b04e 100644
--- a/followme_e-tron.xml
+++ b/followme_e-tron.xml
@@ -40,7 +40,7 @@
5334
11945
0
- 3000
+ 995
1.5
0.0