From da42fd62b262c1e2486019451b63d8935b3ca3d0 Mon Sep 17 00:00:00 2001
From: joanvallve <jvallve@iri.upc.edu>
Date: Mon, 6 Sep 2021 23:06:09 +0200
Subject: [PATCH] compiling

---
 .../factor/factor_velocity_direction_3d.h     |  2 +-
 .../processor/processor_constant_velocity.h   |  6 +++++-
 .../core/processor/processor_fix_wing_model.h | 11 ++++++++--
 src/processor/processor_constant_velocity.cpp | 11 +++++-----
 src/processor/processor_fix_wing_model.cpp    | 20 ++++++++++++-------
 5 files changed, 33 insertions(+), 17 deletions(-)

diff --git a/include/core/factor/factor_velocity_direction_3d.h b/include/core/factor/factor_velocity_direction_3d.h
index 457163bca..05cc4e8d0 100644
--- a/include/core/factor/factor_velocity_direction_3d.h
+++ b/include/core/factor/factor_velocity_direction_3d.h
@@ -62,7 +62,7 @@ inline bool FactorVelocityDirection3d::operator ()(const T* const _v, const T* c
     //                              << v_local(2) << "\n";
 
     // error (angle between measurement and velocity in local coordinates)
-    double error = acos( v_local.dot(getMeasurement().cast<T>()) / (v_local.norm() * getMeasurement().cast<T>().norm()));
+    T error = acos( v_local.dot(getMeasurement().cast<T>()) / (v_local.norm() * getMeasurement().cast<T>().norm()));
 
     // residual
     _residuals[0] = getMeasurementSquareRootInformationUpper()(0,0) * error;
diff --git a/include/core/processor/processor_constant_velocity.h b/include/core/processor/processor_constant_velocity.h
index 0014e1fba..156e9be87 100644
--- a/include/core/processor/processor_constant_velocity.h
+++ b/include/core/processor/processor_constant_velocity.h
@@ -17,14 +17,18 @@ WOLF_STRUCT_PTR_TYPEDEFS(ParamsProcessorConstantVelocity);
 
 struct ParamsProcessorConstantVelocity : public ParamsProcessorBase
 {
+        Eigen::MatrixXd cov_v_rate;
+
         ParamsProcessorConstantVelocity() = default;
         ParamsProcessorConstantVelocity(std::string _unique_name, const wolf::ParamsServer & _server) :
             ParamsProcessorBase(_unique_name, _server)
         {
+            cov_v_rate = _server.getParam<Eigen::VectorXd> (prefix + _unique_name + "/cov_rate_diagonal").asDiagonal();
         }
         std::string print() const override
         {
-            return ParamsProcessorBase::print();
+            return ParamsProcessorBase::print()  + "\n"
+                + "cov_v_rate: print not implemented\n";
         }
 };
 
diff --git a/include/core/processor/processor_fix_wing_model.h b/include/core/processor/processor_fix_wing_model.h
index 97e589b7f..040cdc39b 100644
--- a/include/core/processor/processor_fix_wing_model.h
+++ b/include/core/processor/processor_fix_wing_model.h
@@ -17,14 +17,21 @@ WOLF_STRUCT_PTR_TYPEDEFS(ParamsProcessorFixWingModel);
 
 struct ParamsProcessorFixWingModel : public ParamsProcessorBase
 {
+        Eigen::Vector3d velocity_local;
+        double angle_stdev;
+
         ParamsProcessorFixWingModel() = default;
         ParamsProcessorFixWingModel(std::string _unique_name, const wolf::ParamsServer & _server) :
             ParamsProcessorBase(_unique_name, _server)
         {
+            velocity_local   = _server.getParam<Eigen::Vector3d> (prefix + _unique_name + "/velocity_local");
+            angle_stdev      = _server.getParam<double>          (prefix + _unique_name + "/angle_stdev");
         }
         std::string print() const override
         {
-            return ParamsProcessorBase::print();
+            return ParamsProcessorBase::print()  + "\n"
+                + "velocity_local: print not implemented\n"
+                + "angle_stdev: " + std::to_string(angle_stdev) + "\n";
         }
 };
 
@@ -33,7 +40,7 @@ WOLF_PTR_TYPEDEFS(ProcessorFixWingModel);
 class ProcessorFixWingModel : public ProcessorBase
 {
     public:
-        ProcessorFixWingModel(ParamsProcessorMotionModelPtr);
+        ProcessorFixWingModel(ParamsProcessorFixWingModelPtr _params);
 
         // Factory method for high level API
         WOLF_PROCESSOR_CREATE(ProcessorFixWingModel, ParamsProcessorFixWingModel);
diff --git a/src/processor/processor_constant_velocity.cpp b/src/processor/processor_constant_velocity.cpp
index 23a7267ee..496cbe3cc 100644
--- a/src/processor/processor_constant_velocity.cpp
+++ b/src/processor/processor_constant_velocity.cpp
@@ -7,7 +7,7 @@
 
 #include "core/processor/processor_constant_velocity.h"
 
-#include "core/capture/capture_void.h"
+#include "core/capture/capture_base.h"
 #include "core/feature/feature_base.h"
 #include "core/factor/factor_block_difference.h"
 
@@ -19,7 +19,6 @@ ProcessorConstantVelocity::ProcessorConstantVelocity(ParamsProcessorConstantVelo
         params_processor_(_params),
         last_keyframe_(nullptr)
 {
-    assert(params_processor_->cov_rate.rows() == getProblem()->getDim() && "covariance size is wrong");
 }
 
 ProcessorConstantVelocity::~ProcessorConstantVelocity()
@@ -28,7 +27,8 @@ ProcessorConstantVelocity::~ProcessorConstantVelocity()
 
 void ProcessorConstantVelocity::configure(SensorBasePtr _sensor)
 {
-    assert(getProblem()->getFrameStructure().find('V') != std::string::npos) && "Processor only works with problems with V");
+    assert(params_processor_->cov_v_rate.rows() == getProblem()->getDim() && "cov_v_rate size is wrong");
+    assert(getProblem()->getFrameStructure().find('V') != std::string::npos && "Processor only works with problems with V");
 }
 
 void ProcessorConstantVelocity::processKeyFrame(FrameBasePtr _keyframe_ptr, const double& _time_tolerance)
@@ -40,9 +40,8 @@ void ProcessorConstantVelocity::processKeyFrame(FrameBasePtr _keyframe_ptr, cons
         _keyframe_ptr->getTimeStamp() > last_keyframe_->getTimeStamp())
     {
         // emplace capture
-        auto cap = CaptureBase::emplace<CapureVoid>(_keyframe_ptr,
-                                                    _keyframe_ptr->getTimeStamp(),
-                                                    getSensor());
+        auto cap = CaptureBase::emplace<CaptureBase>(_keyframe_ptr, "CaptureBase",
+                                                     _keyframe_ptr->getTimeStamp(), getSensor());
 
         double dt = _keyframe_ptr->getTimeStamp() - last_keyframe_->getTimeStamp();
 
diff --git a/src/processor/processor_fix_wing_model.cpp b/src/processor/processor_fix_wing_model.cpp
index ed3a849ea..02ee2d6b9 100644
--- a/src/processor/processor_fix_wing_model.cpp
+++ b/src/processor/processor_fix_wing_model.cpp
@@ -7,14 +7,16 @@
 
 #include "core/processor/processor_fix_wing_model.h"
 
-#include "core/capture/capture_void.h"
+#include "core/capture/capture_base.h"
 #include "core/feature/feature_base.h"
+#include "core/factor/factor_velocity_direction_3d.h"
 
 namespace wolf
 {
 
-ProcessorFixWingModel::ProcessorFixWingModel(ParamsProcessorMotionModelPtr _params) :
-        params_motion_model_(_params)
+ProcessorFixWingModel::ProcessorFixWingModel(ParamsProcessorFixWingModelPtr _params) :
+        ProcessorBase("ProcessorFixWingModel", 3, _params),
+        params_processor_(_params)
 {
 }
 
@@ -25,15 +27,19 @@ ProcessorFixWingModel::~ProcessorFixWingModel()
 void ProcessorFixWingModel::processKeyFrame(FrameBasePtr _keyframe_ptr, const double& _time_tolerance)
 {
     // emplace capture
-    auto cap = CaptureBase::emplace<CapureVoid>(_keyframe_ptr, _keyframe_ptr->getTimeStamp(), getSensor());
+    auto cap = CaptureBase::emplace<CaptureBase>(_keyframe_ptr, "CaptureBase",
+                                                 _keyframe_ptr->getTimeStamp(), getSensor());
     
     // emplace feature
     auto fea = FeatureBase::emplace<FeatureBase>(cap, "FeatureBase", 
-                                                 measurement, 
-                                                 cov);
+                                                 params_processor_->velocity_local,
+                                                 Eigen::Matrix1d(params_processor_->angle_stdev * params_processor_->angle_stdev));
     
     // emplace factor
-    auto fac = 
+    auto fac = FactorBase::emplace<FactorVelocityDirection3d>(fea,
+                                                              fea,
+                                                              shared_from_this(),
+                                                              false);
 }
 
 } /* namespace wolf */
-- 
GitLab