Skip to content

Commit 465e5d0

Browse files
[ControllerInterface] Improve the prefix name check for the chainable controllers (#2038)
--------- Co-authored-by: Christoph Fröhlich <[email protected]>
1 parent c302212 commit 465e5d0

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

controller_interface/src/chainable_controller_interface.cpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -57,18 +57,18 @@ ChainableControllerInterface::export_state_interfaces()
5757
// check if the names of the controller state interfaces begin with the controller's name
5858
for (const auto & interface : state_interfaces)
5959
{
60-
if (interface.get_prefix_name() != get_node()->get_name())
60+
if (interface.get_prefix_name().find(get_node()->get_name()) != 0)
6161
{
6262
std::string error_msg =
6363
"The prefix of the interface '" + interface.get_prefix_name() +
64-
"' does not equal the controller's name '" + get_node()->get_name() +
64+
"' should begin with the controller's name '" + get_node()->get_name() +
6565
"'. This is mandatory for state interfaces. No state interface will be exported. Please "
6666
"correct and recompile the controller with name '" +
6767
get_node()->get_name() + "' and try again.";
6868
throw std::runtime_error(error_msg);
6969
}
7070
auto state_interface = std::make_shared<hardware_interface::StateInterface>(interface);
71-
const auto interface_name = state_interface->get_interface_name();
71+
const auto interface_name = state_interface->get_name();
7272
auto [it, succ] = exported_state_interfaces_.insert({interface_name, state_interface});
7373
// either we have name duplicate which we want to avoid under all circumstances since interfaces
7474
// need to be uniquely identify able or something else really went wrong. In any case abort and
@@ -137,19 +137,20 @@ ChainableControllerInterface::export_reference_interfaces()
137137
const auto ref_interface_size = reference_interfaces.size();
138138
for (auto & interface : reference_interfaces)
139139
{
140-
if (interface.get_prefix_name() != get_node()->get_name())
140+
if (interface.get_prefix_name().find(get_node()->get_name()) != 0)
141141
{
142-
std::string error_msg = "The name of the interface " + interface.get_name() +
143-
" does not begin with the controller's name. This is mandatory for "
144-
"reference interfaces. Please "
145-
"correct and recompile the controller with name " +
146-
get_node()->get_name() + " and try again.";
142+
std::string error_msg = "The prefix of the interface '" + interface.get_prefix_name() +
143+
"' should begin with the controller's name '" +
144+
get_node()->get_name() +
145+
"'. This is mandatory for reference interfaces. Please correct and "
146+
"recompile the controller with name '" +
147+
get_node()->get_name() + "' and try again.";
147148
throw std::runtime_error(error_msg);
148149
}
149150

150151
hardware_interface::CommandInterface::SharedPtr reference_interface =
151152
std::make_shared<hardware_interface::CommandInterface>(std::move(interface));
152-
const auto interface_name = reference_interface->get_interface_name();
153+
const auto interface_name = reference_interface->get_name();
153154
// check the exported interface name is unique
154155
auto [it, succ] = exported_reference_interfaces_.insert({interface_name, reference_interface});
155156
// either we have name duplicate which we want to avoid under all circumstances since interfaces

0 commit comments

Comments
 (0)