-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtracker.h
executable file
·94 lines (75 loc) · 3.9 KB
/
tracker.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#ifndef TRACKER_H_
#define TRACKER_H_
#include "earth.h"
#include "tf.h"
#include <float.h>
#include "eigen-eigen-6b38706d90a9/eigen/Eigen"
#include "eigen-eigen-6b38706d90a9/eigen/Dense"
using namespace Eigen;
class SpaceObjectTracker
{
public:
SpaceObjectTracker (void);
virtual ~SpaceObjectTracker (void);
void setObserverGeoCoord (double latitude, double longitude, double altitude); // [deg], [deg], [m]
virtual int setTargetUnixtime (double target);
void setEarth (Earth const& earth);
void setTargetPosition (double const (&position)[3]); // [m]
void setTargetVelocity (double const (&velocity)[3]); // [m/s]
void setTargetPosition (Vector3d const& position); // [m], over load, in Eigen::Vector3d
void setTargetVelocity (Vector3d const& velocity); // [m/s], over load, in Eigen::Vector3d
virtual void getDepartureTime (double *departure) const;
// observer position is NOT required.
void getTargetRange (double *range) const; // [km]
void getTargetSpeed (double *speed) const; // [m/s]
void getTargetCelestrialPosition (double *declination, double *right_ascension) const; // [deg], [deg]
void getTargetGeoCoord (double *latitude, double *longitude, double *altitude) const; // [deg], [deg], [m]
// observer positio is required.
void getTargetObserverRange (double *range) const; // [km]
void getTargetObserverSpeed (double *speed) const; // [m/s]
void getTargetDirection (double *elevation, double *azimuth) const; // [deg], [deg]
void getTargetDopplerCoeff (double *down, double *up) const; // received_freq = down * downlink_freq, sent_freq = up * uplink_freq
// observer position is NOT required.
void getTargetPositionEci (double *pos_eci) const; // [m]
void getTargetVelocityEci (double *vel_eci) const; // [m/s]
void getTargetPositionEcef (double *pos_ecef) const; // [m]
void getTargetVelocityEcef (double *vel_ecef) const; // [m/s]
// observer positio is required.
void getTargetObserverPositionEnu (double *pos_enu) const; // [m]
void getTargetObserverVelocityEnu (double *vel_enu) const; // [m/s]
void getObserverPositionEci (double *pos_eci) const; // [m]
void getObserverVelocityEci (double *vel_eci) const; // [m/s]
// observer position is NOT required.
void getTargetPositionEci (Vector3d *pos_eci) const; // [m], over load, out Eigen:: Vector3d
void getTargetVelocityEci (Vector3d *vel_eci) const; // [m/s], over load, out Eigen:: Vector3d
void getTargetPositionEcef (Vector3d *pos_ecef) const; // [m], over load, out Eigen:: Vector3d
void getTargetVelocityEcef (Vector3d *vel_ecef) const; // [m/s], over load, out Eigen:: Vector3d
// observer positio is required.
void getTargetObserverPositionEnu (Vector3d *pos_enu) const;// [m], over load, out Eigen:: Vector3d
void getTargetObserverVelocityEnu (Vector3d *vel_enu) const;// [m/s], over load, out Eigen:: Vector3d
void getObserverPositionEci (Vector3d *pos_eci) const; // [m], over load, out Eigen:: Vector3d
void getObserverVelocityEci (Vector3d *vel_eci) const; // [m], over load, out Eigen:: Vector3d
private:
static const double EarthObliquity_;
static const double EarthOblatness_;
static const double EarthRadius_;
static const double EarthSpinRate_;
static const double LightSpeed_;
typedef struct {
Vector3d position; // [m]
Vector3d velocity; // [m/s]
} CartesianSci;
typedef struct {
double latitude; // [rad]
double longitude; // [rad]
double altitude; // [m]
} GeoCoord;
Earth earth_;
CartesianSci target_;
GeoCoord observer_;
void convertSciRelative2Eci (Vector3d *vec_eci, Vector3d const& relative_vec_sci) const;
void convertEci2Ecef (Vector3d *vec_ecef, Vector3d const& vec_eci) const;
void convertEciRelative2Enu (Vector3d *vec_enu, Vector3d const& relative_vec_eci) const;
void calcTargetRaySpeed (double *speed, Vector3d const& relative_pos, Vector3d const& relative_vel) const;
};
#endif // !TRACKER_H_