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"
#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);
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 ();
// 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 ()
{
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)
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;
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 */
if (Simtime >= recordStartTime)
uiuc_recorder(dt);
}
+
+//void uiuc_network_routine ()
+//{
+// uiuc_network();
+//}
//end uiuc_wrapper.cpp