LCOV - code coverage report
Current view: top level - home/pbarker/rc/ardupilot/AntennaTracker - Tracker.h (source / functions) Hit Total Coverage
Test: lcov.info Lines: 4 8 50.0 %
Date: 2026-09-09 11:02:08 Functions: 3 7 42.9 %

          Line data    Source code
       1             : /*
       2             :    Lead developers: Matthew Ridley and Andrew Tridgell
       3             : 
       4             :    Please contribute your ideas! See https://ardupilot.club/dev for details
       5             : 
       6             :    This program is free software: you can redistribute it and/or modify
       7             :    it under the terms of the GNU General Public License as published by
       8             :    the Free Software Foundation, either version 3 of the License, or
       9             :    (at your option) any later version.
      10             : 
      11             :    This program is distributed in the hope that it will be useful,
      12             :    but WITHOUT ANY WARRANTY; without even the implied warranty of
      13             :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14             :    GNU General Public License for more details.
      15             : 
      16             :    You should have received a copy of the GNU General Public License
      17             :    along with this program.  If not, see <http://www.gnu.org/licenses/>.
      18             :  */
      19             : #pragma once
      20             : 
      21             : ////////////////////////////////////////////////////////////////////////////////
      22             : // Header includes
      23             : ////////////////////////////////////////////////////////////////////////////////
      24             : 
      25             : #include <cmath>
      26             : #include <stdarg.h>
      27             : #include <stdio.h>
      28             : 
      29             : #include <AP_Common/AP_Common.h>
      30             : #include <AP_Param/AP_Param.h>
      31             : #include <AP_Math/AP_Math.h>        // ArduPilot Mega Vector/Matrix math Library
      32             : #include <AP_AHRS/AP_AHRS.h>         // ArduPilot Mega DCM Library
      33             : #include <Filter/Filter.h>                     // Filter library
      34             : 
      35             : #include <AP_Logger/AP_Logger.h>
      36             : #include <AP_Scheduler/AP_Scheduler.h>       // main loop scheduler
      37             : #include <AP_NavEKF2/AP_NavEKF2.h>
      38             : #include <AP_NavEKF3/AP_NavEKF3.h>
      39             : 
      40             : #include <SRV_Channel/SRV_Channel.h>
      41             : #include <AP_Vehicle/AP_Vehicle.h>
      42             : #include <AP_Mission/AP_Mission.h>
      43             : #include <AP_BattMonitor/AP_BattMonitor.h> // Battery monitor library
      44             : 
      45             : // Configuration
      46             : #include "config.h"
      47             : #include "defines.h"
      48             : 
      49             : #include "RC_Channel_Tracker.h"
      50             : #include "Parameters.h"
      51             : #include "GCS_MAVLink_Tracker.h"
      52             : #include "GCS_Tracker.h"
      53             : 
      54             : #include "AP_Arming_Tracker.h"
      55             : 
      56             : #include "mode.h"
      57             : 
      58             : class Tracker : public AP_Vehicle {
      59             : public:
      60             :     friend class GCS_MAVLINK_Tracker;
      61             :     friend class GCS_Tracker;
      62             :     friend class Parameters;
      63             :     friend class ModeAuto;
      64             :     friend class ModeGuided;
      65             :     friend class Mode;
      66             : 
      67             :     void arm_servos();
      68             :     void disarm_servos();
      69             : 
      70             : private:
      71             :     Parameters g;
      72             : 
      73             :     uint32_t start_time_ms = 0;
      74             : 
      75             :     /**
      76             :        antenna control channels
      77             :     */
      78             :     RC_Channels_Tracker rc_channels;
      79             :     SRV_Channels servo_channels;
      80             : 
      81             :     LowPassFilterFloat yaw_servo_out_filt;
      82             :     LowPassFilterFloat pitch_servo_out_filt;
      83             : 
      84             :     bool yaw_servo_out_filt_init = false;
      85             :     bool pitch_servo_out_filt_init = false;
      86             : 
      87             :     GCS_Tracker _gcs; // avoid using this; use gcs()
      88         110 :     GCS_Tracker &gcs() { return _gcs; }
      89             : 
      90             :     // Battery Sensors
      91             :     AP_BattMonitor battery{MASK_LOG_CURRENT,
      92             :                            FUNCTOR_BIND_MEMBER(&Tracker::handle_battery_failsafe, void, const char*, const int8_t),
      93             :                            nullptr};
      94             :     Location current_loc;
      95             : 
      96             :     Mode *mode_from_mode_num(enum Mode::Number num);
      97             : 
      98             :     Mode *mode = &mode_initialising;
      99             : 
     100             :     ModeAuto mode_auto;
     101             :     ModeInitialising mode_initialising;
     102             :     ModeManual mode_manual;
     103             :     ModeGuided mode_guided;
     104             :     ModeScan mode_scan;
     105             :     ModeServoTest mode_servotest;
     106             :     ModeStop mode_stop;
     107             : 
     108             :     // Vehicle state
     109             :     struct {
     110             :         bool location_valid;    // true if we have a valid location for the vehicle
     111             :         Location location;      // lat, long in degrees * 10^7; alt in meters * 100
     112             :         Location location_estimate; // lat, long in degrees * 10^7; alt in meters * 100
     113             :         uint32_t last_update_us;    // last position update in microseconds
     114             :         uint32_t last_update_ms;    // last position update in milliseconds
     115             :         Vector3f vel;           // the vehicle's velocity in m/s
     116             :         int32_t relative_alt;   // the vehicle's relative altitude in meters * 100
     117             :     } vehicle;
     118             : 
     119             :     // Navigation controller state
     120             :     struct NavStatus {
     121             :         float bearing;                  // bearing to vehicle in centi-degrees
     122             :         float distance;                 // distance to vehicle in meters
     123             :         float pitch;                    // pitch to vehicle in degrees (positive means vehicle is above tracker, negative means below)
     124             :         float angle_error_pitch;        // angle error between target and current pitch in centi-degrees
     125             :         float angle_error_yaw;          // angle error between target and current yaw in centi-degrees
     126             :         float alt_difference_baro;      // altitude difference between tracker and vehicle in meters according to the barometer.  positive value means vehicle is above tracker
     127             :         float alt_difference_gps;       // altitude difference between tracker and vehicle in meters according to the gps.  positive value means vehicle is above tracker
     128             :         float altitude_offset;          // offset in meters which is added to tracker altitude to align altitude measurements with vehicle's barometer
     129             :         bool manual_control_yaw         : 1;// true if tracker yaw is under manual control
     130             :         bool manual_control_pitch       : 1;// true if tracker pitch is manually controlled
     131             :         bool need_altitude_calibration  : 1;// true if tracker altitude has not been determined (true after startup)
     132             :         bool scan_reverse_pitch         : 1;// controls direction of pitch movement in SCAN mode
     133             :         bool scan_reverse_yaw           : 1;// controls direction of yaw movement in SCAN mode
     134             :     } nav_status;
     135             : 
     136             :     // setup the var_info table
     137             :     AP_Param param_loader{var_info};
     138             : 
     139             :     bool target_set = false;
     140             :     bool stationary = true; // are we using the start lat and log?
     141             : 
     142             :     static const AP_Scheduler::Task scheduler_tasks[];
     143             :     static const AP_Param::Info var_info[];
     144             :     static const struct LogStructure log_structure[];
     145             : 
     146             :     // Tracker.cpp
     147             :     void get_scheduler_tasks(const AP_Scheduler::Task *&tasks,
     148             :                              uint8_t &task_count,
     149             :                              uint32_t &log_bit) override;
     150             :     void one_second_loop();
     151             :     void ten_hz_logging_loop();
     152             :     void stats_update();
     153             : 
     154             :     // GCS_Mavlink.cpp
     155             :     void send_nav_controller_output(mavlink_channel_t chan);
     156             : 
     157             : #if HAL_LOGGING_ENABLED
     158             :     // methods for AP_Vehicle:
     159          33 :     const AP_Int32 &get_log_bitmask() override { return g.log_bitmask; }
     160          33 :     const struct LogStructure *get_log_structures() const override {
     161          33 :         return log_structure;
     162             :     }
     163             :     uint8_t get_num_log_structures() const override;
     164             : 
     165             :     // Log.cpp
     166             :     void Log_Write_Attitude();
     167             :     void Log_Write_Vehicle_Baro(float pressure, float altitude);
     168             :     void Log_Write_Vehicle_Pos(int32_t lat,int32_t lng,int32_t alt, const Vector3f& vel);
     169             :     void Log_Write_Vehicle_Startup_Messages();
     170             : #endif
     171             : 
     172             :     // Parameters.cpp
     173             :     void load_parameters(void) override;
     174             : 
     175             :     // radio.cpp
     176             :     void read_radio();
     177             : 
     178             :     // sensors.cpp
     179             :     void update_ahrs();
     180             :     void update_compass(void);
     181             :     void update_GPS(void);
     182             :     void handle_battery_failsafe(const char* type_str, const int8_t action);
     183             : 
     184             :     // servos.cpp
     185             :     void init_servos();
     186             :     void update_pitch_servo(float pitch);
     187             :     void update_pitch_position_servo(void);
     188             :     void update_pitch_onoff_servo(float pitch) const;
     189             :     void update_pitch_cr_servo(float pitch);
     190             :     void update_yaw_servo(float yaw);
     191             :     void update_yaw_position_servo(void);
     192             :     void update_yaw_onoff_servo(float yaw) const;
     193             :     void update_yaw_cr_servo(float yaw);
     194             : 
     195             :     // system.cpp
     196             :     void init_ardupilot() override;
     197             :     bool get_home_eeprom(Location &loc) const;
     198             :     bool set_home_eeprom(const Location &temp) WARN_IF_UNUSED;
     199             :     bool set_home_to_current_location(bool lock) override WARN_IF_UNUSED;
     200             :     bool set_home(const Location &temp, bool lock) override WARN_IF_UNUSED;
     201             :     void prepare_servos();
     202             :     void set_mode(Mode &newmode, ModeReason reason);
     203             :     bool set_mode(uint8_t new_mode, ModeReason reason) override;
     204           0 :     uint8_t get_mode() const override { return (uint8_t)mode->number(); }
     205             :     bool should_log(uint32_t mask);
     206           0 :     bool start_command_callback(const AP_Mission::Mission_Command& cmd) { return false; }
     207           0 :     void exit_mission_callback() { return; }
     208           0 :     bool verify_command_callback(const AP_Mission::Mission_Command& cmd) { return false; }
     209             : 
     210             :     // tracking.cpp
     211             :     void update_vehicle_pos_estimate();
     212             :     void update_tracker_position();
     213             :     void update_bearing_and_distance();
     214             :     void update_tracking(void);
     215             :     void tracking_update_position(const mavlink_global_position_int_t &msg);
     216             :     void tracking_update_pressure(const mavlink_scaled_pressure_t &msg);
     217             :     void tracking_manual_control(const mavlink_manual_control_t &msg);
     218             :     void update_armed_disarmed() const;
     219             :     bool get_pan_tilt_norm(float &pan_norm, float &tilt_norm) const override;
     220             : 
     221             :     // Arming/Disarming management class
     222             :     AP_Arming_Tracker arming;
     223             : 
     224             :     // Mission library
     225             :     AP_Mission mission{
     226             :             FUNCTOR_BIND_MEMBER(&Tracker::start_command_callback, bool, const AP_Mission::Mission_Command &),
     227             :             FUNCTOR_BIND_MEMBER(&Tracker::verify_command_callback, bool, const AP_Mission::Mission_Command &),
     228             :             FUNCTOR_BIND_MEMBER(&Tracker::exit_mission_callback, void)};
     229             : };
     230             : 
     231             : extern Tracker tracker;

Generated by: LCOV version 1.14