Skip to content

Commit c84b88e

Browse files
committed
refactor: update parameter writing logic in Dynamixel hardware interface
- Changed the initialization process to write Operating Mode parameters in the first pass. - Adjusted the logic to skip already written parameters, including Operating Mode and Limit parameters, in subsequent passes. - Improved clarity and efficiency of parameter handling during initialization.
1 parent 806e06a commit c84b88e

File tree

1 file changed

+14
-15
lines changed

1 file changed

+14
-15
lines changed

src/dynamixel_hardware_interface.cpp

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -698,38 +698,37 @@ bool DynamixelHardware::initItems(const std::string & type_filter)
698698
}
699699
dxl_torque_enable_[id] = torque_enabled;
700700

701-
// Write parameters in two passes:
702-
// 1. First pass: Write all Limit parameters
701+
// 1. First pass: Write Operating Mode parameters
703702
for (const auto& param : gpio.parameters) {
704703
const std::string& param_name = param.first;
704+
if (param_name == "Operating Mode") {
705+
if (!retryWriteItem(id, param_name, static_cast<uint32_t>(stoi(param.second)))) {
706+
return false;
707+
}
708+
}
709+
}
705710

711+
// 2. Second pass: Write all Limit parameters
712+
for (const auto& param : gpio.parameters) {
713+
const std::string& param_name = param.first;
706714
// Skip special parameters
707-
if (param_name == "ID" || param_name == "type" || param_name == "Torque Enable") {
715+
if (param_name == "ID" || param_name == "type" || param_name == "Torque Enable" || param_name == "Operating Mode") {
708716
continue;
709717
}
710-
711-
// Write Limit parameters first
712718
if (param_name.find("Limit") != std::string::npos) {
713719
if (!retryWriteItem(id, param_name, static_cast<uint32_t>(stoi(param.second)))) {
714720
return false;
715721
}
716722
}
717723
}
718724

719-
// 2. Second pass: Write all non-Limit parameters
725+
// 3. Third pass: Write all other parameters (excluding already written ones)
720726
for (const auto& param : gpio.parameters) {
721727
const std::string& param_name = param.first;
722-
723-
// Skip special parameters
724-
if (param_name == "ID" || param_name == "type" || param_name == "Torque Enable") {
728+
// Skip special and already written parameters
729+
if (param_name == "ID" || param_name == "type" || param_name == "Torque Enable" || param_name == "Operating Mode" || param_name.find("Limit") != std::string::npos) {
725730
continue;
726731
}
727-
728-
// Skip Limit parameters (already written)
729-
if (param_name.find("Limit") != std::string::npos) {
730-
continue;
731-
}
732-
733732
if (!retryWriteItem(id, param_name, static_cast<uint32_t>(stoi(param.second)))) {
734733
return false;
735734
}

0 commit comments

Comments
 (0)