diff --git a/CHANGELOG.md b/CHANGELOG.md
index 33a71c8c541ede672d1517e6645b251f8705e730..c4cd355b33fbfd11aeef24730a5f066234453f3a 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 fd2524afc14bc81163d105843f6eddd57436117a..333c390abb729f53bc337ebe99e4aa3d36a9078e 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 ce116d5e7983749afe4db99afe3fa052e5e66d8b..f6fbd71140625f2559571b451ba9e86494c8f062 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;
}