@@ -214,8 +214,8 @@ DynamixelHardwareInterface::on_configure(const rclcpp_lifecycle::State& previous
214214 // }
215215
216216 // Set up sync read / write managers
217- if (!setUpStatusReadManager () || !setUpStateReadManager () || !setUpTorqueWriteManager () ||
218- !setUpControlWriteManager () || ! setUpCmdReadManager ()) {
217+ if (!setUpStateAndStatusReadManager () || !setUpTorqueWriteManager () || !setUpControlWriteManager () ||
218+ !setUpCmdReadManager ()) {
219219 return hardware_interface::CallbackReturn::FAILURE;
220220 }
221221
@@ -463,13 +463,12 @@ hardware_interface::return_type DynamixelHardwareInterface::read(const rclcpp::T
463463 // Another operation is holding dynamixel_comm_mutex_; skipping read
464464 return hardware_interface::return_type::OK;
465465 }
466- // Check for hardware errors
467- status_read_manager_ .read ();
466+
467+ read_manager_ .read ();
468468 if (!isHardwareOk ()) {
469469 return hardware_interface::return_type::ERROR;
470470 }
471471
472- read_manager_.read ();
473472 if (!read_manager_.isOk ()) {
474473 DXL_LOG_ERROR (" Read manager lost connection" );
475474 return hardware_interface::return_type::ERROR;
@@ -616,7 +615,7 @@ bool DynamixelHardwareInterface::processCommandInterfaceUpdates(const std::vecto
616615 return true ;
617616}
618617
619- bool DynamixelHardwareInterface::setUpStateReadManager ()
618+ bool DynamixelHardwareInterface::setUpStateAndStatusReadManager ()
620619{
621620 read_manager_ = SyncReadManager ();
622621 std::unordered_map<std::string, DxlValueMappingList> register_dynamixel_mappings;
@@ -628,6 +627,8 @@ bool DynamixelHardwareInterface::setUpStateReadManager()
628627 register_dynamixel_mappings[register_name].push_back (
629628 std::make_pair<Dynamixel*, DxlValue>(joint.dynamixel .get (), DxlValue (&interface_value)));
630629 }
630+ register_dynamixel_mappings[DXL_REGISTER_HARDWARE_ERROR].push_back (
631+ std::make_pair<Dynamixel*, DxlValue>(joint.dynamixel .get (), DxlValue (&joint.dynamixel ->hardware_error_status )));
631632 }
632633
633634 for (const auto & [register_name, dynamixel_mapping] : register_dynamixel_mappings) {
@@ -637,19 +638,6 @@ bool DynamixelHardwareInterface::setUpStateReadManager()
637638 return read_manager_.init (driver_);
638639}
639640
640- bool DynamixelHardwareInterface::setUpStatusReadManager ()
641- {
642- status_read_manager_ = SyncReadManager ();
643- DxlValueMappingList status_mapping;
644- for (auto & [name, joint] : joints_) {
645- status_read_manager_.addDynamixel (joint.dynamixel .get ());
646- status_mapping.push_back (
647- std::make_pair<Dynamixel*, DxlValue>(joint.dynamixel .get (), DxlValue (&joint.dynamixel ->hardware_error_status )));
648- }
649-
650- status_read_manager_.addRegister (DXL_REGISTER_HARDWARE_ERROR, status_mapping);
651- return status_read_manager_.init (driver_);
652- }
653641bool DynamixelHardwareInterface::setUpCmdReadManager ()
654642{
655643 cmd_read_manager_ = SyncReadManager ();
0 commit comments