Files
autopilot/misc/rtsp_ai_player/aienginegimbalserveractions.h
T
2024-07-25 17:49:30 +03:00

69 lines
2.1 KiB
C++

#pragma once
#include <QDebug>
#include "aienginedefinitions.h"
#include "aienginegimbalserverserialcommand.h"
#include "aienginegimbalserverserialport.h"
#include "aienginegimbalserverserialresponse.h"
const double EARTH_RADIUS = 6371000.0; // Earth's radius in meters
struct GPSData
{
float altitude; // Meters
float latitude; // Decimal degrees
float longitude; // Decimal degrees
};
struct CameraData
{
uint16_t height; // Pixels
uint16_t width; // Pixels
float pitch; // Degrees
float yaw; // Degrees
float fow; // Degrees
};
struct DroneData
{
GPSData gps;
float yaw; // Degrees
float pitch; // Degrees
float roll; // Degrees
};
class AiEngineGimbalServerActions : public QObject
{
Q_OBJECT
public:
explicit AiEngineGimbalServerActions(QObject *parent = nullptr);
public:
void setup(AiEngineGimbalServerSerialPort *serialPort, AiEngineGimbalServerSerialCommand *serialCommand, AiEngineGimbalServerSerialResponse *serialResponse, AiEngineGimbalStatus *gimbalStatus);
AiEngineRectangleProperties calculateRectangleProperties(int top, int left, int bottom, int right);
void turnToTarget(AiEngineRectangleProperties rectangle);
void zoomToTarget(AiEngineRectangleProperties rectangle);
void getLocation(AiEngineDronePosition dronePosition, int targetIndex);
void restoreOrientationAndZoom(AiEngineGimbalStatus gimbalStatus);
signals:
void aiTargetZoomed(AiEngineTargetPosition);
private:
AiEngineGimbalServerSerialPort *mSerialPort;
AiEngineGimbalServerSerialCommand *mSerialCommand;
AiEngineGimbalServerSerialResponse *mSerialResponse;
AiEngineGimbalStatus *mGimbalStatus;
CameraData getCameraData(void);
void getAnglesToOnScreenTarget(int targetX, int targetY, float &resultYaw, float &resultPitch);
AiEngineGeoPosition calculateTargetLocation(DroneData drone, CameraData camera);
void calculateDistancesToTarget(float altitude, float cameraPitch, float &slantDistance, float &horizontalDistance);
float degreesToRadians(float degrees);
};