diff --git a/ArduPlane/Attitude.cpp b/ArduPlane/Attitude.cpp index 17cc78bc17397..2fa134a54f083 100644 --- a/ArduPlane/Attitude.cpp +++ b/ArduPlane/Attitude.cpp @@ -209,7 +209,7 @@ float Plane::stabilize_pitch_get_pitch_out() const bool quadplane_in_frwd_transition = false; #endif - int32_t demanded_pitch = nav_pitch_cd + int32_t(g.pitch_trim * 100.0) + SRV_Channels::get_output_scaled(SRV_Channel::k_throttle) * g.kff_throttle_to_pitch; + demanded_pitch_logged = nav_pitch_cd*0.01f + g.pitch_trim + SRV_Channels::get_output_scaled(SRV_Channel::k_throttle)*0.01f*g.kff_throttle_to_pitch; bool disable_integrator = false; if (control_mode == &mode_stabilize && channel_pitch->get_control_in() != 0) { disable_integrator = true; @@ -224,10 +224,10 @@ float Plane::stabilize_pitch_get_pitch_out() !control_mode->does_auto_throttle() && flare_mode == FlareMode::ENABLED_PITCH_TARGET && throttle_at_zero()) { - demanded_pitch = landing.get_pitch_cd(); + demanded_pitch_logged = landing.get_pitch_cd()*0.01f; } - return pitchController.get_servo_out(demanded_pitch - ahrs.pitch_sensor, speed_scaler, disable_integrator, + return pitchController.get_servo_out(demanded_pitch_logged*100 - ahrs.pitch_sensor, speed_scaler, disable_integrator, ground_mode && !(plane.flight_option_enabled(FlightOptions::DISABLE_GROUND_PID_SUPPRESSION))); } diff --git a/ArduPlane/Log.cpp b/ArduPlane/Log.cpp index a258269779a39..7acd8c7f40ec4 100644 --- a/ArduPlane/Log.cpp +++ b/ArduPlane/Log.cpp @@ -7,7 +7,7 @@ void Plane::Log_Write_Attitude(void) { Vector3f targets { // Package up the targets into a vector for commonality with Copter usage of Log_Wrote_Attitude nav_roll_cd * 0.01f, - nav_pitch_cd * 0.01f, + demanded_pitch_logged, 0 //Plane does not have the concept of navyaw. This is a placeholder. }; diff --git a/ArduPlane/Plane.cpp b/ArduPlane/Plane.cpp index 2fb6cb1eebdc5..c17cd46661a22 100644 --- a/ArduPlane/Plane.cpp +++ b/ArduPlane/Plane.cpp @@ -511,6 +511,10 @@ void Plane::update_control_mode(void) takeoff_state.throttle_lim_max = 100.0f; takeoff_state.throttle_lim_min = -100.0f; + // Preemptively set demanded pitch to NaN, so that it properly doesn't + // get logged. Modes ovewriting it (most modes do) will change it. + demanded_pitch_logged = logger.quiet_nanf(); + update_fly_forward(); control_mode->update(); diff --git a/ArduPlane/Plane.h b/ArduPlane/Plane.h index b272a13b11ff1..1d9cf8723233a 100644 --- a/ArduPlane/Plane.h +++ b/ArduPlane/Plane.h @@ -668,9 +668,12 @@ class Plane : public AP_Vehicle { // The instantaneous desired bank angle. Hundredths of a degree int32_t nav_roll_cd; - // The instantaneous desired pitch angle. Hundredths of a degree + // The instantaneous navigator-commanded pitch angle. Hundredths of a degree int32_t nav_pitch_cd; + // The instantaneous desired pitch angle in degrees. + float demanded_pitch_logged; + // the aerodynamic load factor. This is calculated from the demanded // roll before the roll is clipped, using 1/sqrt(cos(nav_roll)) float aerodynamic_load_factor = 1.0f;