Subversion Repositories FlightCtrl

Rev

Rev 1085 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1086 salvo 1
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2
// Peter Muehlenbrock alias Salvo
3
// Definitionen fuer Modul GPS
4
// Stand 7.12.2008
5
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6
extern signed int       GPS_Nick;
7
extern signed int       GPS_Roll;
8
extern signed int       GPS_Nick2;
9
extern signed int       GPS_Roll2;
10
extern void             GPS_Neutral(void);
11
extern void             Get_Ublox_Msg(uint8_t  rx) ;
12
extern short int        Get_GPS_data(void);
13
extern short int        Get_Rel_Position(void);
14
extern void             GPS_Save_Home(void);
15
extern short int        GPS_CRTL(short int cmd);
304 ingob 16
 
1086 salvo 17
typedef struct {
18
        unsigned long   utm_itow;       // time of week
19
        long                    utm_east;       // UTM Ost in cm  
20
        long                    utm_north;  // UTM Nord in cm    
21
        long                    utm_alt;        // hoehe in cm
22
        uint8_t                 utm_zone;       // 
23
        uint8_t                 utm_hem;        // Hemisphere Indicator 
24
        uint8_t                 status;         // 0: kein gueltiges Paket 1: alles ok
25
} NAV_POSUTM_t;
26
 
27
typedef struct {
28
        unsigned long   itow;   // time of week
29
        uint8_t                 gpsfix_type;// 3=3D Fix  
30
        uint8_t                 nav_status_flag;
31
        uint8_t                 nav_diff_status;
32
        uint8_t                 nav_resevd;
33
        long                    nav_tff;  // Time to First Fix in ms    
34
        long                    nav_msss;       // ms since startup
35
        uint8_t                 status;         // 0: kein gueltiges Paket 1: alles ok
36
} NAV_STATUS_t;
37
 
38
typedef struct {
39
        unsigned long   itow;            
40
        long                    speed_n;                // in cm/s  
41
        long                    speed_e;                // in cm/s  
42
        long                    speed_alt;              // in cm/s   
43
        unsigned long   speed_3d;       // in cm/s   
44
        unsigned long   speed_gnd;      // V ueber Grund in cm/s   
45
        long                    heading;        // Richtung in deg/10000 
46
        unsigned long   sacc;           // Speed Genauigkeit in cm/s  
47
        unsigned long   cacc;           // Richtungsgenauigkeit in deg 
48
        uint8_t                 status;         // 0: kein gueltiges Paket 1: alles ok  
49
} NAV_VELNED_t;
50
 
51
 
52
typedef struct {
53
        long                    utm_east;       // UTM Ost in 10 cm  
54
        long                    utm_north;  // UTM Nord in 10 cm    
55
        long                    utm_alt;        // hoehe in 10 cm
56
        unsigned long   speed_gnd;      // V ueber Grund in 10cm/s  
57
        unsigned                heading;        // Richtung in Grad   
58
        uint8_t                 status;         // 0: keine gueltigen Daten 1: alles ok
59
 
60
} GPS_ABS_POSITION_t;
61
 
62
 
63
typedef struct { // Struktur fuer Relative GPS Daten (bezogen z.B. auf Home Position)
64
        int                             utm_east;       // UTM Ost in  10 cm   
65
        int                             utm_north;  // UTM Nord in 10 cm     
66
        int                             utm_alt  ;  // UTM Altitude in  10 cm    
67
        uint8_t                 status;         // 0: keine gueltigen Daten 1: alles ok
68
 
69
} GPS_REL_POSITION_t;
70
 
71
 
72
extern                          GPS_ABS_POSITION_t gps_act_position;
73
extern                          GPS_ABS_POSITION_t gps_home_position;
74
extern                          GPS_REL_POSITION_t gps_rel_act_position;
75
extern                          GPS_REL_POSITION_t gps_rel_hold_position;
76
extern short int        gps_state,gps_sub_state;
77
extern unsigned int     gps_alive_cnt;
78
 
79
 
80
 
81
// Zustaende der zentralen GPS statemachine
82
#define GPS_CRTL_IDLE                           0   //  Inaktiv
83
#define GPS_CRTL_HOLD_ACTIVE            1       //  Lageregelung aktiv
84
#define GPS_CRTL_HOME_ACTIVE            2       //  Rueckflug zur Basis Aktiv
85
#define GPS_HOME_FAST_IN_TOL            3       //  Rueckflug: Aktuelle Position innerhalb der Toleranz
86
#define GPS_HOME_FAST_OUTOF_TOL         4       //  Rueckflug: Aktuelle Position ausserhalb der Toleranz
87
#define GPS_HOME_RMPDWN_IN_TOL          5       //  Rueckflug: beim Abbremsen Position  innerhalb der Toleranz
88
#define GPS_HOME_RMPDWN_OUTOF_TOL       6       //  Rueckflug: beim Abbremsen Position  ausserhalb der Toleranz
89
#define GPS_HOME_IN_TOL                         7       //  Rueckflug: Nahe am Ziel innerhalb der Toleranz
90
#define GPS_HOME_OUTOF_TOL                      8       //  Rueckflug: Nahe am Ziel ausserhalb der Toleranz
91
#define GPS_HOME_FINISHED                       9       //  Rueckflug zur Basis abgeschlossen
92
 
93
// Kommandokonstanten fuer die zentrale GPS Statemachine
94
#define GPS_CMD_STOP                    0       // Lageregelung soll deaktiviert werden
95
#define GPS_CMD_REQ_INIT                1       // Initialisierung
96
#define GPS_CMD_REQ_HOLD                3       // Lageregelung soll aktiviert werden
97
#define GPS_CMD_REQ_HOME                4       // Das Heimfliegen soll aktiviert werden
98
 
99
// Statusmeldungen  der zentralen GPS statemachine
100
#define GPS_STST_OK                     0       // Kommando erfolgreich und abgeschlossen
101
#define GPS_STST_PEND           1       // Kommando noch nicht komplett durchgefuehrt
102
#define GPS_STST_ERR            2       // Fehler
103
 
104
// GPS Lageregler
105
#define GPS_USR_PAR_FKT         4       //Faktor durch den die Userparameter geteilt werden
106
 
107
#define GPS_NICKROLL_MAX        80      // Maximaler Einfluss des GPS Lagereglers auf Nick und Roll
108
#define GPS_DIST_MAX            400     // Maximal zulaessige Distanz bevor Regelung gestoppt wird (in 10cm)
109
//#define GPS_V                         8       // Teilerfaktor Regelabweichung zu Ausgabewert
110
 
111
 
112
// Konstanten fuer Verstaerkung fuer Speed Werte in Abhaengigkeit vom SpeedWert (cm/sek)
113
// um eine exponentielle Verstaerkung zu erreichen
114
#define DIFF_Y_N_MAX                    1       // Verstaerkung bei Eingangswert = DIFF_X_N_MAX  im Normal (Hold) Mode
115
//#define DIFF_X_N_MAX                  200     // bei diesem Eingangswert ist die Verstaerkung = DIFF_Y_N_MAX 
116
 
117
#define DIFF_Y_F_MAX                    1       // Verstaerkung bei Eingangswert = DIFF_X_F_MAX  im Fast (Coming Home)  Mode
118
//#define DIFF_X_F_MAX                  500     // bei diesem Eingangswert ist die Verstaerkung = DIFF_Y_F_MAX 
119
 
120
// P-Regler Verstaerkung 
121
#define GPS_PROP_NRML_V                 2       //maximale Verstaerkung im Normalen Holdmode
122
#define GPS_PROP_FAST_V                 6       //maximale Verstaerkung im Fast mode
123
 
124
// GPS G2T /Go to Target Regler
125
#define GPS_G2T_DIST_MAX_STOP   80      // Ab dieser Entfernung vom Zielpunkt soll die Geschwindigkeit runtergeregelt werden( in 10 cm)
126
#define GPS_G2T_DIST_HOLD               50      // Ab dieser Entfernung vom Zielpunkt wird mit Minimaler Geschwindigkeit eingeregelt
127
#define GPS_G2T_FAST_TOL                200     // Bei grosser Entfernung vom Ziel: Der Sollwert wird nur geaendert wenn die aktuelle Position nicht mehr als diesem Wert vom Sollwert abweicht
128
#define GPS_G2T_NRML_TOL                100     // Bei kleiner Entfernung vom Ziel: Der Sollwert wird nur geaendert wenn die aktuelle Position nicht mehr als diesem Wert vom Sollwert abweicht
129
#define GPS_G2T_V_MAX                   15      // Maximale Geschwindigkeit (in 10cm/0.25 Sekunden) mit der der Sollpunkt geaendert wird.
130
#define GPS_G2T_V_RAMP_DWN              10      // Geschwindigkeit (in 10cm/0.25ekunden) in der Naehe der Home Position um abzubremsen
131
#define GPS_G2T_V_MIN                   3       // Minimale (in 10cm/0.25 Sekunden) ganz nahe an Homeposition.
132