paparazzi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[paparazzi-commits] [4899] Test for a new vertical control


From: Gautier Hattenberger
Subject: [paparazzi-commits] [4899] Test for a new vertical control
Date: Tue, 04 May 2010 08:38:59 +0000

Revision: 4899
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=4899
Author:   gautier
Date:     2010-05-04 08:38:58 +0000 (Tue, 04 May 2010)
Log Message:
-----------
Test for a new vertical control

Added Paths:
-----------
    paparazzi3/trunk/conf/settings/fw_ctl_n.xml
    paparazzi3/trunk/sw/airborne/fw_v_ctl_n.c
    paparazzi3/trunk/sw/airborne/fw_v_ctl_n.h

Added: paparazzi3/trunk/conf/settings/fw_ctl_n.xml
===================================================================
--- paparazzi3/trunk/conf/settings/fw_ctl_n.xml                         (rev 0)
+++ paparazzi3/trunk/conf/settings/fw_ctl_n.xml 2010-05-04 08:38:58 UTC (rev 
4899)
@@ -0,0 +1,62 @@
+<!DOCTYPE settings SYSTEM "settings.dtd">
+
+<!-- A conf to use to tune a new A/C -->
+
+<settings>
+  <dl_settings>
+    <dl_settings NAME="control">
+
+      <dl_settings NAME="attitude">
+        <dl_setting MAX="0" MIN="-15000" STEP="250" 
VAR="h_ctl_roll_attitude_gain" shortname="roll_pgain" 
param="H_CTL_ROLL_ATTITUDE_GAIN" module="fw_h_ctl"/>
+        <dl_setting MAX="0" MIN="-15000" STEP="250" VAR="h_ctl_roll_rate_gain" 
shortname="roll_dgain" param="H_CTL_ROLL_RATE_GAIN"/>
+        <dl_setting MAX="0" MIN="-55000" STEP="250" VAR="h_ctl_pitch_pgain" 
shortname="pitch_pgain" param="H_CTL_PITCH_PGAIN"/>
+        <dl_setting MAX="0" MIN="-55000" STEP="250" VAR="h_ctl_pitch_dgain" 
shortname="pitch_dgain" param="H_CTL_PITCH_DGAIN"/>
+        <dl_setting MAX="1." MIN="0." STEP="0.01" VAR="h_ctl_pitch_of_roll" 
shortname="pitch_of_roll" param="H_CTL_PITCH_OF_ROLL" module="fw_h_ctl_a"/>
+        <dl_setting MAX="5000" MIN="0" STEP="100" 
VAR="h_ctl_aileron_of_throttle" shortname="aileron_of_throttle"/>
+
+        <dl_setting MAX="60" MIN="0" STEP="1" VAR="h_ctl_roll_max_setpoint" 
shortname="max_roll" param="H_CTL_ROLL_MAX_SETPOINT" unit="rad" alt_unit="deg" 
alt_unit_coef="0.0174533"/>
+      </dl_settings>
+
+      <dl_settings name="alt">
+        <dl_setting MAX="0" MIN="-0.2" STEP="0.01" VAR="v_ctl_altitude_pgain" 
shortname="alt_pgain" param="V_CTL_ALTITUDE_PGAIN"/>
+      </dl_settings>
+
+      <dl_settings name="climb">
+        <dl_setting MAX="1" MIN="0.0" STEP="0.05" 
VAR="v_ctl_auto_throttle_cruise_throttle" shortname="cruise throttle" 
module="fw_v_ctl" handler="SetCruiseThrottle" 
param="V_CTL_AUTO_THROTTLE_NOMINAL_CRUISE_THROTTLE"/>
+
+        <dl_setting MAX="0" MIN="-0.1" STEP="0.01" 
VAR="v_ctl_auto_pitch_pgain" shortname="pitch_p" 
param="V_CTL_AUTO_PITCH_PGAIN"/>
+        <dl_setting MAX="0" MIN="-0.1" STEP="0.01" 
VAR="v_ctl_auto_pitch_igain" shortname="pitch_i" 
param="V_CTL_AUTO_PITCH_IGAIN"/>
+        <dl_setting MAX="0" MIN="-0.1" STEP="0.01" 
VAR="v_ctl_auto_pitch_dgain" shortname="pitch_d" param="V_CTL_AUTO_PITCH_DGAIN" 
module="fw_v_ctl_n"/>
+
+        <dl_setting MAX="0" MIN="-0.1" STEP="0.01" 
VAR="v_ctl_auto_throttle_pgain" shortname="throttle_p" 
param="V_CTL_AUTO_THROTTLE_PGAIN"/>
+        <dl_setting MAX="0" MIN="-0.1" STEP="0.01" 
VAR="v_ctl_auto_throttle_igain" shortname="throttle_i" 
param="V_CTL_AUTO_THROTTLE_IGAIN"/>
+        <dl_setting MAX="0" MIN="-0.1" STEP="0.01" 
VAR="v_ctl_auto_throttle_dgain" shortname="throttle_d" 
param="V_CTL_AUTO_THROTTLE_DGAIN"/>
+        
+        <dl_setting MAX="0" MIN="-1." STEP="0.01" VAR="v_ctl_pitch_dash_trim" 
shortname="dash trim" param="V_CTL_PITCH_DASH_TRIM"/>
+        <dl_setting MIN="0" MAX="1." STEP="0.01" VAR="v_ctl_pitch_loiter_trim" 
shortname="loiter trim" param="V_CTL_PITCH_LOITER_TRIM"/>
+
+        <dl_setting MAX="1" MIN="0" STEP="0.01" 
VAR="v_ctl_auto_throttle_climb_throttle_increment" shortname="throttle_incr" 
param="V_CTL_AUTO_THROTTLE_CLIMB_THROTTLE_INCREMENT"/>
+        <dl_setting MAX="1" MIN="0" STEP="0.01" 
VAR="v_ctl_auto_throttle_pitch_of_vz_pgain" shortname="pitch_of_vz" 
param="V_CTL_AUTO_THROTTLE_PITCH_OF_VZ_PGAIN"/>
+      </dl_settings>
+
+      <dl_settings name="nav">
+        <dl_setting MAX="-0.1" MIN="-3" STEP="0.05" VAR="h_ctl_course_pgain" 
shortname="course pgain" param="H_CTL_COURSE_PGAIN"/>
+        <dl_setting MAX="2" MIN="0" STEP="0.1" VAR="h_ctl_course_dgain" 
shortname="course dgain"/>
+        <dl_setting MAX="2" MIN="0.1" STEP="0.05" 
VAR="h_ctl_course_pre_bank_correction" shortname="pre bank cor"/>
+        <dl_setting MAX="1" MIN="0.0" STEP="0.05" VAR="nav_glide_pitch_trim" 
shortname="glide pitch trim" param="NAV_GLIDE_PITCH_TRIM"/>
+        <dl_setting MAX="1" MIN="0.02" STEP="0.01" VAR="h_ctl_roll_slew" 
shortname="roll slew"/>
+        <dl_setting MAX="500" MIN="-500" STEP="5" VAR="nav_radius"/>
+        <dl_setting MAX="359" MIN="0" STEP="5" VAR="nav_course"/>
+        <dl_setting MAX="2" MIN="1" STEP="1" VAR="nav_mode"/>
+        <dl_setting MAX="5" MIN="-5" STEP="0.5" VAR="nav_climb"/>
+        <dl_setting MAX="15" MIN="-15" STEP="1" VAR="fp_pitch"/>
+        <dl_setting MAX="50" MIN="-50" STEP="5" VAR="nav_shift" module="nav" 
handler="IncreaseShift" shortname="inc. shift"/>
+        <dl_setting MAX="50" MIN="5" STEP="0.5" 
VAR="nav_ground_speed_setpoint" shortname="ground speed"/>
+        <dl_setting MAX="0." MIN="-0.2" STEP="0.01" 
VAR="nav_ground_speed_pgain" shortname="ground speed pgain"/>
+        <dl_setting MAX="500" MIN="50" STEP="5" VAR="nav_survey_shift"/>
+        <dl_setting MAX="0.3" MIN="0" STEP="0.01" VAR="cte_igain"/>
+        <dl_setting MAX="20" MIN="0" STEP="1" VAR="cte_max"/>
+      </dl_settings>
+    </dl_settings>
+  </dl_settings>
+</settings>

Added: paparazzi3/trunk/sw/airborne/fw_v_ctl_n.c
===================================================================
--- paparazzi3/trunk/sw/airborne/fw_v_ctl_n.c                           (rev 0)
+++ paparazzi3/trunk/sw/airborne/fw_v_ctl_n.c   2010-05-04 08:38:58 UTC (rev 
4899)
@@ -0,0 +1,292 @@
+/*
+ * $Id: $
+ *  
+ * Copyright (C) 2010 ENAC
+ *
+ * This file is part of paparazzi.
+ *
+ * paparazzi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * paparazzi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with paparazzi; see the file COPYING.  If not, write to
+ * the Free Software Foundation, 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA. 
+ *
+ */
+
+/** 
+ *  \file v_ctl_ctl_n
+ *  \brief Vertical control for fixed wing vehicles.
+ *
+ */
+
+#include "fw_v_ctl.h"
+#include "fw_v_ctl_n.h"
+#include "estimator.h"
+#include "nav.h"
+#include "airframe.h"
+#include "autopilot.h"
+
+/* mode */
+uint8_t v_ctl_mode;
+
+/* outer loop */
+float v_ctl_altitude_setpoint;
+float v_ctl_altitude_pre_climb;
+float v_ctl_altitude_pgain;
+float v_ctl_altitude_error;
+
+/* inner loop */
+float v_ctl_climb_setpoint;
+uint8_t v_ctl_climb_mode;
+uint8_t v_ctl_auto_throttle_submode;
+
+/* "auto throttle" inner loop parameters */
+float v_ctl_auto_throttle_cruise_throttle;
+float v_ctl_auto_throttle_nominal_cruise_throttle;
+float v_ctl_auto_throttle_climb_throttle_increment;
+float v_ctl_auto_throttle_pgain;
+float v_ctl_auto_throttle_igain;
+float v_ctl_auto_throttle_dgain;
+float v_ctl_auto_throttle_sum_err;
+#define V_CTL_AUTO_THROTTLE_MAX_SUM_ERR 150
+float v_ctl_auto_throttle_pitch_of_vz_pgain;
+float v_ctl_auto_throttle_pitch_of_vz_dgain;
+
+#ifndef V_CTL_AUTO_THROTTLE_PITCH_OF_VZ_DGAIN
+#define V_CTL_AUTO_THROTTLE_PITCH_OF_VZ_DGAIN 0.
+#endif
+
+/* "auto pitch" inner loop parameters */
+float v_ctl_auto_pitch_pgain;
+float v_ctl_auto_pitch_dgain;
+float v_ctl_auto_pitch_igain;
+float v_ctl_auto_pitch_sum_err;
+#define V_CTL_AUTO_PITCH_MAX_SUM_ERR 100
+
+float controlled_throttle;
+pprz_t v_ctl_throttle_setpoint;
+pprz_t v_ctl_throttle_slewed;
+
+// Set higher than 2*V_CTL_ALTITUDE_MAX_CLIMB to disable
+#define V_CTL_AUTO_CLIMB_LIMIT 0.5/4.0 // m/s/s
+
+uint8_t v_ctl_speed_mode;
+
+#ifdef USE_AIRSPEED
+float v_ctl_auto_airspeed_setpoint;
+float v_ctl_auto_airspeed_controlled;
+float v_ctl_auto_airspeed_pgain;
+float v_ctl_auto_airspeed_igain;
+float v_ctl_auto_airspeed_sum_err;
+float v_ctl_auto_groundspeed_setpoint;
+float v_ctl_auto_groundspeed_pgain;
+float v_ctl_auto_groundspeed_igain;
+float v_ctl_auto_groundspeed_sum_err;
+#define V_CTL_AUTO_AIRSPEED_MAX_SUM_ERR 200
+#define V_CTL_AUTO_GROUNDSPEED_MAX_SUM_ERR 100
+#endif
+
+
+void v_ctl_init( void ) {
+  /* mode */
+  v_ctl_mode = V_CTL_MODE_MANUAL;
+  v_ctl_speed_mode = V_CTL_SPEED_THROTTLE;
+
+  /* outer loop */
+  v_ctl_altitude_setpoint = 0.;
+  v_ctl_altitude_pre_climb = 0.;
+  v_ctl_altitude_pgain = V_CTL_ALTITUDE_PGAIN;
+  v_ctl_altitude_error = 0.;
+
+  /* inner loops */
+  v_ctl_climb_setpoint = 0.;
+  v_ctl_climb_mode = V_CTL_CLIMB_MODE_AUTO_THROTTLE;
+  v_ctl_auto_throttle_submode = V_CTL_AUTO_THROTTLE_STANDARD;
+
+  /* "auto throttle" inner loop parameters */
+  v_ctl_auto_throttle_nominal_cruise_throttle = 
V_CTL_AUTO_THROTTLE_NOMINAL_CRUISE_THROTTLE;
+  v_ctl_auto_throttle_cruise_throttle = 
v_ctl_auto_throttle_nominal_cruise_throttle;
+  v_ctl_auto_throttle_climb_throttle_increment = 
V_CTL_AUTO_THROTTLE_CLIMB_THROTTLE_INCREMENT;
+  v_ctl_auto_throttle_pgain = V_CTL_AUTO_THROTTLE_PGAIN;
+  v_ctl_auto_throttle_igain = V_CTL_AUTO_THROTTLE_IGAIN;
+  v_ctl_auto_throttle_dgain = 0.;
+  v_ctl_auto_throttle_sum_err = 0.;
+  v_ctl_auto_throttle_pitch_of_vz_pgain = 
V_CTL_AUTO_THROTTLE_PITCH_OF_VZ_PGAIN; 
+  v_ctl_auto_throttle_pitch_of_vz_dgain = 
V_CTL_AUTO_THROTTLE_PITCH_OF_VZ_DGAIN; 
+
+  /* "auto pitch" inner loop parameters */
+  v_ctl_auto_pitch_pgain = V_CTL_AUTO_PITCH_PGAIN;
+  v_ctl_auto_pitch_dgain = V_CTL_AUTO_PITCH_DGAIN;
+  v_ctl_auto_pitch_igain = V_CTL_AUTO_PITCH_IGAIN;
+  v_ctl_auto_pitch_sum_err = 0.;
+
+#ifdef USE_AIRSPEED
+  v_ctl_auto_airspeed_setpoint = V_CTL_AUTO_AIRSPEED_SETPOINT;
+  v_ctl_auto_airspeed_controlled = V_CTL_AUTO_AIRSPEED_SETPOINT;
+  v_ctl_auto_airspeed_pgain = V_CTL_AUTO_AIRSPEED_PGAIN;
+  v_ctl_auto_airspeed_igain = V_CTL_AUTO_AIRSPEED_IGAIN;
+  v_ctl_auto_airspeed_sum_err = 0.;
+
+  v_ctl_auto_groundspeed_setpoint = V_CTL_AUTO_GROUNDSPEED_SETPOINT;
+  v_ctl_auto_groundspeed_pgain = V_CTL_AUTO_GROUNDSPEED_PGAIN;
+  v_ctl_auto_groundspeed_igain = V_CTL_AUTO_GROUNDSPEED_IGAIN;
+  v_ctl_auto_groundspeed_sum_err = 0.;
+#endif
+
+  controlled_throttle = 0.;
+  v_ctl_throttle_setpoint = 0;
+}
+
+/** 
+ * outer loop
+ * \brief Computes v_ctl_climb_setpoint and sets v_ctl_auto_throttle_submode 
+ */
+
+// Don't use lead controller unless you know what you're doing
+#define LEAD_CTRL_TAU 0.8
+#define LEAD_CTRL_A 1.
+#define LEAD_CTRL_Te (1./60.)
+
+void v_ctl_altitude_loop( void ) {
+  static float v_ctl_climb_setpoint_last = 0.;
+  //static float last_lead_input = 0.;
+
+  // Altitude error
+  v_ctl_altitude_error = estimator_z - v_ctl_altitude_setpoint;
+  v_ctl_climb_setpoint = v_ctl_altitude_pgain * v_ctl_altitude_error + 
v_ctl_altitude_pre_climb;
+
+  // Lead controller
+  //v_ctl_climb_setpoint = ((LEAD_CTRL_TAU*LEAD_CTRL_A + 
LEAD_CTRL_Te)*climb_sp + LEAD_CTRL_TAU*(v_ctl_climb_setpoint - 
LEAD_CTRL_A*last_lead_input)) / (LEAD_CTRL_TAU + LEAD_CTRL_Te);
+  //last_lead_input = pitch_sp;
+
+  // Limit rate of change of climb setpoint
+  float diff_climb = v_ctl_climb_setpoint - v_ctl_climb_setpoint_last;
+  BoundAbs(diff_climb, V_CTL_AUTO_CLIMB_LIMIT);
+  v_ctl_climb_setpoint = v_ctl_climb_setpoint_last + diff_climb;
+  
+  // Limit climb setpoint
+  BoundAbs(v_ctl_climb_setpoint, V_CTL_ALTITUDE_MAX_CLIMB);
+  v_ctl_climb_setpoint_last = v_ctl_climb_setpoint;
+}
+
+static inline void v_ctl_set_pitch ( void ) {
+  static float last_err = 0.;
+
+  // Compute errors
+  float err = estimator_z_dot - v_ctl_climb_setpoint;
+  float d_err = err - last_err;
+  last_err = err;
+
+  v_ctl_auto_pitch_sum_err += err*(1./60.);
+  BoundAbs(v_ctl_auto_pitch_sum_err, V_CTL_AUTO_PITCH_MAX_SUM_ERR);
+
+  // PI loop + feedforward ctl
+  nav_pitch = nav_pitch
+    + v_ctl_auto_throttle_pitch_of_vz_pgain * v_ctl_climb_setpoint
+    + v_ctl_auto_pitch_pgain * err
+    + v_ctl_auto_pitch_dgain * d_err
+    + v_ctl_auto_pitch_igain * v_ctl_auto_pitch_sum_err;
+
+}
+
+static inline void v_ctl_set_throttle( void ) {
+  static float last_err = 0.;
+
+  // Compute errors
+  float err = estimator_z_dot - v_ctl_climb_setpoint;
+  float d_err = err - last_err;
+  last_err = err;
+
+  v_ctl_auto_throttle_sum_err += err*(1./60.);
+  BoundAbs(v_ctl_auto_throttle_sum_err, V_CTL_AUTO_THROTTLE_MAX_SUM_ERR);
+
+  // PID loop + feedforward ctl
+  controlled_throttle = v_ctl_auto_throttle_cruise_throttle
+    + v_ctl_auto_throttle_climb_throttle_increment * v_ctl_climb_setpoint
+    + v_ctl_auto_throttle_pgain * err
+    + v_ctl_auto_throttle_dgain * d_err
+    + v_ctl_auto_throttle_igain * v_ctl_auto_throttle_sum_err;
+
+}
+
+#ifdef USE_AIRSPEED
+static inline void v_ctl_set_airspeed( void ) {
+  // Bound airspeed setpoint
+  Bound(v_ctl_auto_airspeed_setpoint, V_CTL_AIRSPEED_MIN, V_CTL_AIRSPEED_MAX);
+
+  // Airspeed control loop (input: airspeed controlled, output: throttle 
controlled)
+  float err_airspeed = v_ctl_auto_airspeed_setpoint - estimator_airspeed;
+  v_ctl_auto_airspeed_sum_err += err_airspeed;
+  BoundAbs(v_ctl_auto_airspeed_sum_err, V_CTL_AUTO_AIRSPEED_MAX_SUM_ERR);
+  controlled_throttle = v_ctl_auto_throttle_cruise_throttle
+    + v_ctl_auto_airspeed_pgain * err_airspeed
+    + v_ctl_auto_airspeed_igain * v_ctl_auto_airspeed_sum_err;
+
+}
+
+static inline void v_ctl_set_groundspeed( void ) {
+  // Ground speed control loop (input: groundspeed error, output: airspeed 
controlled)
+  float err_groundspeed = v_ctl_auto_groundspeed_setpoint - 
estimator_hspeed_mod;
+  v_ctl_auto_groundspeed_sum_err += err_groundspeed;
+  BoundAbs(v_ctl_auto_groundspeed_sum_err, V_CTL_AUTO_GROUNDSPEED_MAX_SUM_ERR);
+  v_ctl_auto_airspeed_setpoint = err_groundspeed * 
v_ctl_auto_groundspeed_pgain + v_ctl_auto_groundspeed_sum_err * 
v_ctl_auto_groundspeed_igain;
+
+}
+#endif
+
+void v_ctl_climb_loop ( void ) {
+
+  // Set pitch
+  v_ctl_set_pitch();
+  Bound(nav_pitch, V_CTL_AUTO_PITCH_MIN_PITCH, V_CTL_AUTO_PITCH_MAX_PITCH);
+
+  // Set throttle
+  switch (v_ctl_speed_mode) {
+  case V_CTL_SPEED_THROTTLE:
+    v_ctl_set_throttle();
+    break;
+#ifdef USE_AIRSPEED
+  case V_CTL_SPEED_AIRSPEED:
+    v_ctl_set_airspeed();
+    break;
+  case V_CTL_SPEED_GROUNDSPEED:
+    v_ctl_set_groundspeed();
+    v_ctl_set_airspeed();
+    break;
+#endif
+  default:
+    controlled_throttle = v_ctl_auto_throttle_cruise_throttle; // ???
+    break;
+  }
+
+  // Set Throttle output
+  float f_throttle = controlled_throttle;
+  v_ctl_throttle_setpoint = TRIM_UPPRZ(f_throttle * MAX_PPRZ);
+
+}
+
+#ifdef V_CTL_THROTTLE_SLEW_LIMITER
+#define V_CTL_THROTTLE_SLEW (1./CONTROL_RATE/(V_CTL_THROTTLE_SLEW_LIMITER))
+#endif
+
+#ifndef V_CTL_THROTTLE_SLEW
+#define V_CTL_THROTTLE_SLEW 1.
+#endif
+/** \brief Computes slewed throttle from throttle setpoint
+    called at 20Hz
+ */
+void v_ctl_throttle_slew( void ) {
+  pprz_t diff_throttle = v_ctl_throttle_setpoint - v_ctl_throttle_slewed;
+  BoundAbs(diff_throttle, TRIM_PPRZ(V_CTL_THROTTLE_SLEW*MAX_PPRZ));
+  v_ctl_throttle_slewed += diff_throttle;
+}
+

Added: paparazzi3/trunk/sw/airborne/fw_v_ctl_n.h
===================================================================
--- paparazzi3/trunk/sw/airborne/fw_v_ctl_n.h                           (rev 0)
+++ paparazzi3/trunk/sw/airborne/fw_v_ctl_n.h   2010-05-04 08:38:58 UTC (rev 
4899)
@@ -0,0 +1,47 @@
+/*
+ * $Id: $
+ *  
+ * Copyright (C) 2010 ENAC
+ *
+ * This file is part of paparazzi.
+ *
+ * paparazzi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * paparazzi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with paparazzi; see the file COPYING.  If not, write to
+ * the Free Software Foundation, 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA. 
+ *
+ */
+
+/** 
+ *
+ * fixed wing vertical control
+ *
+ */
+
+#ifndef FW_V_CTL_N_H
+#define FW_V_CTL_N_H
+
+#define V_CTL_SPEED_THROTTLE    0
+#define V_CTL_SPEED_AIRSPEED    1
+#define V_CTL_SPEED_GROUNDSPEED 2
+
+extern float v_ctl_auto_pitch_dgain;
+
+extern uint8_t v_ctl_speed_mode;
+
+#ifdef PITCH_TRIM
+extern float v_ctl_pitch_loiter_trim;
+extern float v_ctl_pitch_dash_trim;
+#endif
+
+#endif /* FW_V_CTL_N_H */





reply via email to

[Prev in Thread] Current Thread [Next in Thread]