From cae88cf7098fc96a78ab64b7d5edfab1002edb83 Mon Sep 17 00:00:00 2001
From: Dinesh Atchuthan <datchuth@laas.fr>
Date: Wed, 17 Jan 2018 11:10:39 +0100
Subject: [PATCH] quaternion error using minus_left

---
 src/constraint_quaternion_absolute.h | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/src/constraint_quaternion_absolute.h b/src/constraint_quaternion_absolute.h
index 8ed9cc2e6..8fba0ebbb 100644
--- a/src/constraint_quaternion_absolute.h
+++ b/src/constraint_quaternion_absolute.h
@@ -59,16 +59,12 @@ inline bool ConstraintQuaternionAbsolute::operator ()(const T* const _o, T* _res
      *      q2 = exp(diff) * q1  ==> exp on the left means global.
      *
      * In rotations.h, we have
-     *      minus(q1,q2) = log_q(q1.conjugate() * q2); --> this is a local 'minus'
-     * But we could use this function to make a global 'minus' :
-     *      minus(q2.conjugate(),q1.conjugate()) = log_q(q2 * q1.conjugate());
-     * 
-     * Other option : define plus_left(), plus_right(), minus_left() and minus_right(), 
-     *                as we defined Jac_SO3_left() and Jac_SO3_right() in rotations.h.
+     *      minus(q1,q2) = minus_right(q1,q2) = log_q(q1.conjugate() * q2); --> this is a local 'minus'
+     *      minus_left(q1,q2) = log_q(q2.conjugate() * q1); --> this is a global 'minus'
      */ 
 
     Eigen::Matrix<T, 3, 1> er;
-    er = log_q( q2.cast<T>() * q1.conjugate() );
+    er = minus_left( q1, q2.cast<T>() );
 
     // residual
     Eigen::Map<Eigen::Matrix<T, 3, 1>> res(_residuals);
-- 
GitLab