From 84a511ddb5899fd01493ec9ff968168c6fde4232 Mon Sep 17 00:00:00 2001
From: Joan Sola <jsola@iri.upc.edu>
Date: Thu, 22 Mar 2018 12:09:38 +0100
Subject: [PATCH] Change some processors setup() by all processors configure()
 ...

    Also move the call from ProcXxx::create() to Problem::installProcessor(), just after creating it.
---
 src/examples/test_image.cpp                   | 1 -
 src/hello_wolf/processor_range_bearing.h      | 1 +
 src/problem.cpp                               | 1 +
 src/processor_GPS.h                           | 1 +
 src/processor_IMU.h                           | 1 +
 src/processor_base.h                          | 1 +
 src/processor_capture_holder.h                | 1 +
 src/processor_frame_nearest_neighbor_filter.h | 1 +
 src/processor_image_feature.h                 | 1 +
 src/processor_image_landmark.h                | 1 +
 src/processor_loopclosure_base.h              | 2 +-
 src/processor_odom_2D.h                       | 1 +
 src/processor_odom_3D.cpp                     | 7 ++++---
 src/processor_odom_3D.h                       | 2 +-
 src/processor_tracker_feature_corner.h        | 1 +
 src/processor_tracker_feature_dummy.h         | 1 +
 src/processor_tracker_landmark_corner.h       | 2 +-
 src/processor_tracker_landmark_dummy.h        | 1 +
 src/processor_tracker_landmark_polyline.h     | 2 +-
 src/processors/processor_diff_drive.h         | 2 +-
 20 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/src/examples/test_image.cpp b/src/examples/test_image.cpp
index e79354c92..d4733afce 100644
--- a/src/examples/test_image.cpp
+++ b/src/examples/test_image.cpp
@@ -139,7 +139,6 @@ int main(int argc, char** argv)
     // PROCESSOR
     // one-liner API
     ProcessorImageFeaturePtr prc_img_ptr = std::static_pointer_cast<ProcessorImageFeature>( wolf_problem_->installProcessor("IMAGE FEATURE", "ORB", "PinHole", wolf_root + "/src/examples/processor_image_ORB.yaml") );
-    prc_img_ptr->setup(camera_ptr);
     std::cout << "sensor & processor created and added to wolf problem" << std::endl;
     //=====================================================
 
diff --git a/src/hello_wolf/processor_range_bearing.h b/src/hello_wolf/processor_range_bearing.h
index 0706bc145..2c5d4702c 100644
--- a/src/hello_wolf/processor_range_bearing.h
+++ b/src/hello_wolf/processor_range_bearing.h
@@ -35,6 +35,7 @@ class ProcessorRangeBearing : public ProcessorBase
 
         ProcessorRangeBearing(const SensorRangeBearingPtr _sensor_ptr, const Scalar& _time_tolerance = 0);
         virtual ~ProcessorRangeBearing() {/* empty */}
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
         // Factory method for high level API
         static ProcessorBasePtr create(const std::string& _unique_name,
diff --git a/src/problem.cpp b/src/problem.cpp
index 11852deb2..f1f2558ef 100644
--- a/src/problem.cpp
+++ b/src/problem.cpp
@@ -118,6 +118,7 @@ ProcessorBasePtr Problem::installProcessor(const std::string& _prc_type, //
     }
 
     ProcessorBasePtr prc_ptr = ProcessorFactory::get().create(uppercase(_prc_type), _unique_processor_name, _prc_params, _corresponding_sensor_ptr);
+    prc_ptr->configure(_corresponding_sensor_ptr);
     _corresponding_sensor_ptr->addProcessor(prc_ptr);
 
     // setting the origin in all processor motion if origin already setted
diff --git a/src/processor_GPS.h b/src/processor_GPS.h
index 7a72dbade..b846ac414 100644
--- a/src/processor_GPS.h
+++ b/src/processor_GPS.h
@@ -26,6 +26,7 @@ class ProcessorGPS : public ProcessorBase
     public:
         ProcessorGPS();
         virtual ~ProcessorGPS(Scalar time_tolerance_);
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
         virtual void init(CaptureBasePtr _capture_ptr);
         virtual void process(CaptureBasePtr _capture_ptr);
         virtual bool voteForKeyFrame();
diff --git a/src/processor_IMU.h b/src/processor_IMU.h
index 3954d5ac1..499c93997 100644
--- a/src/processor_IMU.h
+++ b/src/processor_IMU.h
@@ -25,6 +25,7 @@ class ProcessorIMU : public ProcessorMotion{
     public:
         ProcessorIMU(const ProcessorParamsIMU& _params = ProcessorParamsIMU());
         virtual ~ProcessorIMU();
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
     protected:
         virtual void computeCurrentDelta(const Eigen::VectorXs& _data,
diff --git a/src/processor_base.h b/src/processor_base.h
index de6ecd94b..e3990f51f 100644
--- a/src/processor_base.h
+++ b/src/processor_base.h
@@ -133,6 +133,7 @@ class ProcessorBase : public NodeBase, public std::enable_shared_from_this<Proce
     public:
         ProcessorBase(const std::string& _type, const Scalar& _time_tolerance);
         virtual ~ProcessorBase();
+        virtual void configure(SensorBasePtr _sensor) = 0;
         void remove();
 
         unsigned int id();
diff --git a/src/processor_capture_holder.h b/src/processor_capture_holder.h
index 43eeab833..b07823cb6 100644
--- a/src/processor_capture_holder.h
+++ b/src/processor_capture_holder.h
@@ -35,6 +35,7 @@ public:
 
   ProcessorCaptureHolder(const Scalar& _buffer_size = 1);
   virtual ~ProcessorCaptureHolder() = default;
+  virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
   virtual void process(CaptureBasePtr _capture_ptr) override;
 
diff --git a/src/processor_frame_nearest_neighbor_filter.h b/src/processor_frame_nearest_neighbor_filter.h
index 16c3985e0..a22346283 100644
--- a/src/processor_frame_nearest_neighbor_filter.h
+++ b/src/processor_frame_nearest_neighbor_filter.h
@@ -40,6 +40,7 @@ struct ProcessorParamsFrameNearestNeighborFilter : public ProcessorParamsLoopClo
   }
 
   virtual ~ProcessorParamsFrameNearestNeighborFilter() = default;
+  virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
   int buffer_size_;
   int sample_step_degree_;
diff --git a/src/processor_image_feature.h b/src/processor_image_feature.h
index aa007e007..47632ad97 100644
--- a/src/processor_image_feature.h
+++ b/src/processor_image_feature.h
@@ -70,6 +70,7 @@ class ProcessorImageFeature : public ProcessorTrackerFeature
     public:
         ProcessorImageFeature(ProcessorParamsImage _params);
         virtual ~ProcessorImageFeature();
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
         virtual void setup(SensorCameraPtr _camera_ptr);
 
diff --git a/src/processor_image_landmark.h b/src/processor_image_landmark.h
index 489502b52..0aa32aea3 100644
--- a/src/processor_image_landmark.h
+++ b/src/processor_image_landmark.h
@@ -91,6 +91,7 @@ class ProcessorImageLandmark : public ProcessorTrackerLandmark
     public:
         ProcessorImageLandmark(const ProcessorParamsImage& _params);
         virtual ~ProcessorImageLandmark();
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
         virtual void setup(SensorCameraPtr _camera_ptr);
 
diff --git a/src/processor_loopclosure_base.h b/src/processor_loopclosure_base.h
index 1dd3becb3..54cbd57a1 100644
--- a/src/processor_loopclosure_base.h
+++ b/src/processor_loopclosure_base.h
@@ -46,8 +46,8 @@ protected:
 public:
 
   ProcessorLoopClosureBase(const std::string& _type, const Scalar _time_tolerance);
-
   virtual ~ProcessorLoopClosureBase() = default;
+  virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
   /** \brief Full processing of an incoming Capture.
      *
diff --git a/src/processor_odom_2D.h b/src/processor_odom_2D.h
index 4434b2a84..48e8dcdc6 100644
--- a/src/processor_odom_2D.h
+++ b/src/processor_odom_2D.h
@@ -33,6 +33,7 @@ class ProcessorOdom2D : public ProcessorMotion
     public:
         ProcessorOdom2D(const ProcessorParamsOdom2D& _params = ProcessorParamsOdom2D());
         virtual ~ProcessorOdom2D();
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
         virtual bool voteForKeyFrame() override;
 
diff --git a/src/processor_odom_3D.cpp b/src/processor_odom_3D.cpp
index 816579771..8ee85a73c 100644
--- a/src/processor_odom_3D.cpp
+++ b/src/processor_odom_3D.cpp
@@ -11,7 +11,6 @@ ProcessorOdom3D::ProcessorOdom3D(const ProcessorParamsOdom3D& _params, SensorOdo
                 p1_(nullptr), p2_(nullptr), p_out_(nullptr),
                 q1_(nullptr), q2_(nullptr), q_out_(nullptr)
         {
-            setup(_sensor_ptr);
             delta_ = deltaZero();
             delta_integrated_ = deltaZero();
             jacobian_delta_preint_.setZero(delta_cov_size_, delta_cov_size_);
@@ -23,10 +22,12 @@ ProcessorOdom3D::~ProcessorOdom3D()
 {
 }
 
-void ProcessorOdom3D::setup(SensorOdom3DPtr sen_ptr)
+void ProcessorOdom3D::configure(SensorBasePtr _sensor)
 {
-    if (sen_ptr)
+    if (_sensor)
     {
+        SensorOdom3DPtr sen_ptr = std::static_pointer_cast<SensorOdom3D>(_sensor);
+
         // we steal the parameters from the provided odom3D sensor.
         k_disp_to_disp_ = sen_ptr->getDispVarToDispNoiseFactor();
         k_disp_to_rot_ = sen_ptr->getDispVarToRotNoiseFactor();
diff --git a/src/processor_odom_3D.h b/src/processor_odom_3D.h
index 1dbbf2ad3..cf7167073 100644
--- a/src/processor_odom_3D.h
+++ b/src/processor_odom_3D.h
@@ -58,7 +58,7 @@ class ProcessorOdom3D : public ProcessorMotion
     public:
         ProcessorOdom3D(const ProcessorParamsOdom3D& _params = ProcessorParamsOdom3D(), SensorOdom3DPtr _sensor_ptr = nullptr);
         virtual ~ProcessorOdom3D();
-        void setup(SensorOdom3DPtr sen_ptr);
+        virtual void configure(SensorBasePtr _sensor);
 
     public:
         virtual void computeCurrentDelta(const Eigen::VectorXs& _data,
diff --git a/src/processor_tracker_feature_corner.h b/src/processor_tracker_feature_corner.h
index 7fe63a9ef..a6fb69bb8 100644
--- a/src/processor_tracker_feature_corner.h
+++ b/src/processor_tracker_feature_corner.h
@@ -67,6 +67,7 @@ class ProcessorTrackerFeatureCorner : public ProcessorTrackerFeature
         ProcessorTrackerFeatureCorner(const laserscanutils::LineFinderIterativeParams& _line_finder_params,
                                       const unsigned int& _n_corners_th);
         virtual ~ProcessorTrackerFeatureCorner();
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
     protected:
 
diff --git a/src/processor_tracker_feature_dummy.h b/src/processor_tracker_feature_dummy.h
index f6a917cf1..38df13c74 100644
--- a/src/processor_tracker_feature_dummy.h
+++ b/src/processor_tracker_feature_dummy.h
@@ -24,6 +24,7 @@ class ProcessorTrackerFeatureDummy : public ProcessorTrackerFeature
     public:
         ProcessorTrackerFeatureDummy(const Scalar _time_tolerance, const unsigned int _max_new_features, const unsigned int _min_feat_for_keyframe);
         virtual ~ProcessorTrackerFeatureDummy();
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
     protected:
 
diff --git a/src/processor_tracker_landmark_corner.h b/src/processor_tracker_landmark_corner.h
index 734acc508..74373f5c5 100644
--- a/src/processor_tracker_landmark_corner.h
+++ b/src/processor_tracker_landmark_corner.h
@@ -88,8 +88,8 @@ class ProcessorTrackerLandmarkCorner : public ProcessorTrackerLandmark
 
         ProcessorTrackerLandmarkCorner(const laserscanutils::LineFinderIterativeParams& _line_finder_params,
                                        const unsigned int& _new_corners_th, const unsigned int& _loop_frames_th);
-
         virtual ~ProcessorTrackerLandmarkCorner();
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
     protected:
 
diff --git a/src/processor_tracker_landmark_dummy.h b/src/processor_tracker_landmark_dummy.h
index 835fa27ce..b53326176 100644
--- a/src/processor_tracker_landmark_dummy.h
+++ b/src/processor_tracker_landmark_dummy.h
@@ -20,6 +20,7 @@ class ProcessorTrackerLandmarkDummy : public ProcessorTrackerLandmark
     public:
         ProcessorTrackerLandmarkDummy(const Scalar _time_tolerance, const unsigned int& _max_new_features);
         virtual ~ProcessorTrackerLandmarkDummy();
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
     protected:
 
diff --git a/src/processor_tracker_landmark_polyline.h b/src/processor_tracker_landmark_polyline.h
index 795e4627c..8236cb65e 100644
--- a/src/processor_tracker_landmark_polyline.h
+++ b/src/processor_tracker_landmark_polyline.h
@@ -114,8 +114,8 @@ class ProcessorTrackerLandmarkPolyline : public ProcessorTrackerLandmark
         EIGEN_MAKE_ALIGNED_OPERATOR_NEW; // to guarantee alignment (see http://eigen.tuxfamily.org/dox-devel/group__TopicStructHavingEigenMembers.html)
 
         ProcessorTrackerLandmarkPolyline(const ProcessorParamsPolyline& _params);
-
         virtual ~ProcessorTrackerLandmarkPolyline();
+        virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
         const FeatureBaseList& getLastPolylines() const;
 
diff --git a/src/processors/processor_diff_drive.h b/src/processors/processor_diff_drive.h
index 6daba6031..f47873b22 100644
--- a/src/processors/processor_diff_drive.h
+++ b/src/processors/processor_diff_drive.h
@@ -56,8 +56,8 @@ class ProcessorDiffDrive : public ProcessorMotion
 public:
 
   ProcessorDiffDrive(const ProcessorParamsDiffDrive& params);
-
   virtual ~ProcessorDiffDrive() = default;
+  virtual void configure(SensorBasePtr _sensor) { /* empty */}
 
   virtual bool voteForKeyFrame() override;
 
-- 
GitLab