Systems: improve steering

This commit is contained in:
Sidi Liang 2020-04-22 19:39:11 +08:00
parent 6fac6ad77b
commit 43c793a2b6
No known key found for this signature in database
GPG Key ID: 79F0A6B20B72F42F
4 changed files with 51 additions and 29 deletions

View File

@ -21,49 +21,51 @@ memoize.lookup = func(value) {
}
var Steering = {
new: func() {
print("Steering system initialized!");
return {parents:[Steering]};
var steering = { parents:[Steering] };
props.getNode("/controls/steering_wheel/steering_limit-deg", 1).setValue(steering.steeringLimit * R2D);
return steering;
},
mode: 0, #//0: direct; 1: advanced
debugMode: 0,
input: 0, #//-1: left, 1:right, 0: none
command: 0, #//Steering command, range from -1 to 1
steeringAngle: 0, #//in rad
steeringAngleDeg: 0, #//in degrees
#steeringAngleDeg: 0, #//in degrees
steeringLimit: 15.707963, #// 5 * 3.1415926
powPointThree: memoize.new( func(value){
return math.pow(value, 0.3);
}),
powPointOne: memoize.new( func(value){
return math.pow(value, 0.1);
}),
steeringStep:func(rad){
return 0.1 * me.powPointOne.lookup(sprintf("%.1f", math.abs(rad))) + 0.04;
},
neutralStep: func(rad){
var speed = props.getNode("/", 1).getValue("sim/multiplay/generic/float[15]");
return 0.01 * me.powPointThree.lookup(sprintf("%.1f", math.abs(speed))) * math.abs(rad);
return 0.03 * me.powPointThree.lookup(sprintf("%.1f", math.abs(speed))) * math.abs(rad);
},
mainLoop: func(){
if(me.input == 0)
{
if(math.abs(me.steeringAngle) <=0.2)
{
me.steeringAngle = 0;
me.steeringAngleDeg = me.steeringAngle * R2D;
props.getNode("/",1).setValue("/controls/flight/rudder", me.command);
props.getNode("/",1).setValue("/controls/steering_wheel", me.steeringAngleDeg);
#me.steeringAngleDeg = me.steeringAngle * R2D;
#props.getNode("/",1).setValue("/controls/steering_wheel", me.steeringAngleDeg);
}
if(me.steeringAngle == 0)
{
@ -95,11 +97,11 @@ var Steering = {
else
me.steeringAngle -= me.steeringStep(me.steeringAngle);
}
me.command = me.steeringAngle / me.steeringLimit; #//The steering wheel could rotate for two circles and a half
me.steeringAngleDeg = me.steeringAngle * R2D;
#me.steeringAngleDeg = me.steeringAngle * R2D;
props.getNode("/",1).setValue("/controls/flight/rudder", me.command);
props.getNode("/",1).setValue("/controls/steering_wheel", me.steeringAngleDeg);
#props.getNode("/",1).setValue("/controls/steering_wheel", me.steeringAngleDeg);
if(me.debugMode)
{
print("Steering system command:" ~ me.command);
@ -107,14 +109,14 @@ var Steering = {
print("Steering system angle degrees:" ~ me.steeringAngleDeg);
}
},
inputLeft: func(){
me.input = -1;
if(!me.mode){
me.command = -0.5;
me.steeringAngleDeg = me.steeringLimit * me.command * R2D;
me.command = -0.5;
props.getNode("/",1).setValue("/controls/flight/rudder", me.command);
props.getNode("/",1).setValue("/controls/steering_wheel", me.steeringAngleDeg);
#me.steeringAngleDeg = me.steeringLimit * me.command * R2D;
#props.getNode("/",1).setValue("/controls/steering_wheel", me.steeringAngleDeg);
}else if(me.mode and !me.timerStarted){
me.startTimer();
}
@ -123,9 +125,9 @@ var Steering = {
me.input = 1;
if(!me.mode){
me.command = 0.5;
me.steeringAngleDeg = me.steeringLimit * me.command * R2D;
props.getNode("/",1).setValue("/controls/flight/rudder", me.command);
props.getNode("/",1).setValue("/controls/steering_wheel", me.steeringAngleDeg);
#me.steeringAngleDeg = me.steeringLimit * me.command * R2D;
#props.getNode("/",1).setValue("/controls/steering_wheel", me.steeringAngleDeg);
}else if(me.mode and !me.timerStarted){
me.startTimer();
}
@ -134,14 +136,14 @@ var Steering = {
me.input = 0;
if(!me.mode){
me.command = 0;
me.steeringAngleDeg = me.steeringLimit * me.command * R2D;
props.getNode("/",1).setValue("/controls/flight/rudder", me.command);
props.getNode("/",1).setValue("/controls/steering_wheel", me.steeringAngleDeg);
#me.steeringAngleDeg = me.steeringLimit * me.command * R2D;
#props.getNode("/",1).setValue("/controls/steering_wheel", me.steeringAngleDeg);
}else if(me.mode and !me.timerStarted){
me.startTimer();
}
},
steeringTimer: nil,
timerCreated: 0,
timerStarted: 0,
@ -172,4 +174,4 @@ addcommand("enableAdvancedSteering", func() {
addcommand("disableAdvancedSteering", func() {
steeringAssistance.mode = 0;
print("Advanced Steering Disabled");
});
});

View File

@ -109,6 +109,7 @@ props.getNode("systems/plate/file", 1).setValue("NONE");
props.getNode("systems/plate/name", 1).setValue("NONE");
props.getNode("controls/lighting/headlight-als", 1).setValue(0);
props.getNode("controls/lighting/highBeam", 1).setValue(0);
props.getNode("/controls/steering_wheel", 1).setValue(0);
props.getNode("controls/interior/luxury/storage_cover_pos", 1).setValue(0);
props.getNode("sim/remote/pilot-callsign", 1).setValue("");
props.getNode("systems/codriver-enable", 1).setValue(0);

View File

@ -563,6 +563,9 @@
<float n="19" alias="/controls/gear/brake-parking"/>
<float n="22" alias="/controls/engines/engine/throttle"/>
<float n="23" alias="/fdm/jsbsim/animation/storage_cover_pos"/>
<float n="24" alias="/controls/interior/luxury/storage_cover_pos"/>
<!--<string n="0" alias="/systems/plate"/>-->
<string n="1" alias="/systems/battery-gauge/type"/>

View File

@ -430,6 +430,10 @@
</clipto>
<output>fcs/rudder-pos-norm</output>
</summer>
<lag_filter name="fcs/rudder-pos-norm">
<input>fcs/rudder-cmd-norm</input>
<c1>30</c1>
</lag_filter>
</channel>
</flight_control>
@ -500,7 +504,7 @@
</external_reactions>
<system name="Followme EV animations">
<channel name="Stroage">
<channel name="Stroage" execrate="2">
<fcs_function name="animation/storage_nul">
<function>
<table>
@ -522,5 +526,17 @@
<c1>3</c1>
</lag_filter>
</channel>
<channel name="SteeringWheel">
<fcs_function name="animation/steering_nul">
<function>
<product>
<property>/controls/steering_wheel/steering_limit-deg</property>
<property>/controls/flight/rudder</property>
</product>
</function>
</fcs_function>
</channel>
</system>
</fdm_config>