Autostart parameter services (#478)

* Autostart parameter services
* Add bool start_parameter_services
This commit is contained in:
Shane Loretz 2018-05-25 13:07:59 -07:00 committed by GitHub
parent f9a78df9fe
commit d82ce9666c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 153 additions and 103 deletions

View file

@ -0,0 +1,58 @@
// Copyright 2018 Open Source Robotics Foundation, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef RCLCPP__CREATE_SERVICE_HPP_
#define RCLCPP__CREATE_SERVICE_HPP_
#include <memory>
#include <string>
#include <utility>
#include "rclcpp/node_interfaces/node_base_interface.hpp"
#include "rclcpp/node_interfaces/node_services_interface.hpp"
#include "rclcpp/visibility_control.hpp"
#include "rmw/rmw.h"
namespace rclcpp
{
/// Create a service with a given type.
/// \internal
template<typename ServiceT, typename CallbackT>
typename rclcpp::Service<ServiceT>::SharedPtr
create_service(
std::shared_ptr<node_interfaces::NodeBaseInterface> node_base,
std::shared_ptr<node_interfaces::NodeServicesInterface> node_services,
const std::string & service_name,
CallbackT && callback,
const rmw_qos_profile_t & qos_profile,
rclcpp::callback_group::CallbackGroup::SharedPtr group)
{
rclcpp::AnyServiceCallback<ServiceT> any_service_callback;
any_service_callback.set(std::forward<CallbackT>(callback));
rcl_service_options_t service_options = rcl_service_get_default_options();
service_options.qos = qos_profile;
auto serv = Service<ServiceT>::make_shared(
node_base->get_shared_rcl_node_handle(),
service_name, any_service_callback, service_options);
auto serv_base_ptr = std::dynamic_pointer_cast<ServiceBase>(serv);
node_services->add_service(serv_base_ptr, group);
return serv;
}
} // namespace rclcpp
#endif // RCLCPP__CREATE_SERVICE_HPP_

View file

@ -97,7 +97,8 @@ public:
rclcpp::Context::SharedPtr context, rclcpp::Context::SharedPtr context,
const std::vector<std::string> & arguments, const std::vector<std::string> & arguments,
bool use_global_arguments = true, bool use_global_arguments = true,
bool use_intra_process_comms = false); bool use_intra_process_comms = false,
bool start_parameter_services = true);
RCLCPP_PUBLIC RCLCPP_PUBLIC
virtual ~Node(); virtual ~Node();

View file

@ -39,6 +39,7 @@
#include "rclcpp/intra_process_manager.hpp" #include "rclcpp/intra_process_manager.hpp"
#include "rclcpp/parameter.hpp" #include "rclcpp/parameter.hpp"
#include "rclcpp/create_publisher.hpp" #include "rclcpp/create_publisher.hpp"
#include "rclcpp/create_service.hpp"
#include "rclcpp/create_subscription.hpp" #include "rclcpp/create_subscription.hpp"
#include "rclcpp/type_support_decl.hpp" #include "rclcpp/type_support_decl.hpp"
#include "rclcpp/visibility_control.hpp" #include "rclcpp/visibility_control.hpp"
@ -184,18 +185,9 @@ Node::create_service(
const rmw_qos_profile_t & qos_profile, const rmw_qos_profile_t & qos_profile,
rclcpp::callback_group::CallbackGroup::SharedPtr group) rclcpp::callback_group::CallbackGroup::SharedPtr group)
{ {
rclcpp::AnyServiceCallback<ServiceT> any_service_callback; return rclcpp::create_service<ServiceT, CallbackT>(
any_service_callback.set(std::forward<CallbackT>(callback)); node_base_, node_services_,
service_name, std::forward<CallbackT>(callback), qos_profile, group);
rcl_service_options_t service_options = rcl_service_get_default_options();
service_options.qos = qos_profile;
auto serv = Service<ServiceT>::make_shared(
node_base_->get_shared_rcl_node_handle(),
service_name, any_service_callback, service_options);
auto serv_base_ptr = std::dynamic_pointer_cast<ServiceBase>(serv);
node_services_->add_service(serv_base_ptr, group);
return serv;
} }
template<typename CallbackT> template<typename CallbackT>

View file

@ -16,6 +16,7 @@
#define RCLCPP__NODE_INTERFACES__NODE_PARAMETERS_HPP_ #define RCLCPP__NODE_INTERFACES__NODE_PARAMETERS_HPP_
#include <map> #include <map>
#include <memory>
#include <string> #include <string>
#include <vector> #include <vector>
@ -30,6 +31,7 @@
#include "rclcpp/node_interfaces/node_services_interface.hpp" #include "rclcpp/node_interfaces/node_services_interface.hpp"
#include "rclcpp/node_interfaces/node_topics_interface.hpp" #include "rclcpp/node_interfaces/node_topics_interface.hpp"
#include "rclcpp/parameter.hpp" #include "rclcpp/parameter.hpp"
#include "rclcpp/parameter_service.hpp"
#include "rclcpp/publisher.hpp" #include "rclcpp/publisher.hpp"
#include "rclcpp/visibility_control.hpp" #include "rclcpp/visibility_control.hpp"
@ -46,8 +48,11 @@ public:
RCLCPP_PUBLIC RCLCPP_PUBLIC
NodeParameters( NodeParameters(
rclcpp::node_interfaces::NodeTopicsInterface * node_topics, const node_interfaces::NodeBaseInterface::SharedPtr node_base,
bool use_intra_process); const node_interfaces::NodeTopicsInterface::SharedPtr node_topics,
const node_interfaces::NodeServicesInterface::SharedPtr node_services,
bool use_intra_process,
bool start_parameter_services);
RCLCPP_PUBLIC RCLCPP_PUBLIC
virtual virtual
@ -105,8 +110,6 @@ public:
private: private:
RCLCPP_DISABLE_COPY(NodeParameters) RCLCPP_DISABLE_COPY(NodeParameters)
rclcpp::node_interfaces::NodeTopicsInterface * node_topics_;
mutable std::mutex mutex_; mutable std::mutex mutex_;
ParametersCallbackFunction parameters_callback_ = nullptr; ParametersCallbackFunction parameters_callback_ = nullptr;
@ -114,6 +117,8 @@ private:
std::map<std::string, rclcpp::parameter::ParameterVariant> parameters_; std::map<std::string, rclcpp::parameter::ParameterVariant> parameters_;
Publisher<rcl_interfaces::msg::ParameterEvent>::SharedPtr events_publisher_; Publisher<rcl_interfaces::msg::ParameterEvent>::SharedPtr events_publisher_;
std::shared_ptr<ParameterService> parameter_service_;
}; };
} // namespace node_interfaces } // namespace node_interfaces

View file

@ -15,6 +15,7 @@
#ifndef RCLCPP__PARAMETER_SERVICE_HPP_ #ifndef RCLCPP__PARAMETER_SERVICE_HPP_
#define RCLCPP__PARAMETER_SERVICE_HPP_ #define RCLCPP__PARAMETER_SERVICE_HPP_
#include <memory>
#include <string> #include <string>
#include "rcl_interfaces/srv/describe_parameters.hpp" #include "rcl_interfaces/srv/describe_parameters.hpp"
@ -40,11 +41,12 @@ public:
RCLCPP_PUBLIC RCLCPP_PUBLIC
explicit ParameterService( explicit ParameterService(
const rclcpp::Node::SharedPtr node, const std::shared_ptr<node_interfaces::NodeBaseInterface> node_base,
const std::shared_ptr<node_interfaces::NodeServicesInterface> node_services,
node_interfaces::NodeParametersInterface * node_params,
const rmw_qos_profile_t & qos_profile = rmw_qos_profile_parameters); const rmw_qos_profile_t & qos_profile = rmw_qos_profile_parameters);
private: private:
const rclcpp::Node::SharedPtr node_;
rclcpp::Service<rcl_interfaces::srv::GetParameters>::SharedPtr get_parameters_service_; rclcpp::Service<rcl_interfaces::srv::GetParameters>::SharedPtr get_parameters_service_;
rclcpp::Service<rcl_interfaces::srv::GetParameterTypes>::SharedPtr rclcpp::Service<rcl_interfaces::srv::GetParameterTypes>::SharedPtr
get_parameter_types_service_; get_parameter_types_service_;

View file

@ -45,7 +45,8 @@ Node::Node(
rclcpp::contexts::default_context::get_global_default_context(), rclcpp::contexts::default_context::get_global_default_context(),
{}, {},
true, true,
use_intra_process_comms) use_intra_process_comms,
true)
{} {}
Node::Node( Node::Node(
@ -54,7 +55,8 @@ Node::Node(
rclcpp::Context::SharedPtr context, rclcpp::Context::SharedPtr context,
const std::vector<std::string> & arguments, const std::vector<std::string> & arguments,
bool use_global_arguments, bool use_global_arguments,
bool use_intra_process_comms) bool use_intra_process_comms,
bool start_parameter_services)
: node_base_(new rclcpp::node_interfaces::NodeBase( : node_base_(new rclcpp::node_interfaces::NodeBase(
node_name, namespace_, context, arguments, use_global_arguments)), node_name, namespace_, context, arguments, use_global_arguments)),
node_graph_(new rclcpp::node_interfaces::NodeGraph(node_base_.get())), node_graph_(new rclcpp::node_interfaces::NodeGraph(node_base_.get())),
@ -63,8 +65,11 @@ Node::Node(
node_topics_(new rclcpp::node_interfaces::NodeTopics(node_base_.get())), node_topics_(new rclcpp::node_interfaces::NodeTopics(node_base_.get())),
node_services_(new rclcpp::node_interfaces::NodeServices(node_base_.get())), node_services_(new rclcpp::node_interfaces::NodeServices(node_base_.get())),
node_parameters_(new rclcpp::node_interfaces::NodeParameters( node_parameters_(new rclcpp::node_interfaces::NodeParameters(
node_topics_.get(), node_base_,
use_intra_process_comms node_topics_,
node_services_,
use_intra_process_comms,
start_parameter_services
)), )),
node_clock_(new rclcpp::node_interfaces::NodeClock( node_clock_(new rclcpp::node_interfaces::NodeClock(
node_base_, node_base_,

View file

@ -28,9 +28,11 @@
using rclcpp::node_interfaces::NodeParameters; using rclcpp::node_interfaces::NodeParameters;
NodeParameters::NodeParameters( NodeParameters::NodeParameters(
rclcpp::node_interfaces::NodeTopicsInterface * node_topics, const rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_base,
bool use_intra_process) const rclcpp::node_interfaces::NodeTopicsInterface::SharedPtr node_topics,
: node_topics_(node_topics) const rclcpp::node_interfaces::NodeServicesInterface::SharedPtr node_services,
bool use_intra_process,
bool start_parameter_services)
{ {
using MessageT = rcl_interfaces::msg::ParameterEvent; using MessageT = rcl_interfaces::msg::ParameterEvent;
using PublisherT = rclcpp::Publisher<MessageT>; using PublisherT = rclcpp::Publisher<MessageT>;
@ -38,8 +40,12 @@ NodeParameters::NodeParameters(
// TODO(wjwwood): expose this allocator through the Parameter interface. // TODO(wjwwood): expose this allocator through the Parameter interface.
auto allocator = std::make_shared<AllocatorT>(); auto allocator = std::make_shared<AllocatorT>();
if (start_parameter_services) {
parameter_service_ = std::make_shared<ParameterService>(node_base, node_services, this);
}
events_publisher_ = rclcpp::create_publisher<MessageT, AllocatorT, PublisherT>( events_publisher_ = rclcpp::create_publisher<MessageT, AllocatorT, PublisherT>(
node_topics_, node_topics.get(),
"parameter_events", "parameter_events",
rmw_qos_profile_parameter_events, rmw_qos_profile_parameter_events,
use_intra_process, use_intra_process,

View file

@ -24,120 +24,103 @@
using rclcpp::ParameterService; using rclcpp::ParameterService;
ParameterService::ParameterService( ParameterService::ParameterService(
const rclcpp::Node::SharedPtr node, const std::shared_ptr<rclcpp::node_interfaces::NodeBaseInterface> node_base,
const std::shared_ptr<rclcpp::node_interfaces::NodeServicesInterface> node_services,
rclcpp::node_interfaces::NodeParametersInterface * node_params,
const rmw_qos_profile_t & qos_profile) const rmw_qos_profile_t & qos_profile)
: node_(node)
{ {
std::weak_ptr<rclcpp::Node> captured_node = node_; const std::string node_name = node_base->get_name();
get_parameters_service_ = node_->create_service<rcl_interfaces::srv::GetParameters>(
std::string(node_->get_name()) + "/" + parameter_service_names::get_parameters, get_parameters_service_ = create_service<rcl_interfaces::srv::GetParameters>(
[captured_node]( node_base, node_services,
node_name + "/" + parameter_service_names::get_parameters,
[node_params](
const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rmw_request_id_t>,
const std::shared_ptr<rcl_interfaces::srv::GetParameters::Request> request, const std::shared_ptr<rcl_interfaces::srv::GetParameters::Request> request,
std::shared_ptr<rcl_interfaces::srv::GetParameters::Response> response) std::shared_ptr<rcl_interfaces::srv::GetParameters::Response> response)
{ {
auto node = captured_node.lock(); auto values = node_params->get_parameters(request->names);
if (!node) {
return;
}
auto values = node->get_parameters(request->names);
for (auto & pvariant : values) { for (auto & pvariant : values) {
response->values.push_back(pvariant.get_parameter_value()); response->values.push_back(pvariant.get_parameter_value());
} }
}, },
qos_profile); qos_profile, nullptr);
get_parameter_types_service_ = node_->create_service<rcl_interfaces::srv::GetParameterTypes>( get_parameter_types_service_ = create_service<rcl_interfaces::srv::GetParameterTypes>(
std::string(node_->get_name()) + "/" + parameter_service_names::get_parameter_types, node_base, node_services,
[captured_node]( node_name + "/" + parameter_service_names::get_parameter_types,
[node_params](
const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rmw_request_id_t>,
const std::shared_ptr<rcl_interfaces::srv::GetParameterTypes::Request> request, const std::shared_ptr<rcl_interfaces::srv::GetParameterTypes::Request> request,
std::shared_ptr<rcl_interfaces::srv::GetParameterTypes::Response> response) std::shared_ptr<rcl_interfaces::srv::GetParameterTypes::Response> response)
{ {
auto node = captured_node.lock(); auto types = node_params->get_parameter_types(request->names);
if (!node) {
return;
}
auto types = node->get_parameter_types(request->names);
std::transform(types.cbegin(), types.cend(), std::transform(types.cbegin(), types.cend(),
std::back_inserter(response->types), [](const uint8_t & type) { std::back_inserter(response->types), [](const uint8_t & type) {
return static_cast<rclcpp::parameter::ParameterType>(type); return static_cast<rclcpp::parameter::ParameterType>(type);
}); });
}, },
qos_profile); qos_profile, nullptr);
set_parameters_service_ = node_->create_service<rcl_interfaces::srv::SetParameters>( set_parameters_service_ = create_service<rcl_interfaces::srv::SetParameters>(
std::string(node_->get_name()) + "/" + parameter_service_names::set_parameters, node_base, node_services,
[captured_node]( node_name + "/" + parameter_service_names::set_parameters,
[node_params](
const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rmw_request_id_t>,
const std::shared_ptr<rcl_interfaces::srv::SetParameters::Request> request, const std::shared_ptr<rcl_interfaces::srv::SetParameters::Request> request,
std::shared_ptr<rcl_interfaces::srv::SetParameters::Response> response) std::shared_ptr<rcl_interfaces::srv::SetParameters::Response> response)
{ {
auto node = captured_node.lock();
if (!node) {
return;
}
std::vector<rclcpp::parameter::ParameterVariant> pvariants; std::vector<rclcpp::parameter::ParameterVariant> pvariants;
for (auto & p : request->parameters) { for (auto & p : request->parameters) {
pvariants.push_back(rclcpp::parameter::ParameterVariant::from_parameter(p)); pvariants.push_back(rclcpp::parameter::ParameterVariant::from_parameter(p));
} }
auto results = node->set_parameters(pvariants); auto results = node_params->set_parameters(pvariants);
response->results = results; response->results = results;
}, },
qos_profile); qos_profile, nullptr);
set_parameters_atomically_service_ = set_parameters_atomically_service_ = create_service<rcl_interfaces::srv::SetParametersAtomically>(
node_->create_service<rcl_interfaces::srv::SetParametersAtomically>( node_base, node_services,
std::string(node_->get_name()) + "/" + parameter_service_names::set_parameters_atomically, node_name + "/" + parameter_service_names::set_parameters_atomically,
[captured_node]( [node_params](
const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rmw_request_id_t>,
const std::shared_ptr<rcl_interfaces::srv::SetParametersAtomically::Request> request, const std::shared_ptr<rcl_interfaces::srv::SetParametersAtomically::Request> request,
std::shared_ptr<rcl_interfaces::srv::SetParametersAtomically::Response> response) std::shared_ptr<rcl_interfaces::srv::SetParametersAtomically::Response> response)
{ {
auto node = captured_node.lock();
if (!node) {
return;
}
std::vector<rclcpp::parameter::ParameterVariant> pvariants; std::vector<rclcpp::parameter::ParameterVariant> pvariants;
std::transform(request->parameters.cbegin(), request->parameters.cend(), std::transform(request->parameters.cbegin(), request->parameters.cend(),
std::back_inserter(pvariants), std::back_inserter(pvariants),
[](const rcl_interfaces::msg::Parameter & p) { [](const rcl_interfaces::msg::Parameter & p) {
return rclcpp::parameter::ParameterVariant::from_parameter(p); return rclcpp::parameter::ParameterVariant::from_parameter(p);
}); });
auto result = node->set_parameters_atomically(pvariants); auto result = node_params->set_parameters_atomically(pvariants);
response->result = result; response->result = result;
}, },
qos_profile); qos_profile, nullptr);
describe_parameters_service_ = node_->create_service<rcl_interfaces::srv::DescribeParameters>( describe_parameters_service_ = create_service<rcl_interfaces::srv::DescribeParameters>(
std::string(node_->get_name()) + "/" + parameter_service_names::describe_parameters, node_base, node_services,
[captured_node]( node_name + "/" + parameter_service_names::describe_parameters,
[node_params](
const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rmw_request_id_t>,
const std::shared_ptr<rcl_interfaces::srv::DescribeParameters::Request> request, const std::shared_ptr<rcl_interfaces::srv::DescribeParameters::Request> request,
std::shared_ptr<rcl_interfaces::srv::DescribeParameters::Response> response) std::shared_ptr<rcl_interfaces::srv::DescribeParameters::Response> response)
{ {
auto node = captured_node.lock(); auto descriptors = node_params->describe_parameters(request->names);
if (!node) {
return;
}
auto descriptors = node->describe_parameters(request->names);
response->descriptors = descriptors; response->descriptors = descriptors;
}, },
qos_profile); qos_profile, nullptr);
list_parameters_service_ = node_->create_service<rcl_interfaces::srv::ListParameters>( list_parameters_service_ = create_service<rcl_interfaces::srv::ListParameters>(
std::string(node_->get_name()) + "/" + parameter_service_names::list_parameters, node_base, node_services,
[captured_node]( node_name + "/" + parameter_service_names::list_parameters,
[node_params](
const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rmw_request_id_t>,
const std::shared_ptr<rcl_interfaces::srv::ListParameters::Request> request, const std::shared_ptr<rcl_interfaces::srv::ListParameters::Request> request,
std::shared_ptr<rcl_interfaces::srv::ListParameters::Response> response) std::shared_ptr<rcl_interfaces::srv::ListParameters::Response> response)
{ {
auto node = captured_node.lock(); auto result = node_params->list_parameters(request->prefixes, request->depth);
if (!node) {
return;
}
auto result = node->list_parameters(request->prefixes, request->depth);
response->result = result; response->result = result;
}, },
qos_profile); qos_profile, nullptr);
} }

View file

@ -334,7 +334,6 @@ TEST_F(TestTimeSource, parameter_activation) {
ts.attachClock(ros_clock); ts.attachClock(ros_clock);
EXPECT_FALSE(ros_clock->ros_time_is_active()); EXPECT_FALSE(ros_clock->ros_time_is_active());
auto parameter_service = std::make_shared<rclcpp::ParameterService>(node);
auto parameters_client = std::make_shared<rclcpp::SyncParametersClient>(node); auto parameters_client = std::make_shared<rclcpp::SyncParametersClient>(node);
using namespace std::chrono_literals; using namespace std::chrono_literals;

View file

@ -101,7 +101,8 @@ public:
rclcpp::Context::SharedPtr context, rclcpp::Context::SharedPtr context,
const std::vector<std::string> & arguments, const std::vector<std::string> & arguments,
bool use_global_arguments = true, bool use_global_arguments = true,
bool use_intra_process_comms = false); bool use_intra_process_comms = false,
bool start_parameter_services = true);
RCLCPP_LIFECYCLE_PUBLIC RCLCPP_LIFECYCLE_PUBLIC
virtual ~LifecycleNode(); virtual ~LifecycleNode();

View file

@ -23,6 +23,7 @@
#include "rclcpp/intra_process_manager.hpp" #include "rclcpp/intra_process_manager.hpp"
#include "rclcpp/parameter.hpp" #include "rclcpp/parameter.hpp"
#include "rclcpp/create_publisher.hpp" #include "rclcpp/create_publisher.hpp"
#include "rclcpp/create_service.hpp"
#include "rclcpp/create_subscription.hpp" #include "rclcpp/create_subscription.hpp"
#include "rclcpp/type_support_decl.hpp" #include "rclcpp/type_support_decl.hpp"
@ -176,18 +177,9 @@ LifecycleNode::create_service(
const rmw_qos_profile_t & qos_profile, const rmw_qos_profile_t & qos_profile,
rclcpp::callback_group::CallbackGroup::SharedPtr group) rclcpp::callback_group::CallbackGroup::SharedPtr group)
{ {
rclcpp::AnyServiceCallback<ServiceT> any_service_callback; return rclcpp::create_service<ServiceT, CallbackT>(
any_service_callback.set(std::forward<CallbackT>(callback)); node_base_, node_services_,
service_name, std::forward<CallbackT>(callback), qos_profile, group);
rcl_service_options_t service_options = rcl_service_get_default_options();
service_options.qos = qos_profile;
auto serv = rclcpp::Service<ServiceT>::make_shared(
node_base_->get_shared_rcl_node_handle(),
service_name, any_service_callback, service_options);
auto serv_base_ptr = std::dynamic_pointer_cast<rclcpp::ServiceBase>(serv);
node_services_->add_service(serv_base_ptr, group);
return serv;
} }
template<typename ParameterT> template<typename ParameterT>

View file

@ -35,6 +35,7 @@
#include "rclcpp/node_interfaces/node_services.hpp" #include "rclcpp/node_interfaces/node_services.hpp"
#include "rclcpp/node_interfaces/node_timers.hpp" #include "rclcpp/node_interfaces/node_timers.hpp"
#include "rclcpp/node_interfaces/node_topics.hpp" #include "rclcpp/node_interfaces/node_topics.hpp"
#include "rclcpp/parameter_service.hpp"
#include "lifecycle_node_interface_impl.hpp" // implementation #include "lifecycle_node_interface_impl.hpp" // implementation
@ -51,7 +52,8 @@ LifecycleNode::LifecycleNode(
rclcpp::contexts::default_context::get_global_default_context(), rclcpp::contexts::default_context::get_global_default_context(),
{}, {},
true, true,
use_intra_process_comms) use_intra_process_comms,
true)
{} {}
LifecycleNode::LifecycleNode( LifecycleNode::LifecycleNode(
@ -60,7 +62,8 @@ LifecycleNode::LifecycleNode(
rclcpp::Context::SharedPtr context, rclcpp::Context::SharedPtr context,
const std::vector<std::string> & arguments, const std::vector<std::string> & arguments,
bool use_global_arguments, bool use_global_arguments,
bool use_intra_process_comms) bool use_intra_process_comms,
bool start_parameter_services)
: node_base_(new rclcpp::node_interfaces::NodeBase( : node_base_(new rclcpp::node_interfaces::NodeBase(
node_name, namespace_, context, arguments, use_global_arguments)), node_name, namespace_, context, arguments, use_global_arguments)),
node_graph_(new rclcpp::node_interfaces::NodeGraph(node_base_.get())), node_graph_(new rclcpp::node_interfaces::NodeGraph(node_base_.get())),
@ -69,8 +72,11 @@ LifecycleNode::LifecycleNode(
node_topics_(new rclcpp::node_interfaces::NodeTopics(node_base_.get())), node_topics_(new rclcpp::node_interfaces::NodeTopics(node_base_.get())),
node_services_(new rclcpp::node_interfaces::NodeServices(node_base_.get())), node_services_(new rclcpp::node_interfaces::NodeServices(node_base_.get())),
node_parameters_(new rclcpp::node_interfaces::NodeParameters( node_parameters_(new rclcpp::node_interfaces::NodeParameters(
node_topics_.get(), node_base_,
use_intra_process_comms node_topics_,
node_services_,
use_intra_process_comms,
start_parameter_services
)), )),
node_clock_(new rclcpp::node_interfaces::NodeClock( node_clock_(new rclcpp::node_interfaces::NodeClock(
node_base_, node_base_,