LCOV - code coverage report
Current view: top level - APM_Control - AP_YawController.h (source / functions) Hit Total Coverage
Test: lcov.info Lines: 8 8 100.0 %
Date: 2026-09-09 11:02:08 Functions: 5 5 100.0 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <AP_Common/AP_Common.h>
       4             : #include <AC_PID/AC_PID.h>
       5             : #include "AP_AutoTune.h"
       6             : 
       7             : class AP_YawController
       8             : {
       9             : public:
      10             :     AP_YawController(const AP_FixedWing &parms);
      11             : 
      12             :     /* Do not allow copies */
      13             :     CLASS_NO_COPY(AP_YawController);
      14             : 
      15             :     // return true if rate control or damping is enabled
      16     1016541 :     bool enabled() const { return rate_control_enabled() || (_K_D > 0.0); } 
      17             : 
      18             :     // return true if rate control is enabled
      19     1023202 :     bool rate_control_enabled(void) const { return _rate_enable != 0; }
      20             : 
      21             :     // get actuator output for sideslip and yaw damping control
      22             :     int32_t get_servo_out(float scaler, bool disable_integrator);
      23             : 
      24             :     // get actuator output for direct rate control
      25             :     // desired_rate is in deg/sec. scaler is the surface speed scaler
      26             :     float get_rate_out(float desired_rate, float scaler, bool disable_integrator);
      27             : 
      28             :     void reset_I();
      29             : 
      30             :     void reset_rate_PID();
      31             : 
      32             :     /*
      33             :       reduce the integrator, used when we have a low scale factor in a quadplane hover
      34             :     */
      35       68104 :     void decay_I()
      36             :     {
      37             :         // this reduces integrator by 95% over 2s
      38       68104 :         _pid_info.I *= 0.995f;
      39       68104 :     }
      40             : 
      41        8420 :     const AP_PIDInfo& get_pid_info(void) const
      42             :     {
      43        8420 :         return _pid_info;
      44             :     }
      45             : 
      46             :     // set the PID notch sample rates
      47       54357 :     void set_notch_sample_rate(float sample_rate) { rate_pid.set_notch_sample_rate(sample_rate); }
      48             : 
      49             :     // start/stop auto tuner
      50             :     void autotune_start(void);
      51             :     void autotune_restore(void);
      52             :     
      53             : 
      54             :     static const struct AP_Param::GroupInfo var_info[];
      55             : 
      56             : private:
      57             :     const AP_FixedWing &aparm;
      58             :     AP_Float _K_A;
      59             :     AP_Float _K_I;
      60             :     AP_Float _K_D;
      61             :     AP_Float _K_FF;
      62             :     AP_Int16 _imax;
      63             :     AP_Int8  _rate_enable;
      64             :     AC_PID rate_pid{0.04, 0.15, 0, 0.15, 0.666, 3, 0, 12, 150, 1};
      65             : 
      66             :     uint32_t _last_t;
      67             :     float _last_out;
      68             :     float _last_rate_hp_out;
      69             :     float _last_rate_hp_in;
      70             :     float _K_D_last;
      71             : 
      72             :     float _integrator;
      73             : 
      74             :     AP_AutoTune::ATGains gains;
      75             :     AP_AutoTune *autotune;
      76             :     bool failed_autotune_alloc;
      77             :     
      78             :     AP_PIDInfo _pid_info;
      79             : };

Generated by: LCOV version 1.14