global.h

来自「this the code of bootstation」· C头文件 代码 · 共 197 行

H
197
字号

#ifndef _global_h_
#define _global_h_

#pragma warning(disable: 4305)


#include <math.h>
#include <fstream>
#include <iostream>
#include <string>
using namespace std;

extern float Var1[5];
extern float Var2[5];
extern float Var3[5];

//allgemeine globale Parameter
//-----------------------------------------------------------------------------------------
#define Pi 			3.141
#define true 		1
#define false 		0
#define bit			bool
#define n_max		1000
//#define SchrittProTakt 5

//Timer Grundwert (maxWert - Schritte f黵 gew黱schten Taskwechsel (30ms) || (40ms))
//Taktteiler: 8 == 800ns pro Z鋒lwert (Task 1..4 -> 30ms; Task 5..6 -> 40ms)
#define Taskzeit_30ms  0.03
#define Taskzeit_40ms  0.04
#define Timer_Wert_30 0xFFFF-(Taskzeit_30ms/0.0000008)	//Basiszeit Timer 800ns
#define Timer_Wert_40 0xFFFF-(Taskzeit_40ms/0.0000008)

#define K_x 0		//Position x Koordinate im Array
#define K_y 1		//Position y Koordinate im Array
#define BufferLenght 16

#define min_Seite_dreh			2		//minimaler Seitenabstand bei Drehungen
//Standrard-Flug
#define Fwd				0
#define Turn 			1
#define Rev				2
//Koordinaten-Flug
#define Stop			3
#define Koor_r_Turn 	4
#define Koor_l_Turn		5
#define Koor_Fwd_Rev	6
//ReturnToOrigin
#define ToOrigin		7
#define FollowObject	8

//Modellparameter

#define AufrufeProZyklus	 6		//6 Aufrufe des Verhaltensmodel pro Zyklus (6x case)
#define Tau					 0.1	//Zeitkoinstante Motor und Servo Tr鋑heit
#define FmaxMotor			 0.85	//maximale Motorkraft in N
#define Gewicht				 1		//Gewicht in kg
#define Dreh_Radius			 1.8		//Radius der Drehachse
#define Umfang				 9.42 	//Umfang des Luftschiffes
#define Luft_x				 0.6	//Luftwiderstand x Richtung
#define Luft_y				 0.8	//Luftwiderstand y Richtung
#define Luft_z				 0.8	//Luftwiderstand z Richtung
#define Dreh_Traegheit		 0.2	//Drehtr鋑heit 
#define Abtrieb				 0.05	//Abtriebsfaktor
#define Gravitation			 9.81	//Gravitationskonstante

//Spaltenposition in Datendatei, die vom Zeppelin gesendet wird
#define s_Zeit		0
#define s_vorne		1
#define s_hinten	2
#define s_oben		3
#define s_unten		4
#define s_rechts	5
#define s_links		6
#define s_Gyro		7

#define BLOB_LENGTH 5
//-----------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------
//*****************************************************************************************
//main
extern const float	Prozesszyklus;	//Prozesszykus [s]
extern int	 		Zeit;			//globale Zeit seit Systemstart (wird je Prozesszyklus um Prozesszyklus erh鰄t)
extern int			Regel_Sperrzeit;

extern float Messung_v[5];				//Messwert vorne
extern float Messung_h[5];				//Messwert hinten
extern float Messung_o[5];				//Messwert oben
extern float Messung_u[5];				//Messwert unten
extern float Messung_r[5];				//Messwert rechts
extern float Messung_l[5];				//Messwert links
extern float Messung_g[5];				//Messwert Gyroskop
extern float Messung_k[5];				//Messwert Kompass
extern float Richtung_ist[5];

extern const float	max_Sensor_v;	//maximaler Sensormessbereich
extern const float	max_Sensor_h;	//maximaler Sensormessbereich
extern const float	max_Sensor_o;	//maximaler Sensormessbereich
extern const float	max_Sensor_u;	//maximaler Sensormessbereich
extern const float	max_Sensor_r;	//maximaler Sensormessbereich
extern const float	max_Sensor_l;	//maximaler Sensormessbereich
extern float 		ServoWinkel;	//auf diesen Wert wird der Servo angesteuert
extern float 		HauptMotorLeistung;	//mit diesem Wert wird der Moror angesteuert

//-----------------------------------------------------------------------------------------
extern void Task5_Aufruf(int* Time, float* vorne, float* hinten, float* oben,
				  float* unten, float* rechts, float* links, float* kompass,float* beschl,  
				  float* gyro, unsigned char* CamDat, int FoundBlo);
//-----------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------
//*****************************************************************************************
//Kalman
//Parameter
//-----------------------------------------------------------------------------------------
extern float Gain_vorne;	//Kalmangain f黵 die Ultraschallmessungen
extern float Gain_hinten;	//
extern float Gain_oben;		//
extern float Gain_unten;	//
extern float Gain_rechts;	//
extern float Gain_links;	//
extern float Q;				//Systemrauschen einfacher Kalman_Filter (Ultraschallmessung)
extern float Q_v;			//Modellvarianz Kalman_Datenfusion Geschwindigkeit
extern float P_v[1];		//Fehler-Kovarianz bei Kalman_Datenfusion Geschwindigkeit
extern float Q_Winkel;		//Modellvarianz Winkelberechnung (GyroIntegration)
extern float P_Winkel[1];	//Fehler-Kovarianz Kalman_Datenfusion Winkelkorrektur
extern float Kovar_Richtung;//Kovarianz f黵 die Messwertfusion Richtung
//-----------------------------------------------------------------------------------------

//Funktionen
//-----------------------------------------------------------------------------------------
//Einfacher Kalmanfilter (Messwertbewertung)
extern void Kalman_Filter(float Daten[5], float Messwert, float Gain, float P_min[1]);
//Kalman-Datenfusion
//躡ergabewerte: Ergebnis der Fusion[0], Modelldynamik, Messwert, 
//Messwert g黮tig (G),  Fehlervarianz, Rauschen Modell
extern void Kalman_Datenfusion(float Ergebnis[5], float ModellDynamik, float Messwert, 
						bit G, float P[1], float Q_Modell);
//Datenfusion von Sensormesswerten und Sensormessdynamik
//鋒nlich wie Datenfusion
//躡ergabewerte: Ergebnis der Fusion [0], Messwert, Messdynamik, 
//Rauschen Messwerte, Rauschen Messdynamik, Fehlerkovarianz
//Ergibnis muss ein 5er Feld sein
extern void Kalman_Messwertfusion(float* Ergebnis,  float Messwert, float Messdynamik, 
						float Q_Messwert, float Q_Messdynamik, float& P);

//-----------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------
//***********************************************************************************
extern int FindFixBlob(char* FixBlob, char* Daten, char FoundBlobs);
extern unsigned char	CamDaten[128];			//Kamera Daten
extern unsigned char	FoundBlobs;
extern unsigned char FixBlob[4];
//-----------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------
//*****************************************************************************************
//Regelung
//FlugRegelung --ermittelt aus den gegebenen Soll- Istwerten die Kennwerte aller Aktoren und steuert sie
extern void FlugRegelung(float HoeheSoll, float HoeheIst, float FlugSoll, float FlugIst, 
				  float RichtungSoll, float RichtungIst, int Drift);
extern float RichtungsRegler(float Sollwert, float Istwert);
extern float HoehenRegler(float Sollwert, float Istwert);	
extern float FlugRegler(float Sollwert, float Istwert);
extern void ServoRegelung(float HoehenRegler, float FlugRegler);	//Servo- und Motorregelung;

//PID Regler (I_alt ist Zeiger auf letzten I-Anteil der berechnung und wird aktuallisiert)
//e ist Zeiger auf Array[2], mit [0]->e und [1]-> e aus letztem Aufruf (wird hier verschoben)
//Es gilt der Prozesszyklus als Aufrufzyklus!
extern float PIDRegler(float P, float I, float D, float* I_alt, float* e);

extern float Richtung_soll;
//-----------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------
//*****************************************************************************************
//RegelungVorstufe
extern float SollwertHoehe(float MaxHoehe, float* Messwerte, short Rampe);

//-----------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------
//*****************************************************************************************
//Datenfilter
extern float 		MittelwertGefiltert_v[5];
extern float 		MittelwertGefiltert_h[5];	//Mittelwert hinten
extern float 		MittelwertGefiltert_o[5];	//Mittelwert oben
extern float 		MittelwertGefiltert_u[5];	//Mittelwert unten
extern float 		MittelwertGefiltert_r[5];	//Mittelwert rechts
extern float 		MittelwertGefiltert_l[5];	//Mittelwert links

//speichert den mittleren Wert aus den 黚ergebenen Daten im MittelwertGefiltert Array (5er)
extern void MittelwertFilter(float* Daten, float* MittelwertGefiltert);

//schiebt die Daten eines i Arrays um eins weiter ([0]->[1] etc.)
extern void DatenShift(float* Daten, int i);
//-----------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------
//*****************************************************************************************

#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?