diff --git a/src/IMU_tools.h b/src/IMU_tools.h index 98f895282487655fe76d56f6f6ccd593f24656c8..003c6f7abf4af780b3c5ce3c84f824f454577bb0 100644 --- a/src/IMU_tools.h +++ b/src/IMU_tools.h @@ -220,8 +220,8 @@ inline void between(const MatrixBase<D1>& dp1, const QuaternionBase<D2>& dq1, co MatrixSizeCheck<3, 1>::check(diff_v); diff_p = dq1.conjugate() * ( dp2 - dp1 - dv1*dt ); - diff_q = dq1.conjugate() * dq2; diff_v = dq1.conjugate() * ( dv2 - dv1 ); + diff_q = dq1.conjugate() * dq2; } template<typename D1, typename D2, typename D3, class T> @@ -307,8 +307,8 @@ inline void betweenStates(const MatrixBase<D1>& p1, const QuaternionBase<D2>& q1 MatrixSizeCheck<3, 1>::check(dv); dp = q1.conjugate() * ( p2 - p1 - v1*dt - (T)0.5*gravity().cast<T>()*(T)dt*(T)dt ); - dq = q1.conjugate() * q2; dv = q1.conjugate() * ( v2 - v1 - gravity().cast<T>()*(T)dt ); + dq = q1.conjugate() * q2; } template<typename D1, typename D2, typename D3, class T> @@ -359,8 +359,8 @@ Matrix<typename Derived::Scalar, 9, 1> lift(const MatrixBase<Derived>& delta_in) Map<Matrix<typename Derived::Scalar, 3, 1> > dv_ret ( & ret(6) ); dp_ret = dp_in; - do_ret = log_q(dq_in); dv_ret = dv_in; + do_ret = log_q(dq_in); return ret; } @@ -380,8 +380,8 @@ Matrix<typename Derived::Scalar, 10, 1> retract(const MatrixBase<Derived>& d_in) Map<Matrix<typename Derived::Scalar, 3, 1> > dv ( & ret(7) ); dp = dp_in; - dq = exp_q(do_in); dv = dv_in; + dq = exp_q(do_in); return ret; } @@ -392,8 +392,8 @@ inline void plus(const MatrixBase<D1>& dp1, const QuaternionBase<D2>& dq1, const MatrixBase<D7>& plus_p, QuaternionBase<D8>& plus_q, MatrixBase<D9>& plus_v ) { plus_p = dp1 + dp2; - plus_q = dq1 * exp_q(do2); plus_v = dv1 + dv2; + plus_q = dq1 * exp_q(do2); } template<typename D1, typename D2, typename D3> @@ -429,8 +429,8 @@ inline void diff(const MatrixBase<D1>& dp1, const QuaternionBase<D2>& dq1, const MatrixBase<D7>& diff_p, MatrixBase<D8>& diff_o, MatrixBase<D9>& diff_v ) { diff_p = dp2 - dp1; - diff_o = log_q(dq1.conjugate() * dq2); diff_v = dv2 - dv1; + diff_o = log_q(dq1.conjugate() * dq2); } template<typename D1, typename D2, typename D3, typename D4, typename D5, typename D6, typename D7, typename D8, typename D9, typename D10, typename D11> @@ -439,10 +439,10 @@ inline void diff(const MatrixBase<D1>& dp1, const QuaternionBase<D2>& dq1, const MatrixBase<D7>& diff_p, MatrixBase<D8>& diff_o, MatrixBase<D9>& diff_v , MatrixBase<D10>& J_do_dq1, MatrixBase<D11>& J_do_dq2) { - diff(dp1, dq1, dv1, dp2, dq2, dv2, diff_p, diff_o, diff_v); - J_do_dq1 = - jac_SO3_left_inv(diff_o); J_do_dq2 = jac_SO3_right_inv(diff_o); + + diff(dp1, dq1, dv1, dp2, dq2, dv2, diff_p, diff_o, diff_v); } @@ -483,9 +483,6 @@ inline void diff(const MatrixBase<D1>& d1, Matrix<typename D4::Scalar, 3, 3> J_do_dq1, J_do_dq2; - diff(dp1, dq1, dv1, dp2, dq2, dv2, diff_p, diff_o, diff_v, J_do_dq1, J_do_dq2); - - /* d = diff(d1, d2) is * dp = dp2 - dp1 * do = Log(dq1.conj * dq2) @@ -502,6 +499,8 @@ inline void diff(const MatrixBase<D1>& d1, J_diff_d2.setIdentity(); // d(R1.tr*R2) / d(R2) = Identity J_diff_d2.block(3,3,3,3) = J_do_dq2; // d(R1.tr*R2) / d(R1) = J_r_inv(theta) + + diff(dp1, dq1, dv1, dp2, dq2, dv2, diff_p, diff_o, diff_v, J_do_dq1, J_do_dq2); } template<typename D1, typename D2> @@ -528,8 +527,8 @@ inline void body2delta(const MatrixBase<D1>& a, MatrixSizeCheck<3,1>::check(dv); dp = 0.5 * a * dt * dt; - dq = exp_q(w * dt); dv = a * dt; + dq = exp_q(w * dt); } template<typename D1>