return P_;
}
-
-Eigen::VectorXd Ekf::f(const Eigen::Vector3d u)
+Eigen::MatrixXd Ekf::Xi(void)
{
Eigen::MatrixXd Xi(4,3);
Xi << -x_(1), -x_(2), -x_(3),
- x_(0), -x_(3), -x_(2),
+ x_(0), -x_(3), x_(2),
x_(3), x_(0), -x_(1),
-x_(2), x_(1), x_(0);
-
+ return Xi;
+}
+
+
+Eigen::VectorXd Ekf::f(const Eigen::Vector3d u)
+{
Eigen::MatrixXd G(7,3);
- G << T_/2.0*Xi,
+ G << T_/2.0*Xi(),
Eigen::MatrixXd::Zero(3,3);
return x_+G*u;
Eigen::MatrixXd Ekf::F(const Eigen::Vector3d u)
{
- Eigen::MatrixXd Xi(4,3);
- Xi << -x_(1), -x_(2), -x_(3),
- x_(0), -x_(3), -x_(2),
- x_(3), x_(0), -x_(1),
- -x_(2), x_(1), x_(0);
-
Eigen::MatrixXd Omega(4,4);
Omega << 0.0, -u(0), -u(1), -u(2),
u(0), 0.0, u(2), -u(1),
u(2), u(1), -u(0), 0.0;
Eigen::MatrixXd F(7,7);
- F << T_/2.0*Omega, -T_/2.0*Xi,
+ F << T_/2.0*Omega, -T_/2.0*Xi(),
Eigen::MatrixXd::Zero(3,4), Eigen::MatrixXd::Zero(3,3);
return F;
Eigen::VectorXd Ekf::h(void)
{
Eigen::VectorXd h(6);
- h << 2*Gz_*(x_(1)*x_(3)-x_(2)*x_(0)),
- 2*Gz_*(x_(2)*x_(3)+x_(1)*x_(0)),
- Gz_*(x_(0)*x_(0)-x_(1)*x_(1)-x_(2)*x_(2)+x_(3)*x_(3)),
- x_(0)*x_(0)+x_(1)*x_(1)-x_(2)*x_(2)-x_(3)*x_(3),
- 2*(x_(1)*x_(2)-x_(3)*x_(0)),
- 2*(x_(1)*x_(3)+x_(2)*x_(0));
+ h << -2*Gz_*(x_(1)*x_(3)-x_(2)*x_(0)),
+ -2*Gz_*(x_(2)*x_(3)+x_(1)*x_(0)),
+ -Gz_*(x_(0)*x_(0)-x_(1)*x_(1)-x_(2)*x_(2)+x_(3)*x_(3)),
+ 2*(x_(1)*x_(2)+x_(3)*x_(0)),
+ x_(0)*x_(0)-x_(1)*x_(1)+x_(2)*x_(2)-x_(3)*x_(3),
+ 2*(x_(2)*x_(3)-x_(1)*x_(0));
return h;
}
Eigen::MatrixXd Ekf::H(void)
{
Eigen::MatrixXd H(6,7);
- H << -2*Gz_*x_(2), 2*Gz_*x_(3), -2*Gz_*x_(0), 2*Gz_*x_(1), Eigen::MatrixXd::Zero(1,3),
- 2*Gz_*x_(1), 2*Gz_*x_(0), 2*Gz_*x_(3), 2*Gz_*x_(2), Eigen::MatrixXd::Zero(1,3),
- 2*Gz_*x_(0), -2*Gz_*x_(1), -2*Gz_*x_(2), 2*Gz_*x_(3), Eigen::MatrixXd::Zero(1,3),
- 2*x_(0), -2*x_(1), -2*x_(2), -2*x_(3), Eigen::MatrixXd::Zero(1,3),
- -2*x_(3), 2*x_(2), 2*x_(1), -2*x_(0), Eigen::MatrixXd::Zero(1,3),
- 2*x_(2), 2*x_(4), -2*x_(0), 2*x_(2), Eigen::MatrixXd::Zero(1,3);
+ H << 2*Gz_*x_(2), -2*Gz_*x_(3), 2*Gz_*x_(0), -2*Gz_*x_(1), Eigen::MatrixXd::Zero(1,3),
+ -2*Gz_*x_(1), -2*Gz_*x_(0), -2*Gz_*x_(3), -2*Gz_*x_(2), Eigen::MatrixXd::Zero(1,3),
+ -2*Gz_*x_(0), 2*Gz_*x_(1), 2*Gz_*x_(2), -2*Gz_*x_(3), Eigen::MatrixXd::Zero(1,3),
+ 2*x_(3), 2*x_(2), 2*x_(1), 2*x_(0), Eigen::MatrixXd::Zero(1,3),
+ 2*x_(0), -2*x_(1), 2*x_(2), -2*x_(3), Eigen::MatrixXd::Zero(1,3),
+ -2*x_(1), -2*x_(0), 2*x_(3), 2*x_(2), Eigen::MatrixXd::Zero(1,3);
return H;
}