From 8ac94b73f08c0aa6b08c706ba552ab081f0f6694 Mon Sep 17 00:00:00 2001
From: jvallve <jvallve@iri.upc.edu>
Date: Tue, 27 Sep 2022 15:40:00 +0200
Subject: [PATCH] set id and add orientation

---
 ...ssor_tracker_feature_landmark_external.cpp | 24 +++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/src/processor/processor_tracker_feature_landmark_external.cpp b/src/processor/processor_tracker_feature_landmark_external.cpp
index 8502c87e1..e2dd598ea 100644
--- a/src/processor/processor_tracker_feature_landmark_external.cpp
+++ b/src/processor/processor_tracker_feature_landmark_external.cpp
@@ -151,6 +151,7 @@ FactorBasePtr ProcessorTrackerFeatureLandmarkExternal::emplaceFactor(FeatureBase
                                                       "LandmarkRelativePosition2d",
                                                       std::make_shared<StatePoint2d>(lmk_p), 
                                                       nullptr);
+            lmk->setId(_feature_ptr->landmarkId());
         }
 
         // emplace factor
@@ -178,6 +179,17 @@ FactorBasePtr ProcessorTrackerFeatureLandmarkExternal::emplaceFactor(FeatureBase
                                                       "LandmarkRelativePose2d",
                                                       std::make_shared<StatePoint2d>(lmk_p),
                                                       std::make_shared<StateAngle>(lmk_o));
+            lmk->setId(_feature_ptr->landmarkId());
+        }
+        // no orientation, add it
+        else if (not lmk->getO())
+        {
+            double frm_o = _feature_ptr->getCapture()->getFrame()->getO()->getState()(0);
+            double sen_o = _feature_ptr->getCapture()->getO()->getState()(0);
+
+            double lmk_o = frm_o + sen_o + _feature_ptr->getMeasurement()(2);
+
+            lmk->addStateBlock('O', std::make_shared<StateAngle>(lmk_o), getProblem());
         }
 
         // emplace factor
@@ -206,6 +218,7 @@ FactorBasePtr ProcessorTrackerFeatureLandmarkExternal::emplaceFactor(FeatureBase
                                                       "LandmarkRelativePosition3d",
                                                       std::make_shared<StatePoint3d>(lmk_p),
                                                       nullptr);
+            lmk->setId(_feature_ptr->landmarkId());
         }
 
         // emplace factor
@@ -233,6 +246,17 @@ FactorBasePtr ProcessorTrackerFeatureLandmarkExternal::emplaceFactor(FeatureBase
                                                       "LandmarkRelativePose3d",
                                                       std::make_shared<StatePoint3d>(lmk_p),
                                                       std::make_shared<StateQuaternion>(lmk_o));
+            lmk->setId(_feature_ptr->landmarkId());
+        }
+        // no orientation, add it
+        else if (not lmk->getO())
+        {
+            Quaterniond frm_o = Quaterniond(Vector4d(_feature_ptr->getCapture()->getFrame()->getO()->getState()));
+            Quaterniond sen_o = Quaterniond(Vector4d(_feature_ptr->getCapture()->getO()->getState()));
+
+            Quaterniond lmk_o = frm_o * sen_o * Quaterniond(_feature_ptr->getMeasurement().tail<4>());
+
+            lmk->addStateBlock('O', std::make_shared<StateQuaternion>(lmk_o), getProblem());
         }
 
         // emplace factor
-- 
GitLab