Skip to content

Commit

Permalink
Landing gear
Browse files Browse the repository at this point in the history
- Updated include file wHumanCustomPhysicsAPI.h to lates (1.2.7)
- Added working gear and wheelbrakes
- Airplane explodes if starting on ground with wheels extended so
commented that out...
  • Loading branch information
RagnarDa committed Feb 16, 2014
1 parent 5f059e5 commit cad3b99
Show file tree
Hide file tree
Showing 9 changed files with 709 additions and 41 deletions.
22 changes: 22 additions & 0 deletions .gitattributes
@@ -0,0 +1,22 @@
# Auto detect text files and perform LF normalization
* text=auto

# Custom for Visual Studio
*.cs diff=csharp
*.sln merge=union
*.csproj merge=union
*.vbproj merge=union
*.fsproj merge=union
*.dbproj merge=union

# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain
14 changes: 14 additions & 0 deletions .gitignore
@@ -0,0 +1,14 @@
*.tlog
*.manifest
*.lastbuildstate
*.log
*.obj
*.pch
*.cache
*.pdb
*.ipch
*.sdf
*.dll
*.exp
*.lib
*.suo
100 changes: 72 additions & 28 deletions Cockpit2/Systems/landing_gear_system.lua
@@ -1,61 +1,105 @@
local landing_gear_system = GetSelf()
local dev = GetSelf()

local update_time_step = 0.1
local update_time_step = 0.05
make_default_activity(update_time_step)

local sensor_data = get_base_data()

local Gear = 68 --This is the number of the command from command_defs
local BrakeOn = 74
local BrakeOff = 75
print("LOADING LANDING GEAR SYSTEM")
--Creating local variables
local GEAR_COMMAND = 0 -- COMMANDED GEAR POS 0=UP, 1=DOWN
local GEAR_STATE = 0 -- ACTUALT GEAR POS 0=UP,1=DOWN
local NOSE_GEAR_POS = 0
local RIGHT_GEAR_POS = 0
local LEFT_GEAR_POS = 0
local HAS_STARTED = 0
local BRAKE_COMMAND = 0
local BRAKE_STATE = 0

dev:listen_command(Gear)
dev:listen_command(BrakeOn)
dev:listen_command(BrakeOff)

function SetCommand(command,value)
print_message_to_user("SetCommand Triggered")
--print_message_to_user(string.format("New SetCommand Triggered %d gearstate %d", command, GEAR_STATE))
--env.info(string.format("Command %f", command), true)

if command == 3020 then -- GEAR UP
GEAR_COMMAND = 0
print_message_to_user("Gear Set to UP")
if command == Gear then
if (GEAR_COMMAND == 1) then
GEAR_COMMAND = 0
else
GEAR_COMMAND = 1
end
end

if command == 3019 then -- GEAR DOWN
GEAR_COMMAND = 1
print_message_to_user("Gear Set to DOWN")
if command == BrakeOn then
BRAKE_COMMAND = 1
end
if command == BrakeOff then
BRAKE_COMMAND = 0
end
end
local p_gearstate = get_param_handle("GEARSTATE") --Any examples of this? I don't remember...
local fmparams = get_param_handle("FM_Params")
fmparams:set(string.format("%sGEARSTATE;",fmparams:get()))

function update()
--print_message_to_user("Update")

p_gearstate:set(GEAR_STATE)
--print_message_to_user(string.format("Update gearstate %d", GEAR_STATE))
--env.info(string.format("Update!", 1), true)
NOSE_GEAR_POS = get_aircraft_draw_argument_value(0)
RIGHT_GEAR_POS = get_aircraft_draw_argument_value(3)
LEFT_GEAR_POS = get_aircraft_draw_argument_value(5)

--if GEAR_COMMAND == 1 then
-- GEAR_STATE = 1
--end
-- if (sensor_data.getRadarAltitude() * 3.28084) < 500.0 then
-- GEAR_STATE = 1
-- end
if (GEAR_COMMAND == 0 and GEAR_STATE > 0.05) then
-- Raise gear in increments of 0.1
GEAR_STATE = GEAR_STATE - 0.05
else
if (GEAR_COMMAND == 1 and GEAR_STATE < 0.95) then
-- Lower gear in increment of 0.1
GEAR_STATE = GEAR_STATE + 0.05
end
end

--if GEAR_COMMAND == 0 then
-- GEAR_STATE = 0
--end
GEAR_STATE = 0

if (sensor_data.getRadarAltitude() * 3.28084) < 500.0 then
GEAR_STATE = 1
--set_aircraft_draw_argument_value(0,GEAR_STATE)
--set_aircraft_draw_argument_value(3,GEAR_STATE)
--set_aircraft_draw_argument_value(5,GEAR_STATE)

-- Draw arguments list:
-- 500 = Gear level commanded
-- 501 = Wheel brake commanded
-- 504 = Weight on wheels nose
-- 505 = Weight on wheels left main gear
-- 506 = Weight on wheels right main gear


if (HAS_STARTED == 1) then
set_aircraft_draw_argument_value(500,GEAR_COMMAND)
else
GEAR_COMMAND = get_aircraft_draw_argument_value(500)
HAS_STARTED = 1
end

set_aircraft_draw_argument_value(0,GEAR_STATE)
set_aircraft_draw_argument_value(3,GEAR_STATE)
set_aircraft_draw_argument_value(5,GEAR_STATE)
set_aircraft_draw_argument_value(501, BRAKE_COMMAND)

set_aircraft_draw_argument_value(504, sensor_data.getWOW_NoseLandingGear())
set_aircraft_draw_argument_value(505, sensor_data.getWOW_LeftMainLandingGear())
set_aircraft_draw_argument_value(506, sensor_data.getWOW_RightMainLandingGear())

--if sensor_data.getWOW_LeftMainLandingGear()==1 or
-- sensor_data.getWOW_NoseLandingGear()==1 or
-- sensor_data.getWOW_RightMainLandingGear()==1 then
-- print_message_to_user("TOUCHDOWN!")
--end
--if sensor_data.getWOW_LeftMainLandingGear()==1 or
-- sensor_data.getWOW_NoseLandingGear()==1 or
-- sensor_data.getWOW_RightMainLandingGear()==1 then
-- print_message_to_user("TOUCHDOWN!")
-- else
-- print_message_to_user("FLYING")
-- end
end


4 changes: 4 additions & 0 deletions Cockpit2/command_defs.lua
@@ -1,9 +1,13 @@
-- Add these from input
Keys =
{
PlanePickleOn = 350,
PlanePickleOff = 351,
PlaneFireOn = 84,
PlaneFireOff = 85,
iCommandPlaneGear = 68,
iCommandPlaneWheelBrakeOn = 74,
iCommandPlaneWheelBrakeOff = 75,
}

start_command = 3000
Expand Down
2 changes: 1 addition & 1 deletion Cockpit2/device_init.lua
Expand Up @@ -36,7 +36,7 @@ creators[devices.CLOCK] = {"avAChS_1" ,LockOn_Options.script_path.."clo
creators[devices.ADI] = {"avBaseIKP" ,LockOn_Options.script_path.."adi.lua"}
creators[devices.ELECTRIC_SYSTEM]= {"avSimpleElectricSystem",LockOn_Options.script_path.."Systems/electric_system.lua"}
creators[devices.RADAR] = {"avSimpleRadar" ,LockOn_Options.script_path.."RADAR/Device/init.lua"}
creators[devices.LANDING_GEAR] = {"avSimpleRadar" ,LockOn_Options.script_path.."Systems/landing_gear_system.lua"}
creators[devices.LANDING_GEAR] = {"avLuaDevice" ,LockOn_Options.script_path.."Systems/landing_gear_system.lua"}

-- Indicators
indicators = {}
Expand Down
2 changes: 1 addition & 1 deletion Cockpit2/test_device.lua
Expand Up @@ -22,7 +22,7 @@ end

function update()
local v = my_param:get()
print(v)
--print(v)
my_param:set(sensor_data.getMachNumber())
if electric_system ~= nil then
local DC_V = electric_system:get_DC_Bus_1_voltage()
Expand Down
79 changes: 71 additions & 8 deletions FlightModel/F_16Demo/F_16Demo.cpp
Expand Up @@ -192,6 +192,9 @@ namespace F16
double ay_world = 0.0; // World referenced up/down acceleration (m/s^2)
double weight_on_wheels = 0.0; // Weight on wheels flag (not used right now)
double rolling_friction = 0.03; // Rolling friction amount (not use right now)
double WheelBrakeCommand = 0.0; // Commanded wheel brake
double GearCommand = 0.0; // Commanded gear lever
double DeltaTime = 0.0; // Delta time of the simulation, in seconds
}

// These are taken from Export.lua
Expand Down Expand Up @@ -282,6 +285,17 @@ void ed_fm_add_local_moment(double & x,double &y,double &z)
//-----------------------------------------------------------------------
void ed_fm_simulate(double dt)
{
F16::DeltaTime = dt;

/* Gear animation */
if (F16::gearDown > F16::GearCommand)
{
F16::gearDown = limit(F16::gearDown - dt/2, 0.0, 1.0);
} else if (F16::gearDown < F16::GearCommand)
{
F16::gearDown = limit(F16::gearDown + dt/2, 0.0 ,1.0);
};

/* CJS - Removed hack to filter out flight controller if on ground
if(F16::weight_on_wheels)
{
Expand Down Expand Up @@ -825,9 +839,16 @@ void ed_fm_set_draw_args (EdDrawArgument * drawargs,size_t size)
drawargs[28].f = (float)limit(((F16::throttleInput-80.0)/20.0),0.0,1.0);
drawargs[29].f = (float)limit(((F16::throttleInput-80.0)/20.0),0.0,1.0);
*/

F16::gearDown = (float)drawargs[0].f; // 1.0 = down;

if (F16::simInitialized)
{
F16::GearCommand = drawargs[500].f;
} else {
drawargs[500].f = (float)F16::GearCommand;
}
F16::WheelBrakeCommand = drawargs[501].f;
F16::weight_on_wheels = limit(drawargs[504].f + drawargs[505].f + drawargs[506].f, 0.0, 1.0);
// Just going to use wheight on any wheel...

//Flaps
drawargs[9].f = (float)F16::flap_PCT;
drawargs[10].f = (float)F16::flap_PCT;
Expand All @@ -844,8 +865,6 @@ void ed_fm_set_draw_args (EdDrawArgument * drawargs,size_t size)
drawargs[17].f = (float) F16::rudder_PCT;
drawargs[18].f = (float)-F16::rudder_PCT;

//Nose Gear Steering
drawargs[2].f = (float) F16::rudder_PCT;

drawargs[28].f = (float)limit(((F16::throttleInput-80.0)/20.0),0.0,1.0);
drawargs[29].f = (float)limit(((F16::throttleInput-80.0)/20.0),0.0,1.0);
Expand All @@ -858,7 +877,49 @@ void ed_fm_configure(const char * cfg_path)

double ed_fm_get_param(unsigned index)
{

/* Gear positions */
if (index == ED_FM_SUSPENSION_0_GEAR_POST_STATE)
{
return F16::gearDown;
}
if (index == ED_FM_SUSPENSION_1_GEAR_POST_STATE)
{
return F16::gearDown;
}
if (index == ED_FM_SUSPENSION_2_GEAR_POST_STATE)
{
return F16::gearDown;
}
if (index == ED_FM_SUSPENSION_0_DOWN_LOCK)
{
return F16::gearDown;
}
if (index == ED_FM_SUSPENSION_1_DOWN_LOCK)
{
return F16::gearDown;
}
if (index == ED_FM_SUSPENSION_2_DOWN_LOCK)
{
return F16::gearDown;
}

/* Gear brakes */
if (index == ED_FM_SUSPENSION_1_RELATIVE_BRAKE_MOMENT)
{
return F16::WheelBrakeCommand * 1;
}
if (index == ED_FM_SUSPENSION_2_RELATIVE_BRAKE_MOMENT)
{
return F16::WheelBrakeCommand * 1;
}


/* Nosewheel steering */
if (index == ED_FM_SUSPENSION_0_WHEEL_YAW)
{
return limit(F16::rudder_DEG * 0.012,-1.0,1.0);
}

if (index <= ED_FM_END_ENGINE_BLOCK)
{
switch (index)
Expand All @@ -884,12 +945,14 @@ double ed_fm_get_param(unsigned index)

void ed_fm_cold_start()
{

//F16::gearDown = 1;
//F16::GearCommand = 1;
}

void ed_fm_hot_start()
{

//F16::gearDown = 1;
//F16::GearCommand = 1;
}

void ed_fm_hot_start_in_air()
Expand Down

0 comments on commit cad3b99

Please sign in to comment.