Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00022
00044 class AltEstimate : public Module
00045 {
00046 DECLARE_MODULE(AltEstimate,Module)
00047
00048
00049
00050
00051 AltEstimate()
00052 {
00053
00054
00055
00056
00057 AddSocket("INS.Altitude",&m_altitude);
00058 AddSocket("AHRS.Acceleration",&m_acceleration);
00059 AddSocket("AltEstimate.AccelGain",&m_AccelGain);
00060 AddSocket("AltEstimate.AltimeterSmoothing",&m_altFilter);
00061 AddSocket("zAcc", &m_zAcc);
00062 AddSocket("offset", &m_offset);
00063 AddSocket("velocity", &m_velocity);
00064 AddSocket("AccelAltitude",&m_accelAltitude);
00065
00066 m_AccelGain = 1/8;
00067
00068 }
00069
00070
00071
00072
00073 virtual void ParamChanged(Socket * param)
00074 {
00075 }
00076
00077
00078
00079 virtual void Init()
00080 {
00081 m_accels[AXISX].Connect("Accel.X");
00082 m_accels[AXISY].Connect("Accel.Y");
00083 m_accels[AXISZ].Connect("Accel.Z");
00084 m_rawAltitude.Connect("Altimeter.Altitude");
00085
00086 SetInterval(10);
00087 SetPriority(10);
00088 }
00089
00090
00091 virtual void Reference()
00092 {
00093 m_velocity = 0;
00094 m_altitude = 0;
00095 m_accelAltitude = 0;
00096 }
00097
00098
00099 virtual void Loop(const unsigned long& interval)
00100 {
00101 m_acceleration = sqrt((m_accels[AXISX] * m_accels[AXISX]) + (m_accels[AXISY] * m_accels[AXISY]) + (m_accels[AXISZ] * m_accels[AXISZ]));
00102 if(m_acceleration > 3)
00103 {
00104
00105
00106 return;
00107 }
00108 float aMag = m_acceleration -1;
00109 m_offset += (aMag - m_offset) / 1000;
00110 m_zAcc = aMag - m_offset;
00111 m_velocity += m_zAcc - (m_velocity / 1000);
00112 m_smoothedAlt += (m_rawAltitude - m_smoothedAlt) * m_altFilter;
00113 m_accelAltitude += (m_velocity * m_AccelGain) + ((m_smoothedAlt - m_accelAltitude) / 50);
00114
00115
00116 m_altitude += ((m_accelAltitude - m_altitude) /10) + ((m_smoothedAlt - m_altitude) /10);
00117
00118
00119 }
00120
00121 private:
00122 PlugF m_accels[MAX_AXES];
00123 SocketF m_zAcc;
00124 SocketF m_offset;
00125 SocketF m_velocity;
00126 SocketF m_altitude;
00127 SocketF m_accelAltitude;
00128 SocketF m_acceleration;
00129 ParameterF m_altFilter;
00130 PlugF m_rawAltitude;
00131 float m_smoothedAlt;
00132 ParameterF m_AccelGain;
00133
00134 };
00135
00136 AltEstimate g_AltEstimate;
00137