From 4802b4ba98add34fe1bd108dca71a2446487561f Mon Sep 17 00:00:00 2001
From: Angel Santamaria Navarro <asantamaria@iri.upc.edu>
Date: Tue, 17 Nov 2015 10:03:33 +0000
Subject: [PATCH] Added boolean to avoid overwrite of launch parameters when
 loading nodelet.

---
 cfg/ImageLocalBinarization.cfg                |  4 ++--
 .../image_local_binarization_alg_nodelet.h    |  2 ++
 src/image_local_binarization_alg_nodelet.cpp  | 24 +++++++++++++++----
 3 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/cfg/ImageLocalBinarization.cfg b/cfg/ImageLocalBinarization.cfg
index 956bff2..6dbb37b 100755
--- a/cfg/ImageLocalBinarization.cfg
+++ b/cfg/ImageLocalBinarization.cfg
@@ -39,7 +39,7 @@ gen = ParameterGenerator()
 
 #       Name                       Type       Reconfiguration level            Description                       Default   Min   Max
 #gen.add("velocity_scale_factor",  double_t,  0,                               "Maximum velocity scale factor",  0.5,      0.0,  1.0)
-gen.add(           "window_size",     int_t,  0,                                  "Local threshold windo size",   15,        3,  500)
-gen.add(                     "k",  double_t,  0,                 "Multiplicative constant for local deviation",   0.06,      0,  0.5)
+gen.add(           "window_size",     int_t,  0,                                  "Local threshold window size",   7,        3,  500)
+gen.add(                     "k",  double_t,  0,                 "Multiplicative constant for local deviation",   0.09,      0,  0.5)
 
 exit(gen.generate(PACKAGE, "ImageLocalBinarizationAlgorithm", "ImageLocalBinarization"))
diff --git a/include/image_local_binarization_alg_nodelet.h b/include/image_local_binarization_alg_nodelet.h
index 0fed768..708cf32 100644
--- a/include/image_local_binarization_alg_nodelet.h
+++ b/include/image_local_binarization_alg_nodelet.h
@@ -72,6 +72,8 @@ class ImageLocalBinarizationAlgNodelet : public algorithm_base::IriBaseAlgorithm
     int window_size_;
     double k_;
 
+    bool avoid_dynrec_overwrite_; // To avoid overwrite due to initial Dynamic Reconfigure update
+
     cv_bridge::CvImageConstPtr image_;
     cv_bridge::CvImagePtr image_out_;
 
diff --git a/src/image_local_binarization_alg_nodelet.cpp b/src/image_local_binarization_alg_nodelet.cpp
index b96a7db..15b5c98 100644
--- a/src/image_local_binarization_alg_nodelet.cpp
+++ b/src/image_local_binarization_alg_nodelet.cpp
@@ -24,8 +24,12 @@ ImageLocalBinarizationAlgNodelet::ImageLocalBinarizationAlgNodelet(ros::NodeHand
   
   // [init action clients]
 
-  this->window_size_ = 3;
-  this->k_ = 0.06;
+  private_nh.param<int>("window_size", this->window_size_, 3 );
+  private_nh.param<double>("k", this->k_, 0.06 );
+
+  // To avoid overwrite due to Dyn Rec initial load
+  this->avoid_dynrec_overwrite_ = true;
+
 }
 
 ImageLocalBinarizationAlgNodelet::~ImageLocalBinarizationAlgNodelet(void)
@@ -90,9 +94,19 @@ void ImageLocalBinarizationAlgNodelet::node_config_update(Config &config, uint32
 {
   this->alg_.lock();
 
-  this->window_size_ = config.window_size;
-  this->k_ = config.k;
-
+  // Update Dyn Rec if parameters are loaded from launch file
+  if (this->avoid_dynrec_overwrite_)
+  {
+    config.window_size = this->window_size_;
+    config.k = this->k_;
+    this->avoid_dynrec_overwrite_ = false;
+  }
+  else
+  {
+    this->window_size_ = config.window_size;
+    this->k_ = config.k;
+  }
+  
   this->alg_.unlock();
 }
 
-- 
GitLab