1 #ifndef ADAPTIVE_ATTITUDE_COV_HPP 2 #define ADAPTIVE_ATTITUDE_COV_HPP 4 #include <Eigen/Geometry> 5 #include <Eigen/StdVector> 17 template <
typename _Scalar,
size_t _DoFState,
size_t _MeasurementSize>
32 std::vector < MeasurementMatrix, Eigen::aligned_allocator < MeasurementMatrix > >
RHist;
38 :m1(M1), m2(M2), gamma(GAMMA)
43 for (
typename std::vector< MeasurementMatrix, Eigen::aligned_allocator < MeasurementMatrix > >::iterator it = RHist.begin()
44 ; it != RHist.end(); ++it)
47 #ifdef ADAPTIVE_ATTITUDE_COV_DEBUG_PRINTS 48 std::cout<<
"[INIT ADAPTIVE_ATTITUDE] M1: "<<m1<<
"\n";
49 std::cout<<
"[INIT ADAPTIVE_ATTITUDE] M2: "<<m2<<
"\n";
50 std::cout<<
"[INIT ADAPTIVE_ATTITUDE] GAMMA: "<<gamma<<
"\n";
51 std::cout<<
"[INIT ADAPTIVE_ATTITUDE] r1count: "<<r1count<<
"\n";
52 std::cout<<
"[INIT ADAPTIVE_ATTITUDE] r2count: "<<r2count<<
"\n";
53 std::cout<<
"[INIT ADAPTIVE_ATTITUDE] RHist is of size "<<RHist.size()<<
"\n";
60 Eigen::Matrix<_Scalar, _MeasurementSize, _MeasurementSize>
matrix(
const Eigen::Matrix <_Scalar, _DoFState, 1> xk,
61 const Eigen::Matrix<_Scalar, _DoFState, _DoFState> &Pk,
62 const Eigen::Matrix<_Scalar, _MeasurementSize, 1> &z,
63 const Eigen::Matrix<_Scalar, _MeasurementSize, _DoFState> &H,
64 const Eigen::Matrix<_Scalar, _MeasurementSize, _MeasurementSize> &R)
66 MeasurementMatrix R1a;
67 MeasurementMatrix fooR;
69 MeasurementMatrix Qstar;
71 Eigen::Matrix<_Scalar, _MeasurementSize, 1> lambda;
72 Eigen::Matrix<_Scalar, _MeasurementSize, 1> mu;
73 Eigen::Matrix<_Scalar, _MeasurementSize, 1> s;
76 R1a = (z - H*xk) * (z - H*xk).transpose();
80 #ifdef ADAPTIVE_ATTITUDE_COV_DEBUG_PRINTS 81 std::cout<<
"[ADAPTIVE_ATTITUDE] xk:\n"<<xk<<
"\n";
82 std::cout<<
"[ADAPTIVE_ATTITUDE] Pk:\n"<<Pk<<
"\n";
83 std::cout<<
"[ADAPTIVE_ATTITUDE] z:\n"<<z<<
"\n";
84 std::cout<<
"[ADAPTIVE_ATTITUDE] H:\n"<<H<<
"\n";
85 std::cout<<
"[ADAPTIVE_ATTITUDE] R:\n"<<R<<
"\n";
86 std::cout<<
"[ADAPTIVE_ATTITUDE] r1count:\n"<<r1count<<
"\n";
87 std::cout<<
"[ADAPTIVE_ATTITUDE] R1a:\n"<<R1a<<
"\n";
88 std::cout<<
"[ADAPTIVE_ATTITUDE] z:\n"<<z<<
"\n";
93 r1count = (r1count+1)%(m1);
98 for (
register int j=0; j<static_cast<int>(
m1); ++j)
103 Uk = Uk/
static_cast<_Scalar
>(
m1);
105 fooR = H*Pk*H.transpose() + R;
110 Eigen::JacobiSVD <Eigen::MatrixXd > svdOfUk(Uk, Eigen::ComputeThinU);
112 s = svdOfUk.singularValues();
113 u = svdOfUk.matrixU();
115 for (
size_t i=0; i<_MeasurementSize; ++i)
118 mu(i) = u.col(i).transpose() * fooR * u.col(i);
121 #ifdef ADAPTIVE_ATTITUDE_COV_DEBUG_PRINTS 122 std::cout<<
"[ADAPTIVE_ATTITUDE] (lambda - mu) is:\n"<<(lambda - mu)<<
"\n";
125 if ((lambda - mu).maxCoeff() >
gamma)
128 #ifdef ADAPTIVE_ATTITUDE_COV_DEBUG_PRINTS 129 std::cout<<
"[ADAPTIVE_ATTITUDE] "<<(lambda - mu).maxCoeff() <<
" Bigger than Gamma("<<gamma<<
")\n";
133 Eigen::Matrix<_Scalar, _MeasurementSize, 1> auxvector;
134 for(
size_t i=0; i<_MeasurementSize; ++i)
136 auxvector(i) = std::max(lambda(i)-mu(i),static_cast<double>(0.00));
139 Qstar = auxvector(0) * u.col(0) * u.col(0).transpose() + auxvector(1) * u.col(1) * u.col(1).transpose() + auxvector(2) * u.col(2) * u.col(2).transpose();
143 #ifdef ADAPTIVE_ATTITUDE_COV_DEBUG_PRINTS 144 std::cout<<
"[ADAPTIVE_ATTITUDE] "<<(lambda - mu).maxCoeff() <<
" Lower than Gamma("<<gamma<<
") r2count: "<<r2count<<
"\n";
150 Eigen::Matrix<_Scalar, _MeasurementSize, 1> auxvector;
151 for(
size_t i=0; i<_MeasurementSize; ++i)
153 auxvector(i) = std::max(lambda(i)-mu(i),static_cast<double>(0.00));
156 Qstar = auxvector(0) * u.col(0) * u.col(0).transpose() + auxvector(1) * u.col(1) * u.col(1).transpose() + auxvector(2) * u.col(2) * u.col(2).transpose();
159 Qstar = MeasurementMatrix::Zero();
162 #ifdef ADAPTIVE_ATTITUDE_COV_DEBUG_PRINTS 163 std::cout<<
"[ADAPTIVE_ATTITUDE] Qstar:\n"<<Qstar<<
"\n";
std::vector< MeasurementMatrix, Eigen::aligned_allocator< MeasurementMatrix > > RHist
Definition: AdaptiveAttitudeCov.hpp:32
AdaptiveAttitudeCov(const unsigned int M1, const unsigned int M2, const double GAMMA)
Definition: AdaptiveAttitudeCov.hpp:36
unsigned int m2
Definition: AdaptiveAttitudeCov.hpp:27
Eigen::Matrix< _Scalar, _MeasurementSize, _MeasurementSize > MeasurementMatrix
Definition: AdaptiveAttitudeCov.hpp:23
double gamma
Definition: AdaptiveAttitudeCov.hpp:28
Class for Adaptive measurement matrix for the attitude correction in 3D.
Definition: AdaptiveAttitudeCov.hpp:18
Definition: AdaptiveAttitudeCov.hpp:13
unsigned int r1count
Definition: AdaptiveAttitudeCov.hpp:25
unsigned int m1
Definition: AdaptiveAttitudeCov.hpp:26
Eigen::Matrix< _Scalar, _MeasurementSize, _MeasurementSize > matrix(const Eigen::Matrix< _Scalar, _DoFState, 1 > xk, const Eigen::Matrix< _Scalar, _DoFState, _DoFState > &Pk, const Eigen::Matrix< _Scalar, _MeasurementSize, 1 > &z, const Eigen::Matrix< _Scalar, _MeasurementSize, _DoFState > &H, const Eigen::Matrix< _Scalar, _MeasurementSize, _MeasurementSize > &R)
Definition: AdaptiveAttitudeCov.hpp:60
~AdaptiveAttitudeCov()
Definition: AdaptiveAttitudeCov.hpp:58
unsigned int r2count
Definition: AdaptiveAttitudeCov.hpp:29