Skip to content

Commit 4cddbb1

Browse files
committed
only throw if position is not present
1 parent de3eaea commit 4cddbb1

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

mock_hardware/src/generic_system.cpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ CallbackReturn GenericSystem::on_init(const hardware_interface::HardwareInfo & i
261261

262262
for (const auto & transmission_info : info_.transmissions)
263263
{
264-
// only simple transmissions are supported in this demo
264+
// only simple transmissions are supported
265265
if (transmission_info.type != "transmission_interface/SimpleTransmission")
266266
{
267267
std::string msg(
@@ -277,13 +277,20 @@ CallbackReturn GenericSystem::on_init(const hardware_interface::HardwareInfo & i
277277
std::vector<transmission_interface::JointHandle> joint_handles;
278278
for (const auto & joint_info : transmission_info.joints)
279279
{
280-
// this demo supports only one interface per joint
281-
if (!(joint_info.state_interfaces.size() == 1 &&
282-
joint_info.state_interfaces[0] == hardware_interface::HW_IF_POSITION &&
283-
joint_info.command_interfaces.size() == 1 &&
284-
joint_info.command_interfaces[0] == hardware_interface::HW_IF_POSITION))
280+
// We currently only support HW_IF_POSITION -> search for HW_IF_POSITION in command_interfaces
281+
// and state_interfaces and throw is not present in one of them
282+
// TODO(Manuel) add arbitrary interface does this make sense? Or only velocity and effort?
283+
if (
284+
(std::find(
285+
joint_info.state_interfaces.begin(), joint_info.state_interfaces.end(),
286+
hardware_interface::HW_IF_POSITION) == joint_info.state_interfaces.end()) ||
287+
(std::find(
288+
joint_info.command_interfaces.begin(), joint_info.command_interfaces.end(),
289+
hardware_interface::HW_IF_POSITION) == joint_info.command_interfaces.end()))
285290
{
286-
std::string msg("Invalid transmission joint " + joint_info.name + " configuration");
291+
std::string msg(
292+
"Invalid transmission joint " + joint_info.name +
293+
" configuration. No position interface found.");
287294
throw std::runtime_error(msg);
288295
}
289296

0 commit comments

Comments
 (0)