]> git.mxchange.org Git - flightgear.git/blobdiff - LaRCsim/ls_interface.c
Working on incorporating the LaRCsim flight model.
[flightgear.git] / LaRCsim / ls_interface.c
index 81f6ca58019b85245b8a29e301f2027b44fa05ec..9e591c6c00e5d51ed7b5b5ab54cb8f739119b0ee 100644 (file)
@@ -222,17 +222,6 @@ $Original log: LaRCsim.c,v $
 
 --------------------------------------------------------------------------*/
 
-#include "ls_interface.h"
-
-#include "ls_types.h"
-#include "ls_constants.h"
-#include "ls_generic.h"
-#include "ls_sim_control.h"
-#include "ls_cockpit.h"
-/* #include "ls_tape.h" */
-#ifndef linux
-# include <libgen.h>
-#endif
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <stdlib.h>
@@ -240,6 +229,14 @@ $Original log: LaRCsim.c,v $
 #include <math.h>
 #include <time.h>
 
+#include "ls_types.h"
+#include "ls_constants.h"
+#include "ls_generic.h"
+#include "ls_sim_control.h"
+#include "ls_cockpit.h"
+#include "ls_interface.h"
+#include "../flight.h"
+
 /* global variable declarations */
 
 /* TAPE                *Tape; */
@@ -497,14 +494,13 @@ int initialize;
 
 
 int ls_cockpit() {
-
     sim_control_.paused = 0;
 
-    Throttle_pct = 0.85;
+    Throttle_pct = 0.25;
 
-    /* printf("Mach = %.2f  ", Mach_number);
+    printf("Mach = %.2f  ", Mach_number);
     printf("%.4f,%.4f,%.2f  ", Latitude, Longitude, Altitude);
-    printf("%.2f,%.2f,%.2f\n", Phi, Theta, Psi); */
+    printf("%.2f,%.2f,%.2f\n", Phi, Theta, Psi);
 
 }
 
@@ -512,35 +508,10 @@ int ls_cockpit() {
 /* Initialize the LaRCsim flight model, dt is the time increment for
    each subsequent iteration through the EOM */
 int fgLaRCsimInit(double dt) {
-
     model_dt = dt;
 
     ls_setdefopts();           /* set default options */
        
-    /* Number_of_Continuous_States = 22; */
-
-    generic_.geodetic_position_v[0] = 2.793445E-05;
-    generic_.geodetic_position_v[1] = 3.262070E-07;
-    generic_.geodetic_position_v[2] = 3.758099E+00;
-    generic_.v_local_v[0]   = 7.287719E+00;
-    generic_.v_local_v[1]   = 1.521770E+03;
-    generic_.v_local_v[2]   = -1.265722E-05;
-    generic_.euler_angles_v[0]      = -2.658474E-06;
-    generic_.euler_angles_v[1]      = 7.401790E-03;
-    generic_.euler_angles_v[2]      = 1.391358E-03;
-    generic_.omega_body_v[0]        = 7.206685E-05;
-    generic_.omega_body_v[1]        = 0.000000E+00;
-    generic_.omega_body_v[2]        = 9.492658E-05;
-    generic_.earth_position_angle   = 0.000000E+00;
-    generic_.mass   = 8.547270E+01;
-    generic_.i_xx   = 1.048000E+03;
-    generic_.i_yy   = 3.000000E+03;
-    generic_.i_zz   = 3.530000E+03;
-    generic_.i_xz   = 0.000000E+00;
-    generic_.d_cg_rp_body_v[0]      = 0.000000E+00;
-    generic_.d_cg_rp_body_v[1]      = 0.000000E+00;
-    generic_.d_cg_rp_body_v[2]      = 0.000000E+00;
-
     ls_stamp();   /* ID stamp; record time and date of run */
 
     if (speedup == 0.0) {
@@ -548,8 +519,12 @@ int fgLaRCsimInit(double dt) {
        return 1;
     }
 
+    printf("LS pre Init pos = %.2f\n", Latitude);
+
     ls_init();
 
+    printf("LS post Init pos = %.2f\n", Latitude);
+
     if (speedup > 0) {
        /* Initialize (get) cockpit (controls) settings */
        ls_cockpit();
@@ -575,9 +550,359 @@ int fgLaRCsimUpdate(int multiloop) {
 }
 
 
+/* Convert from the FG flight_params struct to the LaRCsim generic_ struct */
+int fgFlight_2_LaRCsim (struct flight_params *f) {
+    Mass =      FG_Mass;
+    I_xx =      FG_I_xx;
+    I_yy =      FG_I_yy;
+    I_zz =      FG_I_zz;
+    I_xz =      FG_I_xz;
+    Dx_pilot =  FG_Dx_pilot;
+    Dy_pilot =  FG_Dy_pilot;
+    Dz_pilot =  FG_Dz_pilot;
+    Dx_cg =     FG_Dx_cg;
+    Dy_cg =     FG_Dy_cg;
+    Dz_cg =     FG_Dz_cg;
+    F_X =       FG_F_X;
+    F_Y =       FG_F_Y;
+    F_Z =       FG_F_Z;
+    F_north =   FG_F_north;
+    F_east =    FG_F_east;
+    F_down =    FG_F_down;
+    F_X_aero =  FG_F_X_aero;
+    F_Y_aero =  FG_F_Y_aero;
+    F_Z_aero =  FG_F_Z_aero;
+    F_X_engine =        FG_F_X_engine;
+    F_Y_engine =        FG_F_Y_engine;
+    F_Z_engine =        FG_F_Z_engine;
+    F_X_gear =  FG_F_X_gear;
+    F_Y_gear =  FG_F_Y_gear;
+    F_Z_gear =  FG_F_Z_gear;
+    M_l_rp =    FG_M_l_rp;
+    M_m_rp =    FG_M_m_rp;
+    M_n_rp =    FG_M_n_rp;
+    M_l_cg =    FG_M_l_cg;
+    M_m_cg =    FG_M_m_cg;
+    M_n_cg =    FG_M_n_cg;
+    M_l_aero =  FG_M_l_aero;
+    M_m_aero =  FG_M_m_aero;
+    M_n_aero =  FG_M_n_aero;
+    M_l_engine =        FG_M_l_engine;
+    M_m_engine =        FG_M_m_engine;
+    M_n_engine =        FG_M_n_engine;
+    M_l_gear =  FG_M_l_gear;
+    M_m_gear =  FG_M_m_gear;
+    M_n_gear =  FG_M_n_gear;
+    V_dot_north =       FG_V_dot_north;
+    V_dot_east =        FG_V_dot_east;
+    V_dot_down =        FG_V_dot_down;
+    U_dot_body =        FG_U_dot_body;
+    V_dot_body =        FG_V_dot_body;
+    W_dot_body =        FG_W_dot_body;
+    A_X_cg =    FG_A_X_cg;
+    A_Y_cg =    FG_A_Y_cg;
+    A_Z_cg =    FG_A_Z_cg;
+    A_X_pilot = FG_A_X_pilot;
+    A_Y_pilot = FG_A_Y_pilot;
+    A_Z_pilot = FG_A_Z_pilot;
+    N_X_cg =    FG_N_X_cg;
+    N_Y_cg =    FG_N_Y_cg;
+    N_Z_cg =    FG_N_Z_cg;
+    N_X_pilot = FG_N_X_pilot;
+    N_Y_pilot = FG_N_Y_pilot;
+    N_Z_pilot = FG_N_Z_pilot;
+    P_dot_body =        FG_P_dot_body;
+    Q_dot_body =        FG_Q_dot_body;
+    R_dot_body =        FG_R_dot_body;
+    V_north =   FG_V_north;
+    V_east =    FG_V_east;
+    V_down =    FG_V_down;
+    V_north_rel_ground =        FG_V_north_rel_ground;
+    V_east_rel_ground = FG_V_east_rel_ground;
+    V_down_rel_ground = FG_V_down_rel_ground;
+    V_north_airmass =   FG_V_north_airmass;
+    V_east_airmass =    FG_V_east_airmass;
+    V_down_airmass =    FG_V_down_airmass;
+    V_north_rel_airmass =       FG_V_north_rel_airmass;
+    V_east_rel_airmass =        FG_V_east_rel_airmass;
+    V_down_rel_airmass =        FG_V_down_rel_airmass;
+    U_gust =    FG_U_gust;
+    V_gust =    FG_V_gust;
+    W_gust =    FG_W_gust;
+    U_body =    FG_U_body;
+    V_body =    FG_V_body;
+    W_body =    FG_W_body;
+    V_rel_wind =        FG_V_rel_wind;
+    V_true_kts =        FG_V_true_kts;
+    V_rel_ground =      FG_V_rel_ground;
+    V_inertial =        FG_V_inertial;
+    V_ground_speed =    FG_V_ground_speed;
+    V_equiv =   FG_V_equiv;
+    V_equiv_kts =       FG_V_equiv_kts;
+    V_calibrated =      FG_V_calibrated;
+    V_calibrated_kts =  FG_V_calibrated_kts;
+    P_body =    FG_P_body;
+    Q_body =    FG_Q_body;
+    R_body =    FG_R_body;
+    P_local =   FG_P_local;
+    Q_local =   FG_Q_local;
+    R_local =   FG_R_local;
+    P_total =   FG_P_total;
+    Q_total =   FG_Q_total;
+    R_total =   FG_R_total;
+    Phi_dot =   FG_Phi_dot;
+    Theta_dot = FG_Theta_dot;
+    Psi_dot =   FG_Psi_dot;
+    Latitude_dot =      FG_Latitude_dot;
+    Longitude_dot =     FG_Longitude_dot;
+    Radius_dot =        FG_Radius_dot;
+    Lat_geocentric =    FG_Lat_geocentric;
+    Lon_geocentric =    FG_Lon_geocentric;
+    Radius_to_vehicle = FG_Radius_to_vehicle;
+    Latitude =  FG_Latitude;
+    Longitude = FG_Longitude;
+    Altitude =  FG_Altitude;
+    Phi =       FG_Phi;
+    Theta =     FG_Theta;
+    Psi =       FG_Psi;
+    T_local_to_body_11 =        FG_T_local_to_body_11;
+    T_local_to_body_12 =        FG_T_local_to_body_12;
+    T_local_to_body_13 =        FG_T_local_to_body_13;
+    T_local_to_body_21 =        FG_T_local_to_body_21;
+    T_local_to_body_22 =        FG_T_local_to_body_22;
+    T_local_to_body_23 =        FG_T_local_to_body_23;
+    T_local_to_body_31 =        FG_T_local_to_body_31;
+    T_local_to_body_32 =        FG_T_local_to_body_32;
+    T_local_to_body_33 =        FG_T_local_to_body_33;
+    Gravity =   FG_Gravity;
+    Centrifugal_relief =        FG_Centrifugal_relief;
+    Alpha =     FG_Alpha;
+    Beta =      FG_Beta;
+    Alpha_dot = FG_Alpha_dot;
+    Beta_dot =  FG_Beta_dot;
+    Cos_alpha = FG_Cos_alpha;
+    Sin_alpha = FG_Sin_alpha;
+    Cos_beta =  FG_Cos_beta;
+    Sin_beta =  FG_Sin_beta;
+    Cos_phi =   FG_Cos_phi;
+    Sin_phi =   FG_Sin_phi;
+    Cos_theta = FG_Cos_theta;
+    Sin_theta = FG_Sin_theta;
+    Cos_psi =   FG_Cos_psi;
+    Sin_psi =   FG_Sin_psi;
+    Gamma_vert_rad =    FG_Gamma_vert_rad;
+    Gamma_horiz_rad =   FG_Gamma_horiz_rad;
+    Sigma =     FG_Sigma;
+    Density =   FG_Density;
+    V_sound =   FG_V_sound;
+    Mach_number =       FG_Mach_number;
+    Static_pressure =   FG_Static_pressure;
+    Total_pressure =    FG_Total_pressure;
+    Impact_pressure =   FG_Impact_pressure;
+    Dynamic_pressure =  FG_Dynamic_pressure;
+    Static_temperature =        FG_Static_temperature;
+    Total_temperature = FG_Total_temperature;
+    Sea_level_radius =  FG_Sea_level_radius;
+    Earth_position_angle =      FG_Earth_position_angle;
+    Runway_altitude =   FG_Runway_altitude;
+    Runway_latitude =   FG_Runway_latitude;
+    Runway_longitude =  FG_Runway_longitude;
+    Runway_heading =    FG_Runway_heading;
+    Radius_to_rwy =     FG_Radius_to_rwy;
+    D_cg_north_of_rwy = FG_D_cg_north_of_rwy;
+    D_cg_east_of_rwy =  FG_D_cg_east_of_rwy;
+    D_cg_above_rwy =    FG_D_cg_above_rwy;
+    X_cg_rwy =  FG_X_cg_rwy;
+    Y_cg_rwy =  FG_Y_cg_rwy;
+    H_cg_rwy =  FG_H_cg_rwy;
+    D_pilot_north_of_rwy =      FG_D_pilot_north_of_rwy;
+    D_pilot_east_of_rwy =       FG_D_pilot_east_of_rwy;
+    D_pilot_above_rwy = FG_D_pilot_above_rwy;
+    X_pilot_rwy =       FG_X_pilot_rwy;
+    Y_pilot_rwy =       FG_Y_pilot_rwy;
+    H_pilot_rwy =       FG_H_pilot_rwy;
+}
+
+
+/* Convert from the LaRCsim generic_ struct to the FG flight_params struct */
+int fgLaRCsim_2_Flight (struct flight_params *f) {
+    FG_Mass =   Mass;
+    FG_I_xx =   I_xx;
+    FG_I_yy =   I_yy;
+    FG_I_zz =   I_zz;
+    FG_I_xz =   I_xz;
+    FG_Dx_pilot =       Dx_pilot;
+    FG_Dy_pilot =       Dy_pilot;
+    FG_Dz_pilot =       Dz_pilot;
+    FG_Dx_cg =  Dx_cg;
+    FG_Dy_cg =  Dy_cg;
+    FG_Dz_cg =  Dz_cg;
+    FG_F_X =    F_X;
+    FG_F_Y =    F_Y;
+    FG_F_Z =    F_Z;
+    FG_F_north =        F_north;
+    FG_F_east = F_east;
+    FG_F_down = F_down;
+    FG_F_X_aero =       F_X_aero;
+    FG_F_Y_aero =       F_Y_aero;
+    FG_F_Z_aero =       F_Z_aero;
+    FG_F_X_engine =     F_X_engine;
+    FG_F_Y_engine =     F_Y_engine;
+    FG_F_Z_engine =     F_Z_engine;
+    FG_F_X_gear =       F_X_gear;
+    FG_F_Y_gear =       F_Y_gear;
+    FG_F_Z_gear =       F_Z_gear;
+    FG_M_l_rp = M_l_rp;
+    FG_M_m_rp = M_m_rp;
+    FG_M_n_rp = M_n_rp;
+    FG_M_l_cg = M_l_cg;
+    FG_M_m_cg = M_m_cg;
+    FG_M_n_cg = M_n_cg;
+    FG_M_l_aero =       M_l_aero;
+    FG_M_m_aero =       M_m_aero;
+    FG_M_n_aero =       M_n_aero;
+    FG_M_l_engine =     M_l_engine;
+    FG_M_m_engine =     M_m_engine;
+    FG_M_n_engine =     M_n_engine;
+    FG_M_l_gear =       M_l_gear;
+    FG_M_m_gear =       M_m_gear;
+    FG_M_n_gear =       M_n_gear;
+    FG_V_dot_north =    V_dot_north;
+    FG_V_dot_east =     V_dot_east;
+    FG_V_dot_down =     V_dot_down;
+    FG_U_dot_body =     U_dot_body;
+    FG_V_dot_body =     V_dot_body;
+    FG_W_dot_body =     W_dot_body;
+    FG_A_X_cg = A_X_cg;
+    FG_A_Y_cg = A_Y_cg;
+    FG_A_Z_cg = A_Z_cg;
+    FG_A_X_pilot =      A_X_pilot;
+    FG_A_Y_pilot =      A_Y_pilot;
+    FG_A_Z_pilot =      A_Z_pilot;
+    FG_N_X_cg = N_X_cg;
+    FG_N_Y_cg = N_Y_cg;
+    FG_N_Z_cg = N_Z_cg;
+    FG_N_X_pilot =      N_X_pilot;
+    FG_N_Y_pilot =      N_Y_pilot;
+    FG_N_Z_pilot =      N_Z_pilot;
+    FG_P_dot_body =     P_dot_body;
+    FG_Q_dot_body =     Q_dot_body;
+    FG_R_dot_body =     R_dot_body;
+    FG_V_north =        V_north;
+    FG_V_east = V_east;
+    FG_V_down = V_down;
+    FG_V_north_rel_ground =     V_north_rel_ground;
+    FG_V_east_rel_ground =      V_east_rel_ground;
+    FG_V_down_rel_ground =      V_down_rel_ground;
+    FG_V_north_airmass =        V_north_airmass;
+    FG_V_east_airmass = V_east_airmass;
+    FG_V_down_airmass = V_down_airmass;
+    FG_V_north_rel_airmass =    V_north_rel_airmass;
+    FG_V_east_rel_airmass =     V_east_rel_airmass;
+    FG_V_down_rel_airmass =     V_down_rel_airmass;
+    FG_U_gust = U_gust;
+    FG_V_gust = V_gust;
+    FG_W_gust = W_gust;
+    FG_U_body = U_body;
+    FG_V_body = V_body;
+    FG_W_body = W_body;
+    FG_V_rel_wind =     V_rel_wind;
+    FG_V_true_kts =     V_true_kts;
+    FG_V_rel_ground =   V_rel_ground;
+    FG_V_inertial =     V_inertial;
+    FG_V_ground_speed = V_ground_speed;
+    FG_V_equiv =        V_equiv;
+    FG_V_equiv_kts =    V_equiv_kts;
+    FG_V_calibrated =   V_calibrated;
+    FG_V_calibrated_kts =       V_calibrated_kts;
+    FG_P_body = P_body;
+    FG_Q_body = Q_body;
+    FG_R_body = R_body;
+    FG_P_local =        P_local;
+    FG_Q_local =        Q_local;
+    FG_R_local =        R_local;
+    FG_P_total =        P_total;
+    FG_Q_total =        Q_total;
+    FG_R_total =        R_total;
+    FG_Phi_dot =        Phi_dot;
+    FG_Theta_dot =      Theta_dot;
+    FG_Psi_dot =        Psi_dot;
+    FG_Latitude_dot =   Latitude_dot;
+    FG_Longitude_dot =  Longitude_dot;
+    FG_Radius_dot =     Radius_dot;
+    FG_Lat_geocentric = Lat_geocentric;
+    FG_Lon_geocentric = Lon_geocentric;
+    FG_Radius_to_vehicle =      Radius_to_vehicle;
+    FG_Latitude =       Latitude;
+    FG_Longitude =      Longitude;
+    FG_Altitude =       Altitude;
+    FG_Phi =    Phi;
+    FG_Theta =  Theta;
+    FG_Psi =    Psi;
+    FG_T_local_to_body_11 =     T_local_to_body_11;
+    FG_T_local_to_body_12 =     T_local_to_body_12;
+    FG_T_local_to_body_13 =     T_local_to_body_13;
+    FG_T_local_to_body_21 =     T_local_to_body_21;
+    FG_T_local_to_body_22 =     T_local_to_body_22;
+    FG_T_local_to_body_23 =     T_local_to_body_23;
+    FG_T_local_to_body_31 =     T_local_to_body_31;
+    FG_T_local_to_body_32 =     T_local_to_body_32;
+    FG_T_local_to_body_33 =     T_local_to_body_33;
+    FG_Gravity =        Gravity;
+    FG_Centrifugal_relief =     Centrifugal_relief;
+    FG_Alpha =  Alpha;
+    FG_Beta =   Beta;
+    FG_Alpha_dot =      Alpha_dot;
+    FG_Beta_dot =       Beta_dot;
+    FG_Cos_alpha =      Cos_alpha;
+    FG_Sin_alpha =      Sin_alpha;
+    FG_Cos_beta =       Cos_beta;
+    FG_Sin_beta =       Sin_beta;
+    FG_Cos_phi =        Cos_phi;
+    FG_Sin_phi =        Sin_phi;
+    FG_Cos_theta =      Cos_theta;
+    FG_Sin_theta =      Sin_theta;
+    FG_Cos_psi =        Cos_psi;
+    FG_Sin_psi =        Sin_psi;
+    FG_Gamma_vert_rad = Gamma_vert_rad;
+    FG_Gamma_horiz_rad =        Gamma_horiz_rad;
+    FG_Sigma =  Sigma;
+    FG_Density =        Density;
+    FG_V_sound =        V_sound;
+    FG_Mach_number =    Mach_number;
+    FG_Static_pressure =        Static_pressure;
+    FG_Total_pressure = Total_pressure;
+    FG_Impact_pressure =        Impact_pressure;
+    FG_Dynamic_pressure =       Dynamic_pressure;
+    FG_Static_temperature =     Static_temperature;
+    FG_Total_temperature =      Total_temperature;
+    FG_Sea_level_radius =       Sea_level_radius;
+    FG_Earth_position_angle =   Earth_position_angle;
+    FG_Runway_altitude =        Runway_altitude;
+    FG_Runway_latitude =        Runway_latitude;
+    FG_Runway_longitude =       Runway_longitude;
+    FG_Runway_heading = Runway_heading;
+    FG_Radius_to_rwy =  Radius_to_rwy;
+    FG_D_cg_north_of_rwy =      D_cg_north_of_rwy;
+    FG_D_cg_east_of_rwy =       D_cg_east_of_rwy;
+    FG_D_cg_above_rwy = D_cg_above_rwy;
+    FG_X_cg_rwy =       X_cg_rwy;
+    FG_Y_cg_rwy =       Y_cg_rwy;
+    FG_H_cg_rwy =       H_cg_rwy;
+    FG_D_pilot_north_of_rwy =   D_pilot_north_of_rwy;
+    FG_D_pilot_east_of_rwy =    D_pilot_east_of_rwy;
+    FG_D_pilot_above_rwy =      D_pilot_above_rwy;
+    FG_X_pilot_rwy =    X_pilot_rwy;
+    FG_Y_pilot_rwy =    Y_pilot_rwy;
+    FG_H_pilot_rwy =    H_pilot_rwy;
+}
+
 /* Flight Gear Modification Log
  *
  * $Log$
+ * Revision 1.2  1997/05/29 22:39:59  curt
+ * Working on incorporating the LaRCsim flight model.
+ *
  * Revision 1.1  1997/05/29 00:09:57  curt
  * Initial Flight Gear revision.
  *