Skip to content

Commit f28a4eb

Browse files
Add SetNodeOptions function
Signed-off-by: Rebecca Butler <[email protected]>
1 parent 9f7cedc commit f28a4eb

File tree

2 files changed

+40
-51
lines changed

2 files changed

+40
-51
lines changed

rclcpp_components/include/rclcpp_components/component_manager.hpp

Lines changed: 14 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,20 @@ class ComponentManager : public rclcpp::Node
131131
create_component_factory(const ComponentResource & resource);
132132

133133
protected:
134+
/// Set node options for componenet
135+
/*
136+
* \param parameters node parameters
137+
* \param remap_rules node remap rules
138+
* \param request information with the node to load
139+
* \return node options
140+
*/
141+
RCLCPP_COMPONENTS_PUBLIC
142+
virtual rclcpp::NodeOptions
143+
SetNodeOptions(
144+
std::vector<rclcpp::Parameter> parameters,
145+
std::vector<std::string> remap_rules,
146+
const std::shared_ptr<LoadNode::Request> request);
147+
134148
/// Service callback to load a new node in the component
135149
/*
136150
* This function allows to add parameters, remap rules, a specific node, name a namespace
@@ -180,41 +194,6 @@ class ComponentManager : public rclcpp::Node
180194
const std::shared_ptr<ListNodes::Request> request,
181195
std::shared_ptr<ListNodes::Response> response);
182196

183-
RCLCPP_COMPONENTS_PUBLIC
184-
const std::weak_ptr<rclcpp::Executor>
185-
GetExecutor() const
186-
{
187-
return executor_;
188-
}
189-
190-
RCLCPP_COMPONENTS_PUBLIC
191-
uint64_t
192-
GetUniqueId()
193-
{
194-
return unique_id_;
195-
}
196-
197-
RCLCPP_COMPONENTS_PUBLIC
198-
void
199-
SetUniqueId(uint64_t id)
200-
{
201-
unique_id_ = id;
202-
}
203-
204-
RCLCPP_COMPONENTS_PUBLIC
205-
rclcpp_components::NodeInstanceWrapper
206-
GetNodeWrapper(uint64_t node_id)
207-
{
208-
return node_wrappers_[node_id];
209-
}
210-
211-
RCLCPP_COMPONENTS_PUBLIC
212-
void
213-
SetNodeWrapper(uint64_t node_id, rclcpp_components::NodeInstanceWrapper node_wrapper)
214-
{
215-
node_wrappers_[node_id] = node_wrapper;
216-
}
217-
218197
private:
219198
std::weak_ptr<rclcpp::Executor> executor_;
220199

rclcpp_components/src/component_manager.cpp

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,31 @@ ComponentManager::create_component_factory(const ComponentResource & resource)
121121
return {};
122122
}
123123

124+
rclcpp::NodeOptions
125+
ComponentManager::SetNodeOptions(
126+
std::vector<rclcpp::Parameter> parameters,
127+
std::vector<std::string> remap_rules,
128+
const std::shared_ptr<LoadNode::Request> request)
129+
{
130+
auto options = rclcpp::NodeOptions()
131+
.use_global_arguments(false)
132+
.parameter_overrides(parameters)
133+
.arguments(remap_rules);
134+
135+
for (const auto & a : request->extra_arguments) {
136+
const rclcpp::Parameter extra_argument = rclcpp::Parameter::from_parameter_msg(a);
137+
if (extra_argument.get_name() == "use_intra_process_comms") {
138+
if (extra_argument.get_type() != rclcpp::ParameterType::PARAMETER_BOOL) {
139+
throw ComponentManagerException(
140+
"Extra component argument 'use_intra_process_comms' must be a boolean");
141+
}
142+
options.use_intra_process_comms(extra_argument.get_value<bool>());
143+
}
144+
}
145+
146+
return options;
147+
}
148+
124149
void
125150
ComponentManager::OnLoadNode(
126151
const std::shared_ptr<rmw_request_id_t> request_header,
@@ -165,22 +190,7 @@ ComponentManager::OnLoadNode(
165190
remap_rules.push_back("__ns:=" + request->node_namespace);
166191
}
167192

168-
auto options = rclcpp::NodeOptions()
169-
.use_global_arguments(false)
170-
.parameter_overrides(parameters)
171-
.arguments(remap_rules);
172-
173-
for (const auto & a : request->extra_arguments) {
174-
const rclcpp::Parameter extra_argument = rclcpp::Parameter::from_parameter_msg(a);
175-
if (extra_argument.get_name() == "use_intra_process_comms") {
176-
if (extra_argument.get_type() != rclcpp::ParameterType::PARAMETER_BOOL) {
177-
throw ComponentManagerException(
178-
"Extra component argument 'use_intra_process_comms' must be a boolean");
179-
}
180-
options.use_intra_process_comms(extra_argument.get_value<bool>());
181-
}
182-
}
183-
193+
auto options = SetNodeOptions(parameters, remap_rules, request);
184194
auto node_id = unique_id_++;
185195

186196
if (0 == node_id) {

0 commit comments

Comments
 (0)