Skip to content

Commit ac8fe91

Browse files
committed
changed atoms to mutexes
1 parent 74c0e74 commit ac8fe91

File tree

2 files changed

+27
-20
lines changed

2 files changed

+27
-20
lines changed

robotiq_hande_driver/hardware/include/robotiq_hande_driver/hande_hardware_interface.hpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,15 @@ class RobotiqHandeHardwareInterface : public HWI::SystemInterface {
6363

6464
double state_position_;
6565
double state_velocity_;
66-
std::atomic<double> read_position_;
67-
std::atomic<double> read_velocity_;
66+
std::mutex mtx_read_;
67+
double read_position_;
68+
double read_velocity_;
6869

6970
double cmd_position_;
7071
double cmd_force_;
71-
std::atomic<double> write_position_;
72-
std::atomic<double> write_force_;
72+
std::mutex mtx_write_;
73+
double write_position_;
74+
double write_force_;
7375
};
7476

7577
} // namespace robotiq_hande_driver

robotiq_hande_driver/hardware/src/hande_hardware_interface.cpp

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

276278
HWI::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
}
284287
HWI::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

Comments
 (0)