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