@@ -69,13 +69,13 @@ HWI::CallbackReturn RobotiqHandeHardwareInterface::on_init(const HWI::HardwareIn
6969
7070 state_position_ = gripper_position_max_;
7171 state_velocity_ = 0.0 ;
72- read_position_. store ( state_position_) ;
73- read_velocity_. store ( state_velocity_) ;
72+ read_position_ = state_position_;
73+ read_velocity_ = state_velocity_;
7474
7575 cmd_force_ = 1.0 ;
7676 cmd_position_ = gripper_position_max_;
77- write_position_. store ( cmd_position_) ;
78- write_force_. store ( cmd_force_) ;
77+ write_position_ = cmd_position_;
78+ write_force_ = cmd_force_;
7979
8080 return HWI::CallbackReturn::SUCCESS;
8181}
@@ -210,13 +210,15 @@ void RobotiqHandeHardwareInterface::gripper_communication() {
210210 while (th_comm_enabled_) {
211211 try {
212212 gripper_driver_.read ();
213-
214- // TODO introduce mutex for manipulating all read values
215- read_position_.store (gripper_driver_.get_position ());
216-
217- // TODO introduce mutex for manipulating all write values
218- gripper_driver_.set_position (write_position_.load (), write_force_.load ());
219-
213+ {
214+ std::lock_guard<std::mutex> lock (mtx_read_);
215+ read_position_ = gripper_driver_.get_position ();
216+ }
217+
218+ {
219+ std::lock_guard<std::mutex> lock (mtx_write_);
220+ gripper_driver_.set_position (write_position_, write_force_);
221+ }
220222 gripper_driver_.write ();
221223
222224 } catch (const std::exception& e) {
@@ -275,16 +277,19 @@ HWI::CallbackReturn RobotiqHandeHardwareInterface::on_error(
275277
276278HWI::return_type RobotiqHandeHardwareInterface::read (
277279 const rclcpp::Time& /* time*/ , const rclcpp::Duration& /* period*/ ) {
278- // TODO should we use mutexes?
279- state_position_ = read_position_.load ();
280- state_velocity_ = read_velocity_.load ();
280+ std::lock_guard<std::mutex> lock (mtx_read_);
281+
282+ state_position_ = read_position_;
283+ state_velocity_ = read_velocity_;
281284
282285 return hardware_interface::return_type::OK;
283286}
284287HWI::return_type RobotiqHandeHardwareInterface::write (
285288 const rclcpp::Time& /* time*/ , const rclcpp::Duration& /* period*/ ) {
286- write_position_.store (cmd_position_);
287- write_force_.store (cmd_force_);
289+ std::lock_guard<std::mutex> lock (mtx_write_);
290+
291+ write_position_ = cmd_position_;
292+ write_force_ = cmd_force_;
288293
289294 return hardware_interface::return_type::OK;
290295}
0 commit comments