----------------------------------------------------------------------
HISTORY: 01/26/2000 initial release
+ 03/09/2001 (DPM) added support for gear
+ 06/18/2001 (RD) Made uiuc_recorder its own routine.
+ 07/19/2001 (RD) Added uiuc_vel_init() to initialize
+ the velocities.
+ 08/27/2001 (RD) Added uiuc_initial_init() to help
+ in starting an A/C at an initial condition
----------------------------------------------------------------------
AUTHOR(S): Bipin Sehgal <bsehgal@uiuc.edu>
+ Robert Deters <rdeters@uiuc.edu>
+ David Megginson <david@megginson.com>
----------------------------------------------------------------------
**********************************************************************/
+#include <simgear/compiler.h>
+#include <simgear/misc/sg_path.hxx>
+#include <Aircraft/aircraft.hxx>
+#include <Main/fg_props.hxx>
+
#include "uiuc_aircraft.h"
#include "uiuc_aircraftdir.h"
#include "uiuc_coefficients.h"
#include "uiuc_engine.h"
+#include "uiuc_gear.h"
#include "uiuc_aerodeflections.h"
#include "uiuc_recorder.h"
#include "uiuc_menu.h"
#include "uiuc_betaprobe.h"
-#include "../FDM/LaRCsim/ls_generic.h"
+#include <FDM/LaRCsim/ls_generic.h>
+// #include "Main/simple_udp.h"
+#include "uiuc_fog.h" //321654
+
+#if !defined (SG_HAVE_NATIVE_SGI_COMPILERS)
+SG_USING_STD(cout);
+SG_USING_STD(endl);
+#endif
extern "C" void uiuc_init_aeromodel ();
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_vel_init ();
+extern "C" void uiuc_initial_init ();
AIRCRAFT *aircraft_ = new AIRCRAFT;
AIRCRAFTDIR *aircraftdir_ = new AIRCRAFTDIR;
-void uiuc_init_aeromodel ()
+// SendArray testarray(4950);
+
+/* Convert float to string */
+//string ftoa(double in)
+//{
+// static char temp[20];
+// sprintf(temp,"%g",in);
+// return (string)temp;
+//}
+
+void uiuc_initial_init ()
{
- string aircraft;
+ if (P_body_init_true)
+ P_body = P_body_init;
+ if (Q_body_init_true)
+ Q_body = Q_body_init;
+ if (R_body_init_true)
+ R_body = R_body_init;
- if (aircraft_dir != "")
- aircraft = aircraft_dir + "/";
+ if (Phi_init_true)
+ Phi = Phi_init;
+ if (Theta_init_true)
+ Theta = Theta_init;
+ if (Psi_init_true)
+ Psi = Psi_init;
- aircraft += "aircraft.dat";
- cout << "We are using "<< aircraft << endl;
+ if (U_body_init_true)
+ U_body = U_body_init;
+ if (V_body_init_true)
+ V_body = V_body_init;
+ if (W_body_init_true)
+ W_body = W_body_init;
+
+}
+
+void uiuc_vel_init ()
+{
+ if (U_body_init_true && V_body_init_true && W_body_init_true)
+ {
+ double det_T_l_to_b, cof11, cof12, cof13, cof21, cof22, cof23, cof31, cof32, cof33;
+
+ det_T_l_to_b = T_local_to_body_11*(T_local_to_body_22*T_local_to_body_33-T_local_to_body_23*T_local_to_body_32) - T_local_to_body_12*(T_local_to_body_21*T_local_to_body_33-T_local_to_body_23*T_local_to_body_31) + T_local_to_body_13*(T_local_to_body_21*T_local_to_body_32-T_local_to_body_22*T_local_to_body_31);
+ cof11 = T_local_to_body_22 * T_local_to_body_33 - T_local_to_body_23 * T_local_to_body_32;
+ cof12 = T_local_to_body_23 * T_local_to_body_31 - T_local_to_body_21 * T_local_to_body_33;
+ cof13 = T_local_to_body_21 * T_local_to_body_32 - T_local_to_body_22 * T_local_to_body_31;
+ cof21 = T_local_to_body_13 * T_local_to_body_32 - T_local_to_body_12 * T_local_to_body_33;
+ cof22 = T_local_to_body_11 * T_local_to_body_33 - T_local_to_body_13 * T_local_to_body_31;
+ cof23 = T_local_to_body_12 * T_local_to_body_31 - T_local_to_body_11 * T_local_to_body_32;
+ cof31 = T_local_to_body_12 * T_local_to_body_23 - T_local_to_body_13 * T_local_to_body_22;
+ cof32 = T_local_to_body_13 * T_local_to_body_21 - T_local_to_body_11 * T_local_to_body_23;
+ cof33 = T_local_to_body_11 * T_local_to_body_22 - T_local_to_body_12 * T_local_to_body_21;
+
+ V_north = (cof11*U_body+cof21*V_body+cof31*W_body)/det_T_l_to_b;
+ V_east_rel_ground = (cof12*U_body+cof22*V_body+cof32*W_body)/det_T_l_to_b;
+ V_down = (cof13*U_body+cof23*V_body+cof33*W_body)/det_T_l_to_b;
+
+ V_east = V_east_rel_ground + OMEGA_EARTH*Sea_level_radius*cos(Lat_geocentric);
+ }
+}
+
+void uiuc_init_aeromodel ()
+{
+ 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)
M_m_aero = Cm * qScbar;
M_n_aero = Cn * qSb;
- /* Call fligt data recorder */
- if (Simtime >= recordStartTime)
- uiuc_recorder(dt);
+ /* Call flight data recorder */
+ // if (Simtime >= recordStartTime)
+ // uiuc_recorder(dt);
+
+
+ // fog field update
+ Fog = 0;
+ if (fog_field)
+ uiuc_fog();
+
+ double vis;
+ if (Fog != 0)
+ {
+ vis = fgGetDouble("/environment/visibility-m");
+ if (Fog > 0)
+ vis /= 1.01;
+ else
+ vis *= 1.01;
+ 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);
+
+ // testarray.getHello();
+ // testarray.sendData(input);
+
+ /* End of Networking */
+
}
void uiuc_engine_routine()
uiuc_engine();
}
+void uiuc_gear_routine ()
+{
+ uiuc_gear();
+}
+
+void uiuc_record_routine(double dt)
+{
+ if (Simtime >= recordStartTime)
+ uiuc_recorder(dt);
+}
//end uiuc_wrapper.cpp