From 4ec5ba29f2db86abfa9b599c18660a90a21a308f Mon Sep 17 00:00:00 2001
From: fherrero <fherrero@iri.upc.edu>
Date: Mon, 10 Feb 2025 11:39:40 +0100
Subject: [PATCH] Use class bool variable instead of static bool to update
 motion_group names, so it's done for multiple instances of the module

---
 config/ari_arm_module_default.yaml          |  2 +-
 config/ivo_arm_module_default.yaml          |  2 +-
 config/tiago_arm_module_default.yaml        |  2 +-
 config/tiago_dual_arm_module_default.yaml   |  2 +-
 include/tiago_arm_module/tiago_arm_module.h |  1 +
 src/tiago_arm_module.cpp                    | 29 +++++++++++++--------
 6 files changed, 23 insertions(+), 15 deletions(-)

diff --git a/config/ari_arm_module_default.yaml b/config/ari_arm_module_default.yaml
index ba28a4c..dab2787 100644
--- a/config/ari_arm_module_default.yaml
+++ b/config/ari_arm_module_default.yaml
@@ -17,7 +17,7 @@ max_plan_time: 10.0
 max_vel_scale: 1.0
 end_effector_tool: "arm_left_grasping_frame"
 
-ws_frame_id: "/base_footprint"
+ws_frame_id: "base_footprint"
 ws_x_min: -1.0
 ws_y_min: -1.0
 ws_z_min: -1.0
diff --git a/config/ivo_arm_module_default.yaml b/config/ivo_arm_module_default.yaml
index 3d8ab3f..ad11e42 100644
--- a/config/ivo_arm_module_default.yaml
+++ b/config/ivo_arm_module_default.yaml
@@ -17,7 +17,7 @@ max_plan_time: 10.0
 max_vel_scale: 1.0
 end_effector_tool: "arm_left_tool_link"
 
-ws_frame_id: "/base_footprint"
+ws_frame_id: "base_footprint"
 ws_x_min: -1.0
 ws_y_min: -1.0
 ws_z_min: -1.0
diff --git a/config/tiago_arm_module_default.yaml b/config/tiago_arm_module_default.yaml
index a1ff2a3..85b1888 100644
--- a/config/tiago_arm_module_default.yaml
+++ b/config/tiago_arm_module_default.yaml
@@ -17,7 +17,7 @@ max_plan_time: 10.0
 max_vel_scale: 1.0
 end_effector_tool: "arm_tool_link"
 
-ws_frame_id: "/base_footprint"
+ws_frame_id: "base_footprint"
 ws_x_min: -1.0
 ws_y_min: -1.0
 ws_z_min: -1.0
diff --git a/config/tiago_dual_arm_module_default.yaml b/config/tiago_dual_arm_module_default.yaml
index 3d8ab3f..ad11e42 100644
--- a/config/tiago_dual_arm_module_default.yaml
+++ b/config/tiago_dual_arm_module_default.yaml
@@ -17,7 +17,7 @@ max_plan_time: 10.0
 max_vel_scale: 1.0
 end_effector_tool: "arm_left_tool_link"
 
-ws_frame_id: "/base_footprint"
+ws_frame_id: "base_footprint"
 ws_x_min: -1.0
 ws_y_min: -1.0
 ws_z_min: -1.0
diff --git a/include/tiago_arm_module/tiago_arm_module.h b/include/tiago_arm_module/tiago_arm_module.h
index 4cd07cc..6bcef2d 100644
--- a/include/tiago_arm_module/tiago_arm_module.h
+++ b/include/tiago_arm_module/tiago_arm_module.h
@@ -64,6 +64,7 @@ class CTiagoArmModule : public CModule<tiago_arm_module::TiagoArmModuleConfig>
     tiago_arm_module_status_t status;
     bool new_motion;
     bool cancel_pending;
+    bool first_dynamic_reconfigure_call;
 
     // planning objects
     std::vector<TVisualObject> objects;
diff --git a/src/tiago_arm_module.cpp b/src/tiago_arm_module.cpp
index 29c3cfd..4d7e8a8 100644
--- a/src/tiago_arm_module.cpp
+++ b/src/tiago_arm_module.cpp
@@ -4,6 +4,8 @@ CTiagoArmModule::CTiagoArmModule(const std::string &name,const std::string &name
   arm_action("arm",this->module_nh.getNamespace()),
   get_scene("get_planning_scene", this->module_nh.getNamespace())
 {
+  this->first_dynamic_reconfigure_call=true;
+
   this->start_operation();
 
   // initialize odometry subscriber
@@ -105,29 +107,34 @@ void CTiagoArmModule::state_machine(void)
 
 void CTiagoArmModule::reconfigure_callback(tiago_arm_module::TiagoArmModuleConfig &config, uint32_t level)
 {
-  static bool first=true;
-
-  ROS_INFO("CTiagoArmModule : reconfigure callback");
+  ROS_INFO("CTiagoArmModule : reconfigure callback: %s", this->module_nh.getNamespace().c_str());
   this->lock();
   this->config=config;
   /* set the module rate */
-  this->dynamic_reconfigure(config,"arm_module");
+
+  this->dynamic_reconfigure(config,"arm");
   /* motion action parameters */
   this->arm_action.dynamic_reconfigure(config,"move");
-  // handle the move groups
-  if(first)
+
+  if(this->first_dynamic_reconfigure_call)
   {
+    // handle the move groups
     this->move_groups.clear();
     this->move_groups=this->get_strings(this->module_nh,"move_groups");
     this->move_group_joints.resize(this->move_groups.size());
     for(unsigned int i=0;i<this->move_groups.size();i++)
+    {
       this->move_group_joints[i]=this->get_strings(this->module_nh,this->move_groups[i]);
-    // HACK: it was impossible to use a parameter call arm with all the joints, so the arm_only name
-    for(unsigned int i=0;i<this->move_groups.size();i++)
-      if(this->move_groups[i]=="arm_only")
-        this->move_groups[i]=="arm";
-    first=false;
+      //ROS_INFO("CTiagoArmModule: move_groups[i]=%s",this->move_groups[i].c_str());
+      
+      // HACK: it was impossible to use a parameter called 'arm' with all the joints, so the 'arm_only' name is used
+      //if(this->move_groups[i]=="arm_only")
+      //  this->move_groups[i]=="arm";
+    }
+
+    this->first_dynamic_reconfigure_call=false;
   }
+
   this->unlock();
   // planner params
   this->set_planner(config.planner_id);
-- 
GitLab