FollowMe.h 2.23 KB
Newer Older
1 2
/****************************************************************************
 *
3
 * (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
4 5 6 7 8 9
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/

Jimmy Johnson's avatar
Jimmy Johnson committed
10 11 12 13 14 15 16 17 18 19 20 21 22

#pragma once

#include <QTimer>
#include <QObject>
#include <QThread>
#include <QGeoPositionInfo>
#include <QGeoPositionInfoSource>
#include <QElapsedTimer>

#include "QGCToolbox.h"
#include "MAVLinkProtocol.h"

23 24
class Vehicle;

Jimmy Johnson's avatar
Jimmy Johnson committed
25 26 27 28 29 30 31
Q_DECLARE_LOGGING_CATEGORY(FollowMeLog)

class FollowMe : public QGCTool
{
    Q_OBJECT

public:
32
    FollowMe(QGCApplication* app, QGCToolbox* toolbox);
Jimmy Johnson's avatar
Jimmy Johnson committed
33

34 35 36 37 38 39 40 41 42 43
    struct GCSMotionReport {
        int     lat_int;            // X Position in WGS84 frame in 1e7 * meters
        int     lon_int;            // Y Position in WGS84 frame in 1e7 * meters
        double  altMetersAMSL;      //	Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT
        double  headingDegrees;      // Heading in degrees
        double  vxMetersPerSec;     //	X velocity in NED frame in meter / s
        double  vyMetersPerSec;     //	Y velocity in NED frame in meter / s
        double  vzMetersPerSec;     //	Z velocity in NED frame in meter / s
        double  pos_std_dev[3];     // -1 for unknown
    };
Jimmy Johnson's avatar
Jimmy Johnson committed
44 45 46 47 48 49

    // Mavlink defined motion reporting capabilities
    enum {
        POS = 0,
        VEL = 1,
        ACCEL = 2,
50 51
        ATT_RATES = 3,
        HEADING = 4
Jimmy Johnson's avatar
Jimmy Johnson committed
52 53
    };

54
    void setToolbox(QGCToolbox* toolbox) override;
55

56 57 58 59 60 61
private slots:
    void _sendGCSMotionReport       (void);
    void _settingsChanged           (void);
    void _vehicleAdded              (Vehicle* vehicle);
    void _vehicleRemoved            (Vehicle* vehicle);
    void _enableIfVehicleInFollow   (void);
Jimmy Johnson's avatar
Jimmy Johnson committed
62

63
private:
64 65 66 67 68 69
    enum {
        MODE_NEVER,
        MODE_ALWAYS,
        MODE_FOLLOWME
    };

70 71 72 73 74 75 76
    void    _disableFollowSend  (void);
    void    _enableFollowSend   (void);
    double  _degreesToRadian    (double deg);
    bool    _isFollowFlightMode (Vehicle* vehicle, const QString& flightMode);

    QTimer      _gcsMotionReportTimer;
    uint32_t    _currentMode;
Jimmy Johnson's avatar
Jimmy Johnson committed
77
};