Skip to content

Commit 7c07d0c

Browse files
committed
make states and commands of component interfaces private
1 parent b5f9b4d commit 7c07d0c

File tree

5 files changed

+145
-79
lines changed

5 files changed

+145
-79
lines changed

hardware_interface/include/hardware_interface/actuator_interface.hpp

Lines changed: 47 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -160,13 +160,14 @@ class ActuatorInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNod
160160

161161
/**
162162
* Override this method to export custom StateInterfaces which are not defined in the URDF file.
163+
* Those interfaces will be added to the unlisted_state_interfaces_ map.
163164
*
164165
* Note method name is going to be changed to export_state_interfaces() as soon as the deprecated
165166
* version is removed.
166167
*
167-
* \return vector of shared pointers to the created and stored StateInterfaces
168+
* \return vector of descriptions to the unlisted StateInterfaces
168169
*/
169-
virtual std::vector<std::shared_ptr<StateInterface>> export_state_interfaces_2()
170+
virtual std::vector<hardware_interface::InterfaceDescription> export_state_interfaces_2()
170171
{
171172
// return empty vector by default.
172173
return {};
@@ -181,8 +182,24 @@ class ActuatorInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNod
181182
*/
182183
virtual std::vector<std::shared_ptr<StateInterface>> on_export_state_interfaces()
183184
{
184-
std::vector<std::shared_ptr<StateInterface>> state_interfaces = export_state_interfaces_2();
185-
state_interfaces.reserve(joint_state_interfaces_.size());
185+
// import the unlisted interfaces
186+
std::vector<hardware_interface::InterfaceDescription> unlisted_interface_descriptions =
187+
export_state_interfaces_2();
188+
189+
std::vector<std::shared_ptr<StateInterface>> state_interfaces;
190+
state_interfaces.reserve(
191+
unlisted_interface_descriptions.size() + joint_state_interfaces_.size());
192+
193+
// add InterfaceDescriptions and create the StateInterfaces from the descriptions and add to
194+
// maps.
195+
for (const auto & description : unlisted_interface_descriptions)
196+
{
197+
auto name = description.get_name();
198+
unlisted_state_interfaces_.insert(std::make_pair(name, description));
199+
auto state_interface = std::make_shared<StateInterface>(description);
200+
actuator_states_.insert(std::make_pair(name, state_interface));
201+
state_interfaces.push_back(state_interface);
202+
}
186203

187204
for (const auto & [name, descr] : joint_state_interfaces_)
188205
{
@@ -219,13 +236,14 @@ class ActuatorInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNod
219236

220237
/**
221238
* Override this method to export custom CommandInterfaces which are not defined in the URDF file.
239+
* Those interfaces will be added to the unlisted_command_interfaces_ map.
222240
*
223241
* Note method name is going to be changed to export_command_interfaces() as soon as the
224242
* deprecated version is removed.
225243
*
226-
* \return vector of shared pointers to the created and stored StateInterfaces
244+
* \return vector of descriptions to the unlisted CommandInterfaces
227245
*/
228-
virtual std::vector<std::shared_ptr<CommandInterface>> export_command_interfaces_2()
246+
virtual std::vector<hardware_interface::InterfaceDescription> export_command_interfaces_2()
229247
{
230248
// return empty vector by default.
231249
return {};
@@ -240,9 +258,24 @@ class ActuatorInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNod
240258
*/
241259
virtual std::vector<std::shared_ptr<CommandInterface>> on_export_command_interfaces()
242260
{
243-
std::vector<std::shared_ptr<CommandInterface>> command_interfaces =
261+
// import the unlisted interfaces
262+
std::vector<hardware_interface::InterfaceDescription> unlisted_interface_descriptions =
244263
export_command_interfaces_2();
245-
command_interfaces.reserve(joint_command_interfaces_.size());
264+
265+
std::vector<std::shared_ptr<CommandInterface>> command_interfaces;
266+
command_interfaces.reserve(
267+
unlisted_interface_descriptions.size() + joint_command_interfaces_.size());
268+
269+
// add InterfaceDescriptions and create the CommandInterfaces from the descriptions and add to
270+
// maps.
271+
for (const auto & description : unlisted_interface_descriptions)
272+
{
273+
auto name = description.get_name();
274+
unlisted_command_interfaces_.insert(std::make_pair(name, description));
275+
auto command_interface = std::make_shared<CommandInterface>(description);
276+
actuator_commands_.insert(std::make_pair(name, command_interface));
277+
command_interfaces.push_back(command_interface);
278+
}
246279

247280
for (const auto & [name, descr] : joint_command_interfaces_)
248281
{
@@ -358,10 +391,14 @@ class ActuatorInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNod
358391
std::unordered_map<std::string, InterfaceDescription> joint_state_interfaces_;
359392
std::unordered_map<std::string, InterfaceDescription> joint_command_interfaces_;
360393

361-
std::unordered_map<std::string, std::shared_ptr<StateInterface>> actuator_states_;
362-
std::unordered_map<std::string, std::shared_ptr<CommandInterface>> actuator_commands_;
394+
std::unordered_map<std::string, InterfaceDescription> unlisted_state_interfaces_;
395+
std::unordered_map<std::string, InterfaceDescription> unlisted_command_interfaces_;
363396

364397
rclcpp_lifecycle::State lifecycle_state_;
398+
399+
private:
400+
std::unordered_map<std::string, std::shared_ptr<StateInterface>> actuator_states_;
401+
std::unordered_map<std::string, std::shared_ptr<CommandInterface>> actuator_commands_;
365402
};
366403

367404
} // namespace hardware_interface

hardware_interface/include/hardware_interface/sensor_interface.hpp

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,13 +144,14 @@ class SensorInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNodeI
144144

145145
/**
146146
* Override this method to export custom StateInterfaces which are not defined in the URDF file.
147+
* Those interfaces will be added to the unlisted_state_interfaces_ map.
147148
*
148149
* Note method name is going to be changed to export_state_interfaces() as soon as the deprecated
149150
* version is removed.
150151
*
151-
* \return vector of shared pointers to the created and stored StateInterfaces
152+
* \return vector of descriptions to the unlisted StateInterfaces
152153
*/
153-
virtual std::vector<std::shared_ptr<StateInterface>> export_state_interfaces_2()
154+
virtual std::vector<hardware_interface::InterfaceDescription> export_state_interfaces_2()
154155
{
155156
// return empty vector by default.
156157
return {};
@@ -165,8 +166,24 @@ class SensorInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNodeI
165166
*/
166167
virtual std::vector<std::shared_ptr<StateInterface>> on_export_state_interfaces()
167168
{
168-
std::vector<std::shared_ptr<StateInterface>> state_interfaces = export_state_interfaces_2();
169-
state_interfaces.reserve(sensor_state_interfaces_.size());
169+
// import the unlisted interfaces
170+
std::vector<hardware_interface::InterfaceDescription> unlisted_interface_descriptions =
171+
export_state_interfaces_2();
172+
173+
std::vector<std::shared_ptr<StateInterface>> state_interfaces;
174+
state_interfaces.reserve(
175+
unlisted_interface_descriptions.size() + sensor_state_interfaces_.size());
176+
177+
// add InterfaceDescriptions and create the StateInterfaces from the descriptions and add to
178+
// maps.
179+
for (const auto & description : unlisted_interface_descriptions)
180+
{
181+
auto name = description.get_name();
182+
unlisted_state_interfaces_.insert(std::make_pair(name, description));
183+
auto state_interface = std::make_shared<StateInterface>(description);
184+
sensor_states_.insert(std::make_pair(name, state_interface));
185+
state_interfaces.push_back(state_interface);
186+
}
170187

171188
for (const auto & [name, descr] : sensor_state_interfaces_)
172189
{
@@ -224,10 +241,12 @@ class SensorInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNodeI
224241
HardwareInfo info_;
225242

226243
std::unordered_map<std::string, InterfaceDescription> sensor_state_interfaces_;
227-
228-
std::unordered_map<std::string, std::shared_ptr<StateInterface>> sensor_states_;
244+
std::unordered_map<std::string, InterfaceDescription> unlisted_state_interfaces_;
229245

230246
rclcpp_lifecycle::State lifecycle_state_;
247+
248+
private:
249+
std::unordered_map<std::string, std::shared_ptr<StateInterface>> sensor_states_;
231250
};
232251

233252
} // namespace hardware_interface

hardware_interface/include/hardware_interface/system_interface.hpp

Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -179,13 +179,14 @@ class SystemInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNodeI
179179

180180
/**
181181
* Override this method to export custom StateInterfaces which are not defined in the URDF file.
182+
* Those interfaces will be added to the unlisted_state_interfaces_ map.
182183
*
183184
* Note method name is going to be changed to export_state_interfaces() as soon as the deprecated
184185
* version is removed.
185186
*
186-
* \return vector of shared pointers to the created and stored StateInterfaces
187+
* \return vector of descriptions to the unlisted StateInterfaces
187188
*/
188-
virtual std::vector<std::shared_ptr<StateInterface>> export_state_interfaces_2()
189+
virtual std::vector<hardware_interface::InterfaceDescription> export_state_interfaces_2()
189190
{
190191
// return empty vector by default.
191192
return {};
@@ -200,10 +201,25 @@ class SystemInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNodeI
200201
*/
201202
std::vector<std::shared_ptr<StateInterface>> on_export_state_interfaces()
202203
{
203-
std::vector<std::shared_ptr<StateInterface>> state_interfaces = export_state_interfaces_2();
204+
// import the unlisted interfaces
205+
std::vector<hardware_interface::InterfaceDescription> unlisted_interface_descriptions =
206+
export_state_interfaces_2();
207+
208+
std::vector<std::shared_ptr<StateInterface>> state_interfaces;
204209
state_interfaces.reserve(
205-
joint_state_interfaces_.size() + sensor_state_interfaces_.size() +
206-
gpio_state_interfaces_.size());
210+
unlisted_interface_descriptions.size() + joint_state_interfaces_.size() +
211+
sensor_state_interfaces_.size() + gpio_state_interfaces_.size());
212+
213+
// add InterfaceDescriptions and create the StateInterfaces from the descriptions and add to
214+
// maps.
215+
for (const auto & description : unlisted_interface_descriptions)
216+
{
217+
auto name = description.get_name();
218+
unlisted_state_interfaces_.insert(std::make_pair(name, description));
219+
auto state_interface = std::make_shared<StateInterface>(description);
220+
system_states_.insert(std::make_pair(name, state_interface));
221+
state_interfaces.push_back(state_interface);
222+
}
207223

208224
for (const auto & [name, descr] : joint_state_interfaces_)
209225
{
@@ -252,13 +268,14 @@ class SystemInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNodeI
252268

253269
/**
254270
* Override this method to export custom CommandInterfaces which are not defined in the URDF file.
271+
* Those interfaces will be added to the unlisted_command_interfaces_ map.
255272
*
256273
* Note method name is going to be changed to export_command_interfaces() as soon as the
257274
* deprecated version is removed.
258275
*
259-
* \return vector of shared pointers to the created and stored StateInterfaces
276+
* \return vector of descriptions to the unlisted CommandInterfaces
260277
*/
261-
virtual std::vector<std::shared_ptr<CommandInterface>> export_command_interfaces_2()
278+
virtual std::vector<hardware_interface::InterfaceDescription> export_command_interfaces_2()
262279
{
263280
// return empty vector by default.
264281
return {};
@@ -273,9 +290,25 @@ class SystemInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNodeI
273290
*/
274291
std::vector<std::shared_ptr<CommandInterface>> on_export_command_interfaces()
275292
{
276-
std::vector<std::shared_ptr<CommandInterface>> command_interfaces =
293+
// import the unlisted interfaces
294+
std::vector<hardware_interface::InterfaceDescription> unlisted_interface_descriptions =
277295
export_command_interfaces_2();
278-
command_interfaces.reserve(joint_command_interfaces_.size() + gpio_command_interfaces_.size());
296+
297+
std::vector<std::shared_ptr<CommandInterface>> command_interfaces;
298+
command_interfaces.reserve(
299+
unlisted_interface_descriptions.size() + joint_command_interfaces_.size() +
300+
gpio_command_interfaces_.size());
301+
302+
// add InterfaceDescriptions and create the CommandInterfaces from the descriptions and add to
303+
// maps.
304+
for (const auto & description : unlisted_interface_descriptions)
305+
{
306+
auto name = description.get_name();
307+
unlisted_command_interfaces_.insert(std::make_pair(name, description));
308+
auto command_interface = std::make_shared<CommandInterface>(description);
309+
system_commands_.insert(std::make_pair(name, command_interface));
310+
command_interfaces.push_back(command_interface);
311+
}
279312

280313
for (const auto & [name, descr] : joint_command_interfaces_)
281314
{
@@ -403,10 +436,14 @@ class SystemInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNodeI
403436
std::unordered_map<std::string, InterfaceDescription> gpio_state_interfaces_;
404437
std::unordered_map<std::string, InterfaceDescription> gpio_command_interfaces_;
405438

406-
std::unordered_map<std::string, std::shared_ptr<StateInterface>> system_states_;
407-
std::unordered_map<std::string, std::shared_ptr<CommandInterface>> system_commands_;
439+
std::unordered_map<std::string, InterfaceDescription> unlisted_state_interfaces_;
440+
std::unordered_map<std::string, InterfaceDescription> unlisted_command_interfaces_;
408441

409442
rclcpp_lifecycle::State lifecycle_state_;
443+
444+
private:
445+
std::unordered_map<std::string, std::shared_ptr<StateInterface>> system_states_;
446+
std::unordered_map<std::string, std::shared_ptr<CommandInterface>> system_commands_;
410447
};
411448

412449
} // namespace hardware_interface

hardware_interface/src/component_parser.cpp

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -648,21 +648,4 @@ std::vector<InterfaceDescription> parse_command_interface_descriptions_from_hard
648648
return component_command_interface_descriptions;
649649
}
650650

651-
std::vector<InterfaceDescription> parse_gpio_command_interface_descriptions_from_hardware_info(
652-
const HardwareInfo & hw_info)
653-
{
654-
std::vector<InterfaceDescription> gpio_command_interface_descriptions;
655-
gpio_command_interface_descriptions.reserve(hw_info.gpios.size());
656-
657-
for (const auto & gpio : hw_info.gpios)
658-
{
659-
for (const auto & command_interface : gpio.command_interfaces)
660-
{
661-
gpio_command_interface_descriptions.emplace_back(
662-
InterfaceDescription(gpio.name, command_interface));
663-
}
664-
}
665-
return gpio_command_interface_descriptions;
666-
}
667-
668651
} // namespace hardware_interface

hardware_interface/test/test_component_interfaces_custom_export.cpp

Lines changed: 25 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -57,27 +57,23 @@ class DummyActuatorDefault : public hardware_interface::ActuatorInterface
5757
{
5858
std::string get_name() const override { return "DummyActuatorDefault"; }
5959

60-
std::vector<std::shared_ptr<hardware_interface::StateInterface>> export_state_interfaces_2()
61-
override
60+
std::vector<hardware_interface::InterfaceDescription> export_state_interfaces_2() override
6261
{
63-
std::vector<std::shared_ptr<hardware_interface::StateInterface>> interfaces;
64-
auto unlisted_state_interface = std::make_shared<hardware_interface::StateInterface>(
65-
info_.joints[0].name, "some_unlisted_interface", nullptr);
66-
actuator_states_.insert(
67-
std::make_pair(unlisted_state_interface->get_name(), unlisted_state_interface));
62+
std::vector<hardware_interface::InterfaceDescription> interfaces;
63+
hardware_interface::InterfaceInfo info;
64+
info.name = "some_unlisted_interface";
65+
hardware_interface::InterfaceDescription unlisted_state_interface(info_.joints[0].name, info);
6866
interfaces.push_back(unlisted_state_interface);
6967

7068
return interfaces;
7169
}
7270

73-
std::vector<std::shared_ptr<hardware_interface::CommandInterface>> export_command_interfaces_2()
74-
override
71+
std::vector<hardware_interface::InterfaceDescription> export_command_interfaces_2() override
7572
{
76-
std::vector<std::shared_ptr<hardware_interface::CommandInterface>> interfaces;
77-
auto unlisted_state_interface = std::make_shared<hardware_interface::CommandInterface>(
78-
info_.joints[0].name, "some_unlisted_interface", nullptr);
79-
actuator_commands_.insert(
80-
std::make_pair(unlisted_state_interface->get_name(), unlisted_state_interface));
73+
std::vector<hardware_interface::InterfaceDescription> interfaces;
74+
hardware_interface::InterfaceInfo info;
75+
info.name = "some_unlisted_interface";
76+
hardware_interface::InterfaceDescription unlisted_state_interface(info_.joints[0].name, info);
8177
interfaces.push_back(unlisted_state_interface);
8278

8379
return interfaces;
@@ -100,14 +96,12 @@ class DummySensorDefault : public hardware_interface::SensorInterface
10096
{
10197
std::string get_name() const override { return "DummySensorDefault"; }
10298

103-
std::vector<std::shared_ptr<hardware_interface::StateInterface>> export_state_interfaces_2()
104-
override
99+
std::vector<hardware_interface::InterfaceDescription> export_state_interfaces_2() override
105100
{
106-
std::vector<std::shared_ptr<hardware_interface::StateInterface>> interfaces;
107-
auto unlisted_state_interface = std::make_shared<hardware_interface::StateInterface>(
108-
info_.sensors[0].name, "some_unlisted_interface", nullptr);
109-
sensor_states_.insert(
110-
std::make_pair(unlisted_state_interface->get_name(), unlisted_state_interface));
101+
std::vector<hardware_interface::InterfaceDescription> interfaces;
102+
hardware_interface::InterfaceInfo info;
103+
info.name = "some_unlisted_interface";
104+
hardware_interface::InterfaceDescription unlisted_state_interface(info_.sensors[0].name, info);
111105
interfaces.push_back(unlisted_state_interface);
112106

113107
return interfaces;
@@ -124,27 +118,23 @@ class DummySystemDefault : public hardware_interface::SystemInterface
124118
{
125119
std::string get_name() const override { return "DummySystemDefault"; }
126120

127-
std::vector<std::shared_ptr<hardware_interface::StateInterface>> export_state_interfaces_2()
128-
override
121+
std::vector<hardware_interface::InterfaceDescription> export_state_interfaces_2() override
129122
{
130-
std::vector<std::shared_ptr<hardware_interface::StateInterface>> interfaces;
131-
auto unlisted_state_interface = std::make_shared<hardware_interface::StateInterface>(
132-
info_.joints[0].name, "some_unlisted_interface", nullptr);
133-
system_states_.insert(
134-
std::make_pair(unlisted_state_interface->get_name(), unlisted_state_interface));
123+
std::vector<hardware_interface::InterfaceDescription> interfaces;
124+
hardware_interface::InterfaceInfo info;
125+
info.name = "some_unlisted_interface";
126+
hardware_interface::InterfaceDescription unlisted_state_interface(info_.joints[0].name, info);
135127
interfaces.push_back(unlisted_state_interface);
136128

137129
return interfaces;
138130
}
139131

140-
std::vector<std::shared_ptr<hardware_interface::CommandInterface>> export_command_interfaces_2()
141-
override
132+
std::vector<hardware_interface::InterfaceDescription> export_command_interfaces_2() override
142133
{
143-
std::vector<std::shared_ptr<hardware_interface::CommandInterface>> interfaces;
144-
auto unlisted_state_interface = std::make_shared<hardware_interface::CommandInterface>(
145-
info_.joints[0].name, "some_unlisted_interface", nullptr);
146-
system_commands_.insert(
147-
std::make_pair(unlisted_state_interface->get_name(), unlisted_state_interface));
134+
std::vector<hardware_interface::InterfaceDescription> interfaces;
135+
hardware_interface::InterfaceInfo info;
136+
info.name = "some_unlisted_interface";
137+
hardware_interface::InterfaceDescription unlisted_state_interface(info_.joints[0].name, info);
148138
interfaces.push_back(unlisted_state_interface);
149139

150140
return interfaces;

0 commit comments

Comments
 (0)