Skip to content

Commit 673df98

Browse files
committed
Adapted freedrive to new command_switch
1 parent cf50251 commit 673df98

File tree

1 file changed

+26
-3
lines changed

1 file changed

+26
-3
lines changed

ur_robot_driver/src/hardware_interface.cpp

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -927,6 +927,9 @@ hardware_interface::return_type URPositionHardwareInterface::prepare_command_mod
927927
if (passthrough_trajectory_controller_running_) {
928928
control_modes[i] = PASSTHROUGH_GPIO;
929929
}
930+
if (freedrive_mode_controller_running_) {
931+
control_modes[i] = FREEDRIVE_MODE;
932+
}
930933
}
931934

932935
if (!std::all_of(start_modes_.begin() + 1, start_modes_.end(),
@@ -955,9 +958,11 @@ hardware_interface::return_type URPositionHardwareInterface::prepare_command_mod
955958
return hardware_interface::return_type::ERROR;
956959
}
957960
start_modes_[i] = PASSTHROUGH_GPIO;
958-
}
959-
if (key == tf_prefix + FREEDRIVE_MODE + "/async_success") {
960-
start_modes_.push_back(FREEDRIVE_MODE);
961+
} else if (key == tf_prefix + FREEDRIVE_MODE + "/async_success") {
962+
if (start_modes_[i] != "UNDEFINED") {
963+
return hardware_interface::return_type::ERROR;
964+
}
965+
start_modes_[i] = FREEDRIVE_MODE;
961966
}
962967
}
963968
}
@@ -984,6 +989,12 @@ hardware_interface::return_type URPositionHardwareInterface::prepare_command_mod
984989
control_modes[i] = "UNDEFINED";
985990
}
986991
}
992+
if (key == tf_prefix + FREEDRIVE_MODE + "/async_success") {
993+
stop_modes_.push_back(StoppingInterface::STOP_FREEDRIVE);
994+
if (control_modes[i] == FREEDRIVE_MODE) {
995+
control_modes[i] = "UNDEFINED";
996+
}
997+
}
987998
}
988999
}
9891000

@@ -1000,6 +1011,18 @@ hardware_interface::return_type URPositionHardwareInterface::prepare_command_mod
10001011
}))) {
10011012
ret_val = hardware_interface::return_type::ERROR;
10021013
}
1014+
if (std::any_of(start_modes_.begin(), start_modes_.end(),
1015+
[this](auto& item) { return (item == FREEDRIVE_MODE); }) &&
1016+
(std::any_of(start_modes_.begin(), start_modes_.end(),
1017+
[this](auto& item) {
1018+
return (item == hardware_interface::HW_IF_VELOCITY || item == hardware_interface::HW_IF_POSITION || item == PASSTHROUGH_GPIO);
1019+
}) ||
1020+
std::any_of(control_modes.begin(), control_modes.end(), [this](auto& item) {
1021+
return (item == hardware_interface::HW_IF_VELOCITY || item == hardware_interface::HW_IF_POSITION ||
1022+
item == PASSTHROUGH_GPIO || item == FREEDRIVE_MODE);
1023+
}))) {
1024+
ret_val = hardware_interface::return_type::ERROR;
1025+
}
10031026
if (std::any_of(start_modes_.begin(), start_modes_.end(),
10041027
[](auto& item) { return (item == hardware_interface::HW_IF_POSITION); }) &&
10051028
(std::any_of(

0 commit comments

Comments
 (0)