File tree Expand file tree Collapse file tree 2 files changed +14
-5
lines changed Expand file tree Collapse file tree 2 files changed +14
-5
lines changed Original file line number Diff line number Diff line change 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_;
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments