Guest User

Untitled

a guest
May 22nd, 2012
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.39 KB | None | 0 0
  1. def estimate(self, Vair, theta, psi, GPS_Pn, GPS_Pe, dt):
  2. # CHECK UNITS
  3. psi = wrap(TD.HEADING)
  4. theta = TD.PITCH
  5. Vair = TD.TRUEAIRSPEED * 1.68780986 # m/s to ft/s
  6. Qpn = (self.Qot*abs(cos(psi))) + (self.Qxt*abs(sin(psi)))
  7. Qpe = (self.Qot*abs(sin(psi))) + (self.Qxt*abs(cos(psi)))
  8. Qwn = .00001
  9. Qwe = .00001
  10. self.Q = matrix("%f,0,0,0; 0,%f,0,0; 0,0,%f,0; 0,0,0,%f" % (Qpn, Qpe, Qwn, Qwe))
  11.  
  12. X_dot = matrix("%f;%f;%f;%f" % (Vair*cos(psi)*cos(theta) - self.Wn_est,
  13. Vair*sin(psi)*cos(theta) - self.We_est,
  14. 0,
  15. 0))
  16. self.X = self.X+X_dot*dt
  17.  
  18. self.A = matrix("0,0,-1,0;0,0,0,-1;0,0,0,0;0,0,0,0")
  19.  
  20. P_dot = self.A*self.P + self.P*self.A.transpose() + self.Q
  21. self.P = self.P + P_dot*dt
  22.  
  23. self.C = matrix("1,0,0,0;0,1,0,0")
  24.  
  25. self.L = self.P*self.C.transpose()*linalg.inv(self.R+self.C*self.P*self.C.transpose())
  26. #To invert the matrix it must not be singular ie have a det()=0
  27.  
  28. self.P = (self.I-self.L*self.C)*self.P
  29.  
  30. z = matrix("%f;%f" % (GPS_Pn,GPS_Pe))
  31. h = matrix("%f;%f" % (self.X[0,0],self.X[1,0]))
  32.  
  33. self.X = self.X + self.L*(z-h)
  34. self.Wn_est, self.We_est = self.X[2,0], self.X[3,0]
  35. return self.X
Advertisement
Add Comment
Please, Sign In to add comment