From 11e44095dc02f7eaad6fb7c8e3f92ebf11b13415 Mon Sep 17 00:00:00 2001
From: fherrero <fherrero@iri.upc.edu>
Date: Thu, 13 Jul 2023 09:11:18 +0200
Subject: [PATCH] Added a bypass parameter to be able to disable its operation
 when necessary.

---
 cfg/SafeCmd.cfg           |  1 +
 src/safe_cmd_alg_node.cpp | 27 ++++++++++++++++-----------
 2 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/cfg/SafeCmd.cfg b/cfg/SafeCmd.cfg
index 33d3535..8d13bb9 100755
--- a/cfg/SafeCmd.cfg
+++ b/cfg/SafeCmd.cfg
@@ -40,6 +40,7 @@ ackermann = gen.add_group("ackermann")
 
 #       Name       Type       Reconfiguration level    Description       Default   Min   Max
 gen.add("rate",                      double_t, 0, "Main loop rate (Hz)",  10.0,   0.1, 1000.0)
+gen.add("bypass",                    bool_t,   0, "Whether or not to bypassa the safety fwature", False)
 gen.add("safety_distance",           double_t, 0, "Safety distance to possible obstacles",0.5, 0.0, 10.0)
 gen.add("traj_sim_distance",         double_t, 0, "Distance for the trajectory computation",    1.0, 0.1, 5.0)
 gen.add("traj_sim_time",             double_t, 0, "Time for the trajectory computation",    1.0, 0.1, 5.0)
diff --git a/src/safe_cmd_alg_node.cpp b/src/safe_cmd_alg_node.cpp
index d7ff458..dd85a25 100644
--- a/src/safe_cmd_alg_node.cpp
+++ b/src/safe_cmd_alg_node.cpp
@@ -171,20 +171,25 @@ void SafeCmdAlgNode::cmd_vel_callback(const geometry_msgs::Twist::ConstPtr& msg)
   this->alg_.lock(); 
   //cmd_vel_mutex_.enter();
 
-  this->Twist_msg_=*msg;
-  // compute the robot trajectory depending on the architecture
-  if(this->config.architecture==0)// ackermann using steering angle
-    this->alg_.compute_trajectory_ackermann_steer_angle(msg->linear.x,msg->angular.z,this->traj);
-  else if(this->config.architecture==1)// ackermann using angular velocity
-    this->alg_.compute_trajectory_ackermann_angular_speed(msg->linear.x,msg->angular.z,this->traj);
-  else if(this->config.architecture==2)// differential
-    this->alg_.compute_trajectory_differential(msg->linear.x,msg->angular.z,this->traj);
+  if(this->config.bypass)
+    cmd_vel_safe_publisher_.publish(msg);
   else
   {
-    ROS_ERROR("SafeCmdAlgNode: unknown robot architecture");
-    return;
+    this->Twist_msg_=*msg;
+    // compute the robot trajectory depending on the architecture
+    if(this->config.architecture==0)// ackermann using steering angle
+      this->alg_.compute_trajectory_ackermann_steer_angle(msg->linear.x,msg->angular.z,this->traj);
+    else if(this->config.architecture==1)// ackermann using angular velocity
+      this->alg_.compute_trajectory_ackermann_angular_speed(msg->linear.x,msg->angular.z,this->traj);
+    else if(this->config.architecture==2)// differential
+      this->alg_.compute_trajectory_differential(msg->linear.x,msg->angular.z,this->traj);
+    else
+    {
+      ROS_ERROR("SafeCmdAlgNode: unknown robot architecture");
+      return;
+    }
+    this->new_cmd_vel=true;
   }
-  this->new_cmd_vel=true;
 
   //cmd_vel_mutex_.exit(); 
   this->alg_.unlock(); 
-- 
GitLab