From 0f25fa35e063d3df3c652153b2d6f1b9f94ce82e Mon Sep 17 00:00:00 2001 From: Martin Miller Date: Mon, 20 Mar 2017 11:57:09 -0500 Subject: Fix Jacobian of motion model. This fixes a bug that was present in the pyslam code. The Jacobian of the motion model needs to be replaced with: F = I + F*dt --- src/body.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/body.cpp') diff --git a/src/body.cpp b/src/body.cpp index f27a62f..e6bfb6c 100644 --- a/src/body.cpp +++ b/src/body.cpp @@ -105,7 +105,7 @@ Body::Q (double dt) Q.block<3,3>(0,3) = 0.5*dt*dt*dt*Matrix::Identity(); Q.block<3,3>(3,3) = dt*dt*Matrix::Identity(); Q *= 800e-6; - Q.block<3,3>(6,6) = dt*dt*5e-8*Matrix::Identity(); + Q.block<3,3>(6,6) = dt*dt*5e-3*Matrix::Identity(); return Q; } /* ----- end of method Body::q ----- */ @@ -149,7 +149,7 @@ Body::h ( ) *-------------------------------------------------------------------------------------- */ Matrix -Body::F ( const Vector3d &ang, const Quaterniond &q ) +Body::F ( const Vector3d &ang, const Quaterniond &q, double dt ) { Matrix F = Matrix::Zero(); Matrix Rbw(q.toRotationMatrix()); @@ -158,6 +158,8 @@ Body::F ( const Vector3d &ang, const Quaterniond &q ) F.block<3,3>(0,3) = Rbw; F.block<3,3>(3,3) = -W; F.block<3,3>(3,6) = -Matrix::Identity(); + F *= dt; + F += Matrix::Identity(); return F; } /* ----- end of method Body::F ----- */ -- cgit v1.1