11/12/2001 (RD) Added new variables needed for the non-
linear Twin Otter model at zero flaps
(CxfxxfI). Removed zero flap variables.
- Added flap_pos and flap_goal.
+ Added flap_pos and flap_cmd_deg.
02/13/2002 (RD) Added variables so linear aero model
values can be recorded
+ 03/03/2003 (RD) Added flap_cmd_record
+ 03/16/2003 (RD) Added trigger record variables
+ 07/17/2003 (RD) Added error checking code (default
+ routine) since it was removed from
+ uiuc_menu_record()
+ 08/20/2003 (RD) Changed spoiler variables to match
+ flap convention. Added flap_pos_norm
----------------------------------------------------------------------
- AUTHOR(S): Jeff Scott <jscott@mail.com>
+ AUTHOR(S): Jeff Scott http://www.jeffscott.net/
Robert Deters <rdeters@uiuc.edu>
-
+ Michael Selig <m-selig@uiuc.edu>
----------------------------------------------------------------------
VARIABLES:
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA or view http://www.gnu.org/copyleft/gpl.html.
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
**********************************************************************/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <simgear/compiler.h>
+#include <simgear/misc/sg_path.hxx>
+#include <Main/fg_props.hxx>
+
#include "uiuc_recorder.h"
-#if !defined (SG_HAVE_NATIVE_SGI_COMPILERS)
-SG_USING_STD(endl); // -dw
-#endif
+using std::endl; // -dw
void uiuc_recorder( double dt )
{
stack command_list;
string linetoken;
- static int init = 0;
+ // static int init = 0;
static int recordStep = 0;
string record_variables = "# ";
- int modulus = recordStep % recordRate;
+ // int modulus = recordStep % recordRate;
+
+ //static double lat1;
+ //static double long1;
+ //double D_cg_north1;
+ //double D_cg_east1;
+ //if (Simtime == 0)
+ // {
+ // lat1=Latitude;
+ // long1=Longitude;
+ // }
if ((recordStep % recordRate) == 0)
{
fout << Psi << " ";
break;
}
+ case Phi_deg_record:
+ {
+ fout << Phi*RAD_TO_DEG << " ";
+ break;
+ }
+ case Theta_deg_record:
+ {
+ fout << Theta*RAD_TO_DEG << " ";
+ break;
+ }
+ case Psi_deg_record:
+ {
+ fout << Psi*RAD_TO_DEG << " ";
+ break;
+ }
/******************** Accelerations ********************/
case V_dot_north_record:
fout << V_down << " ";
break;
}
+ case V_down_fpm_record:
+ {
+ fout << V_down * 60 << " ";
+ break;
+ }
case V_north_rel_ground_record:
{
fout << V_north_rel_ground << " ";
/************************ Angles ***********************/
case Alpha_record:
{
- fout << Alpha << " ";
+ fout << Std_Alpha << " ";
break;
}
case Alpha_deg_record:
{
- fout << Alpha * RAD_TO_DEG << " ";
+ fout << Std_Alpha * RAD_TO_DEG << " ";
break;
}
case Alpha_dot_record:
{
- fout << Alpha_dot << " ";
+ fout << Std_Alpha_dot << " ";
break;
}
case Alpha_dot_deg_record:
{
- fout << Alpha_dot * RAD_TO_DEG << " ";
+ fout << Std_Alpha_dot * RAD_TO_DEG << " ";
break;
}
case Beta_record:
{
- fout << Beta << " ";
+ fout << Std_Beta << " ";
break;
}
case Beta_deg_record:
{
- fout << Beta * RAD_TO_DEG << " ";
+ fout << Std_Beta * RAD_TO_DEG << " ";
break;
}
case Beta_dot_record:
{
- fout << Beta_dot << " ";
+ fout << Std_Beta_dot << " ";
break;
}
case Beta_dot_deg_record:
{
- fout << Beta_dot * RAD_TO_DEG << " ";
+ fout << Std_Beta_dot * RAD_TO_DEG << " ";
break;
}
case Gamma_vert_record:
break;
}
- /******************** Control Inputs *******************/
+ /************************ Controls ***********************/
case Long_control_record:
{
fout << Long_control << " ";
fout << elevator * RAD_TO_DEG << " ";
break;
}
+ case elevator_sas_deg_record:
+ {
+ fout << elevator_sas * RAD_TO_DEG << " ";
+ break;
+ }
case Lat_control_record:
{
fout << Lat_control << " ";
fout << aileron * RAD_TO_DEG << " ";
break;
}
+ case aileron_sas_deg_record:
+ {
+ fout << aileron_sas * RAD_TO_DEG << " ";
+ break;
+ }
case Rudder_pedal_record:
{
fout << Rudder_pedal << " ";
fout << rudder * RAD_TO_DEG << " ";
break;
}
+ case rudder_sas_deg_record:
+ {
+ fout << rudder_sas * RAD_TO_DEG << " ";
+ break;
+ }
case Flap_handle_record:
{
fout << Flap_handle << " ";
break;
}
- case flap_record:
+ case flap_cmd_record:
{
- fout << flap << " ";
+ fout << flap_cmd << " ";
break;
}
- case flap_deg_record:
+ case flap_cmd_deg_record:
{
- fout << flap * RAD_TO_DEG << " ";
+ fout << flap_cmd * RAD_TO_DEG << " ";
break;
}
- case flap_goal_record:
+ case flap_pos_record:
{
- fout << flap_goal << " ";
+ fout << flap_pos << " ";
break;
}
- case flap_pos_record:
+ case flap_pos_deg_record:
{
- fout << flap_pos << " ";
+ fout << flap_pos * RAD_TO_DEG << " ";
+ break;
+ }
+ case flap_pos_norm_record:
+ {
+ fout << flap_pos_norm << " ";
+ break;
+ }
+ case Spoiler_handle_record:
+ {
+ fout << Spoiler_handle << " ";
+ break;
+ }
+ case spoiler_cmd_record:
+ {
+ fout << spoiler_cmd << " ";
+ break;
+ }
+ case spoiler_cmd_deg_record:
+ {
+ fout << spoiler_cmd * RAD_TO_DEG << " ";
+ break;
+ }
+ case spoiler_pos_record:
+ {
+ fout << spoiler_pos << " ";
+ break;
+ }
+ case spoiler_pos_deg_record:
+ {
+ fout << spoiler_pos * RAD_TO_DEG << " ";
+ break;
+ }
+ case spoiler_pos_norm_record:
+ {
+ fout << spoiler_pos_norm << " ";
+ break;
+ }
+
+ /****************** Gear Inputs ************************/
+ case Gear_handle_record:
+ {
+ fout << Gear_handle << " ";
+ break;
+ }
+ case gear_cmd_norm_record:
+ {
+ fout << gear_cmd_norm << " ";
+ break;
+ }
+ case gear_pos_norm_record:
+ {
+ fout << gear_pos_norm << " ";
break;
}
fout << CDK_save << " ";
break;
}
+ case CLK_save_record:
+ {
+ fout << CLK_save << " ";
+ break;
+ }
case CD_a_save_record:
{
fout << CD_a_save << " ";
fout << CD_de_save << " ";
break;
}
+ case CD_dr_save_record:
+ {
+ fout << CD_dr_save << " ";
+ break;
+ }
+ case CD_da_save_record:
+ {
+ fout << CD_da_save << " ";
+ break;
+ }
+ case CD_beta_save_record:
+ {
+ fout << CD_beta_save << " ";
+ break;
+ }
+ case CD_df_save_record:
+ {
+ fout << CD_df_save << " ";
+ break;
+ }
+ case CD_ds_save_record:
+ {
+ fout << CD_ds_save << " ";
+ break;
+ }
+ case CD_dg_save_record:
+ {
+ fout << CD_dg_save << " ";
+ break;
+ }
case CXo_save_record:
{
fout << CXo_save << " ";
fout << CL_de_save << " ";
break;
}
+ case CL_df_save_record:
+ {
+ fout << CL_df_save << " ";
+ break;
+ }
+ case CL_ds_save_record:
+ {
+ fout << CL_ds_save << " ";
+ break;
+ }
+ case CL_dg_save_record:
+ {
+ fout << CL_dg_save << " ";
+ break;
+ }
case CZo_save_record:
{
fout << CZo_save << " ";
fout << Cm_df_save << " ";
break;
}
+ case Cm_ds_save_record:
+ {
+ fout << Cm_ds_save << " ";
+ break;
+ }
+ case Cm_dg_save_record:
+ {
+ fout << Cm_dg_save << " ";
+ break;
+ }
case CY_record:
{
fout << CY << " ";
{
fout << eta_ice << " ";
break;
- }
+ }
+ case eta_wing_left_record:
+ {
+ fout << eta_wing_left << " ";
+ break;
+ }
+ case eta_wing_right_record:
+ {
+ fout << eta_wing_right << " ";
+ break;
+ }
+ case eta_tail_record:
+ {
+ fout << eta_tail << " ";
+ break;
+ }
+ case delta_CL_record:
+ {
+ fout << delta_CL << " ";
+ break;
+ }
+ case delta_CD_record:
+ {
+ fout << delta_CD << " ";
+ break;
+ }
+ case delta_Cm_record:
+ {
+ fout << delta_Cm << " ";
+ break;
+ }
+ case delta_Cl_record:
+ {
+ fout << delta_Cl << " ";
+ break;
+ }
+ case delta_Cn_record:
+ {
+ fout << delta_Cn << " ";
+ break;
+ }
+ case boot_cycle_tail_record:
+ {
+ fout << boot_cycle_tail << " ";
+ break;
+ }
+ case boot_cycle_wing_left_record:
+ {
+ fout << boot_cycle_wing_left << " ";
+ break;
+ }
+ case boot_cycle_wing_right_record:
+ {
+ fout << boot_cycle_wing_right << " ";
+ break;
+ }
+ case autoIPS_tail_record:
+ {
+ fout << autoIPS_tail << " ";
+ break;
+ }
+ case autoIPS_wing_left_record:
+ {
+ fout << autoIPS_wing_left << " ";
+ break;
+ }
+ case autoIPS_wing_right_record:
+ {
+ fout << autoIPS_wing_right << " ";
+ break;
+ }
+ case eps_pitch_input_record:
+ {
+ fout << eps_pitch_input << " ";
+ break;
+ }
+ case eps_alpha_max_record:
+ {
+ fout << eps_alpha_max << " ";
+ break;
+ }
+ case eps_pitch_max_record:
+ {
+ fout << eps_pitch_max << " ";
+ break;
+ }
+ case eps_pitch_min_record:
+ {
+ fout << eps_pitch_min << " ";
+ break;
+ }
+ case eps_roll_max_record:
+ {
+ fout << eps_roll_max << " ";
+ break;
+ }
+ case eps_thrust_min_record:
+ {
+ fout << eps_thrust_min << " ";
+ break;
+ }
+ case eps_flap_max_record:
+ {
+ fout << eps_flap_max << " ";
+ break;
+ }
+ case eps_airspeed_max_record:
+ {
+ fout << eps_airspeed_max << " ";
+ break;
+ }
+ case eps_airspeed_min_record:
+ {
+ fout << eps_airspeed_min << " ";
+ break;
+ }
+
+ /****************** Autopilot **************************/
+ case ap_pah_on_record:
+ {
+ fout << ap_pah_on << " ";
+ break;
+ }
+ case ap_alh_on_record:
+ {
+ fout << ap_alh_on << " ";
+ break;
+ }
+ case ap_rah_on_record:
+ {
+ fout << ap_rah_on << " ";
+ break;
+ }
+ case ap_hh_on_record:
+ {
+ fout << ap_hh_on << " ";
+ break;
+ }
+ case ap_Theta_ref_deg_record:
+ {
+ fout << ap_Theta_ref_rad*RAD_TO_DEG << " ";
+ break;
+ }
+ case ap_Theta_ref_rad_record:
+ {
+ fout << ap_Theta_ref_rad << " ";
+ break;
+ }
+ case ap_alt_ref_ft_record:
+ {
+ fout << ap_alt_ref_ft << " ";
+ break;
+ }
+ case ap_Phi_ref_deg_record:
+ {
+ fout << ap_Phi_ref_rad*RAD_TO_DEG << " ";
+ break;
+ }
+ case ap_Phi_ref_rad_record:
+ {
+ fout << ap_Phi_ref_rad << " ";
+ break;
+ }
+ case ap_Psi_ref_deg_record:
+ {
+ fout << ap_Psi_ref_rad*RAD_TO_DEG << " ";
+ break;
+ }
+ case ap_Psi_ref_rad_record:
+ {
+ fout << ap_Psi_ref_rad << " ";
+ break;
+ }
/************************ Forces ***********************/
case F_X_wind_record:
fout << M_n_rp << " ";
break;
}
+ case M_l_cg_record:
+ {
+ fout << M_l_cg << " ";
+ break;
+ }
+ case M_m_cg_record:
+ {
+ fout << M_m_cg << " ";
+ break;
+ }
+ case M_n_cg_record:
+ {
+ fout << M_n_cg << " ";
+ break;
+ }
- /*********************** Moments ***********************/
-/* case flapper_freq_record:
+ /********************* flapper *********************/
+ case flapper_freq_record:
{
fout << flapper_freq << " ";
break;
{
fout << flapper_Moment << " ";
break;
- } */
- };
+ }
+ /****************Other Variables*******************/
+ case gyroMomentQ_record:
+ {
+ fout << polarInertia * engineOmega * Q_body << " ";
+ break;
+ }
+ case gyroMomentR_record:
+ {
+ fout << -polarInertia * engineOmega * R_body << " ";
+ break;
+ }
+ case eta_q_record:
+ {
+ fout << eta_q << " ";
+ break;
+ }
+ case rpm_record:
+ {
+ fout << (engineOmega * 60 / (2 * LS_PI)) << " ";
+ break;
+ }
+ case w_induced_record:
+ {
+ fout << w_induced << " ";
+ break;
+ }
+ case downwashAngle_deg_record:
+ {
+ fout << downwashAngle * RAD_TO_DEG << " ";
+ break;
+ }
+ case alphaTail_deg_record:
+ {
+ fout << alphaTail * RAD_TO_DEG << " ";
+ break;
+ }
+ case gammaWing_record:
+ {
+ fout << gammaWing << " ";
+ break;
+ }
+ case LD_record:
+ {
+ fout << V_ground_speed/V_down_rel_ground << " ";
+ break;
+ }
+ case gload_record:
+ {
+ fout << -A_Z_cg/32.174 << " ";
+ break;
+ }
+ case tactilefadefI_record:
+ {
+ fout << tactilefadefI << " ";
+ break;
+ }
+ /****************Trigger Variables*******************/
+ case trigger_on_record:
+ {
+ fout << trigger_on << " ";
+ break;
+ }
+ case trigger_num_record:
+ {
+ fout << trigger_num << " ";
+ break;
+ }
+ case trigger_toggle_record:
+ {
+ fout << trigger_toggle << " ";
+ break;
+ }
+ case trigger_counter_record:
+ {
+ fout << trigger_counter << " ";
+ break;
+ }
+ /*********local to body transformation matrix********/
+ case T_local_to_body_11_record:
+ {
+ fout << T_local_to_body_11 << " ";
+ break;
+ }
+ case T_local_to_body_12_record:
+ {
+ fout << T_local_to_body_12 << " ";
+ break;
+ }
+ case T_local_to_body_13_record:
+ {
+ fout << T_local_to_body_13 << " ";
+ break;
+ }
+ case T_local_to_body_21_record:
+ {
+ fout << T_local_to_body_21 << " ";
+ break;
+ }
+ case T_local_to_body_22_record:
+ {
+ fout << T_local_to_body_22 << " ";
+ break;
+ }
+ case T_local_to_body_23_record:
+ {
+ fout << T_local_to_body_23 << " ";
+ break;
+ }
+ case T_local_to_body_31_record:
+ {
+ fout << T_local_to_body_31 << " ";
+ break;
+ }
+ case T_local_to_body_32_record:
+ {
+ fout << T_local_to_body_32 << " ";
+ break;
+ }
+ case T_local_to_body_33_record:
+ {
+ fout << T_local_to_body_33 << " ";
+ break;
+ }
+
+ /********* MSS debug and other data *******************/
+ /* debug variables for use in probing data */
+ /* comment out old lines, and add new */
+ /* only remove code that you have written */
+ case debug1_record:
+ {
+ // eta_q term check
+ // fout << eta_q_Cm_q_fac << " ";
+ // fout << eta_q_Cm_adot_fac << " ";
+ // fout << eta_q_Cmfade_fac << " ";
+ // fout << eta_q_Cl_dr_fac << " ";
+ // fout << eta_q_Cm_de_fac << " ";
+ // eta on tail
+ // fout << eta_q << " ";
+ // engine RPM
+ // fout << engineOmega * 60 / (2 * LS_PI)<< " ";
+ // vertical climb rate in fpm
+ fout << V_down * 60 << " ";
+ // vertical climb rate in fps
+ // fout << V_down << " ";
+ // w_induced downwash at tail due to wing
+ // fout << gammaWing << " ";
+ //fout << outside_control << " ";
+ break;
+ }
+ case debug2_record:
+ {
+ // Lift to drag ratio
+ // fout << V_ground_speed/V_down_rel_ground << " ";
+ // g's through the c.g. of the aircraft
+ fout << (-A_Z_cg/32.174) << " ";
+ // L/D via forces (used in 201 class for L/D)
+ // fout << (F_Z_wind/F_X_wind) << " ";
+ // gyroscopic moment (see uiuc_wrapper.cpp)
+ // fout << (polarInertia * engineOmega * Q_body) << " ";
+ // downwashAngle at tail
+ // fout << downwashAngle * 57.29 << " ";
+ // w_induced from engine
+ // fout << w_induced << " ";
+ break;
+ }
+ case debug3_record:
+ {
+ // die off function for eta_q
+ // fout << (Cos_alpha * Cos_alpha) << " ";
+ // gyroscopic moment (see uiuc_wrapper.cpp)
+ // fout << (-polarInertia * engineOmega * R_body) << " ";
+ // eta on tail
+ // fout << eta_q << " ";
+ // flapper cycle percentage
+ fout << (sin(flapper_phi - 3 * LS_PI / 2)) << " ";
+ break;
+ }
+ /********* RD debug and other data *******************/
+ /* debug variables for use in probing data */
+ /* comment out old lines, and add new */
+ /* only remove code that you have written */
+ case debug4_record:
+ {
+ // flapper F_X_aero_flapper
+ //fout << F_X_aero_flapper << " ";
+ //ap_pah_on
+ //fout << ap_pah_on << " ";
+ //D_cg_north1 = Radius_to_rwy*(Latitude - lat1);
+ //fout << D_cg_north1 << " ";
+ break;
+ }
+ case debug5_record:
+ {
+ // flapper F_Z_aero_flapper
+ //fout << F_Z_aero_flapper << " ";
+ // gear_rate
+ //D_cg_east1 = Radius_to_rwy*cos(lat1)*(Longitude - long1);
+ //fout << D_cg_east1 << " ";
+ break;
+ }
+ case debug6_record:
+ {
+ //gear_max
+ //fout << gear_max << " ";
+ //fout << sqrt(D_cg_north1*D_cg_north1+D_cg_east1*D_cg_east1) << " ";
+ break;
+ }
+ case debug7_record:
+ {
+ //Debug7
+ fout << debug7 << " ";
+ break;
+ }
+ case debug8_record:
+ {
+ //Debug8
+ fout << debug8 << " ";
+ break;
+ }
+ case debug9_record:
+ {
+ //Debug9
+ fout << debug9 << " ";
+ break;
+ }
+ case debug10_record:
+ {
+ //Debug10
+ fout << debug10 << " ";
+ break;
+ }
+ default:
+ {
+ if (ignore_unknown_keywords) {
+ // do nothing
+ } else {
+ // print error message
+ uiuc_warnings_errors(2, *command_line);
+ }
+ break;
+ }
+ };
} // end record map
}
recordStep++;