Skip to content

Commit ecb9c04

Browse files
URJalaurfeex
authored andcommitted
Update force mode controller to use RealtimeThreadSafeBox
1 parent 765b4aa commit ecb9c04

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

ur_controllers/include/ur_controllers/force_mode_controller.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
#include <controller_interface/controller_interface.hpp>
4242
#include <geometry_msgs/msg/pose_stamped.hpp>
4343
#include <rclcpp/rclcpp.hpp>
44-
#include <realtime_tools/realtime_buffer.hpp>
44+
#include <realtime_tools/realtime_thread_safe_box.hpp>
4545
#include <std_srvs/srv/trigger.hpp>
4646
#if __has_include(<tf2_ros/buffer.hpp>)
4747
#include <tf2_ros/buffer.hpp>
@@ -98,7 +98,7 @@ struct ForceModeParameters
9898
std::array<double, 6> task_frame;
9999
std::array<double, 6> selection_vec;
100100
std::array<double, 6> limits;
101-
geometry_msgs::msg::Wrench wrench;
101+
geometry_msgs::msg::Wrench wrench{};
102102
double type;
103103
double damping_factor;
104104
double gain_scaling;
@@ -137,7 +137,7 @@ class ForceModeController : public controller_interface::ControllerInterface
137137
std::shared_ptr<force_mode_controller::ParamListener> param_listener_;
138138
force_mode_controller::Params params_;
139139

140-
realtime_tools::RealtimeBuffer<ForceModeParameters> force_mode_params_buffer_;
140+
realtime_tools::RealtimeThreadSafeBox<ForceModeParameters> force_mode_params_buffer_;
141141
std::atomic<bool> force_mode_active_;
142142
std::atomic<bool> change_requested_;
143143
std::atomic<double> async_state_;

ur_controllers/src/force_mode_controller.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,12 @@ controller_interface::return_type ur_controllers::ForceModeController::update(co
180180
if (change_requested_) {
181181
bool write_successful = true;
182182
if (force_mode_active_) {
183-
const auto force_mode_parameters = force_mode_params_buffer_.readFromRT();
183+
const auto force_mode_parameters = force_mode_params_buffer_.try_get();
184+
if (!force_mode_parameters) {
185+
RCLCPP_WARN(get_node()->get_logger(), "Could not get force mode parameters from realtime buffer. Retrying in "
186+
"next update cycle.");
187+
return controller_interface::return_type::OK;
188+
}
184189
write_successful &= command_interfaces_[CommandInterfaces::FORCE_MODE_TASK_FRAME_X].set_value(
185190
force_mode_parameters->task_frame[0]);
186191
write_successful &= command_interfaces_[CommandInterfaces::FORCE_MODE_TASK_FRAME_Y].set_value(
@@ -357,7 +362,11 @@ bool ForceModeController::setForceMode(const ur_msgs::srv::SetForceMode::Request
357362
}
358363
force_mode_parameters.gain_scaling = req->gain_scaling;
359364

360-
force_mode_params_buffer_.writeFromNonRT(force_mode_parameters);
365+
if (!force_mode_params_buffer_.try_set(force_mode_parameters)) {
366+
RCLCPP_ERROR(get_node()->get_logger(), "Could not set force mode parameters in realtime buffer.");
367+
resp->success = false;
368+
return false;
369+
}
361370
force_mode_active_ = true;
362371
change_requested_ = true;
363372

0 commit comments

Comments
 (0)