From 610c586fc798e1449e6ccc8e3e366eb1aa3678a5 Mon Sep 17 00:00:00 2001
From: Florian Walch <florian.walch@franka.de>
Date: Fri, 26 Jul 2019 11:39:40 +0200
Subject: [PATCH] Add rosparam for franka::RealtimeConfig

---
 CHANGELOG.md                                   |  1 +
 franka_control/config/franka_control_node.yaml |  2 ++
 franka_control/src/franka_control_node.cpp     | 17 +++++++++++++++--
 3 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 33a71c8..c4cd355 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -17,6 +17,7 @@ Requires `libfranka` >= 0.5.0
   * **BREAKING** Moved `panda_moveit_config` to [`ros-planning`](https://github.com/ros-planning/panda_moveit_config).
   * Added support for ROS Melodic Morenia.
   * Raised minimum CMake version to 3.4 to match `libfranka`.
+  * Add rosparam to choose value of `franka::RealtimeConfig`.
 
 ## 0.6.0 - 2018-08-08
 
diff --git a/franka_control/config/franka_control_node.yaml b/franka_control/config/franka_control_node.yaml
index fd2524a..333c390 100644
--- a/franka_control/config/franka_control_node.yaml
+++ b/franka_control/config/franka_control_node.yaml
@@ -13,3 +13,5 @@ rate_limiting: true
 cutoff_frequency: 100
 # Internal controller for motion generators [joint_impedance|cartesian_impedance]
 internal_controller: joint_impedance
+# Used to decide whether to enforce realtime mode [enforce|ignore]
+realtime_config: enforce
diff --git a/franka_control/src/franka_control_node.cpp b/franka_control/src/franka_control_node.cpp
index ce116d5..f6fbd71 100644
--- a/franka_control/src/franka_control_node.cpp
+++ b/franka_control/src/franka_control_node.cpp
@@ -78,7 +78,18 @@ int main(int argc, char** argv) {
     ROS_ERROR("Invalid or no arm_id parameter provided");
     return 1;
   }
-  franka::Robot robot(robot_ip);
+
+  std::string realtime_config_param = node_handle.param("realtime_config", std::string("enforce"));
+  franka::RealtimeConfig realtime_config;
+  if (realtime_config_param == "enforce") {
+    realtime_config = franka::RealtimeConfig::kEnforce;
+  } else if (realtime_config_param == "ignore") {
+    realtime_config = franka::RealtimeConfig::kIgnore;
+  } else {
+    ROS_ERROR("Invalid realtime_config parameter provided. Valid values are 'enforce', 'ignore'.");
+    return 1;
+  }
+  franka::Robot robot(robot_ip, realtime_config);
 
   // Set default collision behavior
   robot.setCollisionBehavior(
@@ -149,7 +160,9 @@ int main(int argc, char** argv) {
     } else if (internal_controller == "cartesian_impedance") {
       controller_mode = franka::ControllerMode::kCartesianImpedance;
     } else {
-      ROS_WARN("Invalid internal_controller parameter provided, falling back to joint impedance");
+      ROS_WARN(
+          "Invalid internal_controller parameter provided, falling back to joint impedance. Valid "
+          "values are: 'joint_impedance', 'cartesian_impedance'.");
       controller_mode = franka::ControllerMode::kJointImpedance;
     }
 
-- 
GitLab