]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/UIUCModel/uiuc_wrapper.cpp
Updated to match changes in radiostack.[ch]xx
[flightgear.git] / src / FDM / UIUCModel / uiuc_wrapper.cpp
index 40fb04d68632f2ed12ada84ec87bfdfa70539fb3..1526167239ba812bd6bdb2b631c3439c7469a126 100644 (file)
                            the velocities.
               08/27/2001   (RD) Added uiuc_initial_init() to help
                            in starting an A/C at an initial condition
+              02/24/2002   (GD) Added uiuc_network_routine()
+              03/27/2002   (RD) Changed how forces are calculated when
+                           body-axis is used
  
 ----------------------------------------------------------------------
  
  AUTHOR(S):    Bipin Sehgal       <bsehgal@uiuc.edu>
                Robert Deters      <rdeters@uiuc.edu>
+              Glen Dimock        <dimock@uiuc.edu>
                David Megginson    <david@megginson.com>
  
 ----------------------------------------------------------------------
 **********************************************************************/
 
 #include <simgear/compiler.h>
+#include <simgear/misc/sg_path.hxx>
 #include <Aircraft/aircraft.hxx>
-
-#ifndef FG_OLD_WEATHER
-#include <WeatherCM/FGLocalWeatherDatabase.h>
-#else
-#include <Weather/weather.hxx>
-#endif
+#include <Main/fg_props.hxx>
 
 #include "uiuc_aircraft.h"
 #include "uiuc_aircraftdir.h"
@@ -90,8 +90,9 @@
 #include "uiuc_menu.h"
 #include "uiuc_betaprobe.h"
 #include <FDM/LaRCsim/ls_generic.h>
-// #include "Main/simple_udp.h"
+//#include "Main/simple_udp.h"
 #include "uiuc_fog.h" //321654
+//#include "uiuc_network.h"
 
 #if !defined (SG_HAVE_NATIVE_SGI_COMPILERS)
 SG_USING_STD(cout);
@@ -103,6 +104,7 @@ extern "C" void uiuc_force_moment(double dt);
 extern "C" void uiuc_engine_routine();
 extern "C" void uiuc_gear_routine();
 extern "C" void uiuc_record_routine(double dt);
+//extern "C" void uiuc_network_routine();
 extern "C" void uiuc_vel_init ();
 extern "C" void uiuc_initial_init ();
 
@@ -112,12 +114,12 @@ AIRCRAFTDIR *aircraftdir_ = new AIRCRAFTDIR;
 // SendArray testarray(4950);
 
 /* Convert float to string */
-string ftoa(double in)
-{
-  static char temp[20];
-  sprintf(temp,"%g",in);
-  return (string)temp;
-}
+//string ftoa(double in)
+//{
+//  static char temp[20];
+//  sprintf(temp,"%g",in);
+//  return (string)temp;
+//}
 
 void uiuc_initial_init ()
 {
@@ -171,15 +173,12 @@ void uiuc_vel_init ()
 
 void uiuc_init_aeromodel ()
 {
-  string aircraft;
-
-  if (aircraft_dir != (string)"")
-    aircraft = aircraft_dir + "/";
-
-  aircraft += "aircraft.dat";
-  cout << "We are using "<< aircraft << endl;
+  SGPath path(globals->get_fg_root());
+  path.append(aircraft_dir);
+  path.append("aircraft.dat");
+  cout << "We are using "<< path.str() << endl;
   uiuc_initializemaps(); // Initialize the <string,int> maps
-  uiuc_menu(aircraft);   // Read the specified aircraft file 
+  uiuc_menu(path.str());   // Read the specified aircraft file 
 }
 
 void uiuc_force_moment(double dt)
@@ -191,30 +190,48 @@ void uiuc_force_moment(double dt)
   uiuc_aerodeflections(dt);
   uiuc_coefficients();
 
-  /* Calculate the wind axis forces */
+  /* Calculate the forces */
   if (CX && CZ)
     {
-      CD = -CX * cos(Alpha) - CZ * sin(Alpha);
-      CL =  CX * sin(Alpha) - CZ * cos(Alpha);
+      F_X_aero = CX * qS;
+      F_Y_aero = CY * qS;
+      F_Z_aero = CZ * qS;
+    }
+  else
+    {
+      F_X_wind = -CD * qS  * Cos_beta * Cos_beta;
+      F_Y_wind =  CY * qS  * Cos_beta * Cos_beta;
+      F_Z_wind = -CL * qS  * Cos_beta * Cos_beta;
+
+      /* wind-axis to body-axis transformation */
+      F_X_aero = F_X_wind * Cos_alpha * Cos_beta - F_Y_wind * Cos_alpha * Sin_beta - F_Z_wind * Sin_alpha;
+      F_Y_aero = F_X_wind * Sin_beta + F_Y_wind * Cos_beta;
+      F_Z_aero = F_X_wind * Sin_alpha * Cos_beta - F_Y_wind * Sin_alpha * Sin_beta + F_Z_wind * Cos_alpha;
     }
-  F_X_wind = -1 * CD * qS;
-  F_Y_wind = CY * qS;
-  F_Z_wind = -1 * CL * qS;
-
-  /* wind-axis to body-axis transformation */
-  F_X_aero = F_X_wind * Cos_alpha * Cos_beta - F_Y_wind * Cos_alpha * Sin_beta - F_Z_wind * Sin_alpha;
-  F_Y_aero = F_X_wind * Sin_beta + F_Y_wind * Cos_beta;
-  F_Z_aero = F_X_wind * Sin_alpha * Cos_beta - F_Y_wind * Sin_alpha * Sin_beta + F_Z_wind * Cos_alpha;
-
   /* Moment calculations */
-  M_l_aero = Cl * qSb;
-  M_m_aero = Cm * qScbar;
-  M_n_aero = Cn * qSb;
-
-  /* Call flight data recorder */
-  //  if (Simtime >= recordStartTime)
-  //      uiuc_recorder(dt);
-  
+  M_l_aero = Cl * qSb    * Cos_beta * Cos_beta;
+  M_m_aero = Cm * qScbar * Cos_beta * Cos_beta;
+  M_n_aero = Cn * qSb    * Cos_beta * Cos_beta;
+
+  /* Adding in apparent mass effects */
+
+  if (Mass_appMass_ratio)
+    F_Z_aero += -(Mass_appMass_ratio * Mass) * W_dot_body;
+  if (I_xx_appMass_ratio)
+    M_l_aero += -(I_xx_appMass_ratio * I_xx) * P_dot_body;
+  if (I_yy_appMass_ratio)
+    M_m_aero += -(I_yy_appMass_ratio * I_yy) * Q_dot_body;
+  if (I_zz_appMass_ratio)
+    M_m_aero += -(I_zz_appMass_ratio * I_yy) * R_dot_body;
+
+  if (Mass_appMass)
+    F_Z_aero += -Mass_appMass * W_dot_body;
+  if (I_xx_appMass)
+    M_l_aero += -I_xx_appMass * P_dot_body;
+  if (I_yy_appMass)
+    M_m_aero += -I_yy_appMass * Q_dot_body;
+  if (I_zz_appMass)
+    M_m_aero += -I_zz_appMass * R_dot_body;
 
   // fog field update
    Fog = 0;
@@ -224,41 +241,32 @@ void uiuc_force_moment(double dt)
    double vis;
    if (Fog != 0)
    {
- #ifndef FG_OLD_WEATHER
-     vis = WeatherDatabase->getWeatherVisibility();
-     if (Fog > 0)
-       vis /= 1.01;
-     else
-       vis *= 1.01;
-     WeatherDatabase->setWeatherVisibility( vis );
- #else
-     vis = current_weather->get_visibility();
+     vis = fgGetDouble("/environment/visibility-m");
      if (Fog > 0)
        vis /= 1.01;
      else
        vis *= 1.01;
-     current_weather->set_visibility( vis );
- #endif
+     fgSetDouble("/environment/visibility-m", vis);
    }
  
 
   /* Send data on the network to the Glass Cockpit */
  
-  string input="";
-
-  input += " stick_right " + ftoa(Lat_control);
-  input += " rudder_left " + ftoa(-Rudder_pedal);
-  input += " stick_forward " + ftoa(Long_control);
-  input += " stick_trim_forward " + ftoa(Long_trim);
-  input += " vehicle_pitch " + ftoa(Theta * 180.0 / 3.14);
-  input += " vehicle_roll " + ftoa(Phi * 180.0 / 3.14);
-  input += " vehicle_speed " + ftoa(V_rel_wind);
-  input += " throttle_forward " + ftoa(Throttle_pct);
-  input += " altitude " + ftoa(Altitude);
-  input += " climb_rate " + ftoa(-1.0*V_down_rel_ground);
+   //  string input="";
+
+   //  input += " stick_right " + ftoa(Lat_control);
+   //  input += " rudder_left " + ftoa(-Rudder_pedal);
+   //  input += " stick_forward " + ftoa(Long_control);
+   //  input += " stick_trim_forward " + ftoa(Long_trim);
+   //  input += " vehicle_pitch " + ftoa(Theta * 180.0 / 3.14);
+   //  input += " vehicle_roll " + ftoa(Phi * 180.0 / 3.14);
+   //  input += " vehicle_speed " + ftoa(V_rel_wind);
+   //  input += " throttle_forward " + ftoa(Throttle_pct);
+   //  input += " altitude " + ftoa(Altitude);
+   //  input += " climb_rate " + ftoa(-1.0*V_down_rel_ground);
  
-  // testarray.getHello();
-  // testarray.sendData(input);
+   //  testarray.getHello();
+   //  testarray.sendData(input);
   
   /* End of Networking */ 
 
@@ -279,4 +287,9 @@ void uiuc_record_routine(double dt)
   if (Simtime >= recordStartTime)
     uiuc_recorder(dt);
 }
+
+//void uiuc_network_routine ()
+//{
+//  uiuc_network();
+//}
 //end uiuc_wrapper.cpp