Skip to content

Commit 63a80d8

Browse files
authored
Support lifecycle (#180)
Signed-off-by: Alejandro Hernandez Cordero <[email protected]>
1 parent e06f866 commit 63a80d8

File tree

14 files changed

+148
-107
lines changed

14 files changed

+148
-107
lines changed

compressed_depth_image_transport/include/compressed_depth_image_transport/compressed_depth_publisher.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636

3737
#include <sensor_msgs/msg/image.hpp>
3838
#include <sensor_msgs/msg/compressed_image.hpp>
39+
#include <image_transport/node_interfaces.hpp>
3940
#include <image_transport/simple_publisher_plugin.hpp>
4041

4142
#include <rclcpp/node.hpp>
@@ -63,7 +64,7 @@ class CompressedDepthPublisher : public image_transport::SimplePublisherPlugin<C
6364
protected:
6465
// Overridden to set up reconfigure server
6566
void advertiseImpl(
66-
rclcpp::Node * node,
67+
image_transport::RequiredInterfaces node_interfaces,
6768
const std::string & base_topic,
6869
rclcpp::QoS custom_qos,
6970
rclcpp::PublisherOptions options) final;
@@ -73,7 +74,8 @@ class CompressedDepthPublisher : public image_transport::SimplePublisherPlugin<C
7374
const PublisherT & publisher) const final;
7475

7576
rclcpp::Logger logger_;
76-
rclcpp::Node * node_;
77+
rclcpp::node_interfaces::NodeParametersInterface::SharedPtr node_param_interface_;
78+
rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_base_interface_;
7779

7880
private:
7981
std::vector<std::string> parameters_;

compressed_depth_image_transport/src/compressed_depth_publisher.cpp

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -103,26 +103,26 @@ const struct ParameterDefinition kParameters[] =
103103
};
104104

105105
void CompressedDepthPublisher::advertiseImpl(
106-
rclcpp::Node * node,
106+
image_transport::RequiredInterfaces node_interfaces,
107107
const std::string & base_topic,
108108
rclcpp::QoS custom_qos,
109109
rclcpp::PublisherOptions options)
110110
{
111-
node_ = node;
112-
111+
node_param_interface_ = node_interfaces.get_node_parameters_interface();
112+
node_base_interface_ = node_interfaces.get_node_base_interface();
113113
typedef image_transport::SimplePublisherPlugin<sensor_msgs::msg::CompressedImage> Base;
114-
Base::advertiseImpl(node, base_topic, custom_qos, options);
114+
Base::advertiseImpl(node_interfaces, base_topic, custom_qos, options);
115115

116116
// Declare Parameters
117-
uint ns_len = node->get_effective_namespace().length();
118-
uint ns_prefix_len = ns_len > 1 ? ns_len + 1 : ns_len;
119-
std::string param_base_name = base_topic.substr(ns_prefix_len);
117+
unsigned int ns_len =
118+
std::string(node_interfaces.get_node_base_interface()->get_namespace()).length();
119+
std::string param_base_name = base_topic.substr(ns_len);
120120
std::replace(param_base_name.begin(), param_base_name.end(), '/', '.');
121121

122122
if (ns_len > 1) {
123123
// Add pre set parameter callback to handle deprecated parameters
124124
pre_set_parameter_callback_handle_ =
125-
node->add_pre_set_parameters_callback(std::bind(
125+
node_param_interface_->add_pre_set_parameters_callback(std::bind(
126126
&CompressedDepthPublisher::preSetParametersCallback, this, std::placeholders::_1));
127127
}
128128

@@ -136,11 +136,14 @@ void CompressedDepthPublisher::publish(
136136
const PublisherT & publisher) const
137137
{
138138
// Fresh Configuration
139-
std::string cfg_format = node_->get_parameter(parameters_[FORMAT]).get_value<std::string>();
140-
double cfg_depth_max = node_->get_parameter(parameters_[DEPTH_MAX]).get_value<double>();
139+
std::string cfg_format = node_param_interface_->get_parameter(
140+
parameters_[FORMAT]).get_value<std::string>();
141+
double cfg_depth_max = node_param_interface_->get_parameter(
142+
parameters_[DEPTH_MAX]).get_value<double>();
141143
double cfg_depth_quantization =
142-
node_->get_parameter(parameters_[DEPTH_QUANTIZATION]).get_value<double>();
143-
int cfg_png_level = node_->get_parameter(parameters_[PNG_LEVEL]).get_value<int64_t>();
144+
node_param_interface_->get_parameter(parameters_[DEPTH_QUANTIZATION]).get_value<double>();
145+
int cfg_png_level = node_param_interface_->get_parameter(
146+
parameters_[PNG_LEVEL]).get_value<int64_t>();
144147

145148
sensor_msgs::msg::CompressedImage::SharedPtr compressed_image =
146149
encodeCompressedDepthImage(message,
@@ -166,22 +169,25 @@ void CompressedDepthPublisher::declareParameter(
166169
rclcpp::ParameterValue param_value;
167170

168171
try {
169-
param_value = node_->declare_parameter(param_name, definition.defaultValue,
170-
definition.descriptor);
172+
param_value = node_param_interface_->declare_parameter(
173+
param_name,
174+
definition.defaultValue,
175+
definition.descriptor);
171176
} catch (const rclcpp::exceptions::ParameterAlreadyDeclaredException &) {
172177
RCLCPP_DEBUG(logger_, "%s was previously declared", definition.descriptor.name.c_str());
173-
param_value = node_->get_parameter(param_name).get_parameter_value();
178+
param_value = node_param_interface_->get_parameter(param_name).get_parameter_value();
174179
}
175180

176181
// TODO(anyone): Remove deprecated parameters after Lyrical release
177-
if (node_->get_effective_namespace().length() > 1) {
182+
if (std::string(node_base_interface_->get_namespace()).length() > 1) {
178183
// deprecated parameters starting with the dot character (e.g. .image_raw.compressed.format)
179184
const std::string deprecated_dot_name = "." + base_name + "." + transport_name + "." +
180185
definition.descriptor.name;
181186
deprecated_parameters_.insert(deprecated_dot_name);
182187

183188
try {
184-
node_->declare_parameter(deprecated_dot_name, param_value, definition.descriptor);
189+
node_param_interface_->declare_parameter(deprecated_dot_name, param_value,
190+
definition.descriptor);
185191
} catch (const rclcpp::exceptions::ParameterAlreadyDeclaredException &) {
186192
RCLCPP_DEBUG(logger_, "%s was previously declared", definition.descriptor.name.c_str());
187193
}

compressed_image_transport/include/compressed_image_transport/compressed_publisher.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636

3737
#include <sensor_msgs/msg/image.hpp>
3838
#include <sensor_msgs/msg/compressed_image.hpp>
39+
#include <image_transport/node_interfaces.hpp>
3940
#include <image_transport/simple_publisher_plugin.hpp>
4041

4142
#include <rclcpp/node.hpp>
@@ -63,9 +64,8 @@ class CompressedPublisher : public image_transport::SimplePublisherPlugin<Compre
6364
}
6465

6566
protected:
66-
// Overridden to set up reconfigure server
6767
void advertiseImpl(
68-
rclcpp::Node * node,
68+
image_transport::RequiredInterfaces node_interfaces,
6969
const std::string & base_topic,
7070
rclcpp::QoS custom_qos,
7171
rclcpp::PublisherOptions options) override;
@@ -75,7 +75,8 @@ class CompressedPublisher : public image_transport::SimplePublisherPlugin<Compre
7575
const PublisherT & publisher) const override;
7676

7777
rclcpp::Logger logger_;
78-
rclcpp::Node * node_;
78+
rclcpp::node_interfaces::NodeParametersInterface::SharedPtr node_param_interface_;
79+
rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_base_interface_;
7980

8081
private:
8182
std::vector<std::string> parameters_;

compressed_image_transport/include/compressed_image_transport/compressed_subscriber.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838

3939
#include <sensor_msgs/msg/image.hpp>
4040
#include <sensor_msgs/msg/compressed_image.hpp>
41+
#include <image_transport/node_interfaces.hpp>
4142
#include <image_transport/simple_subscriber_plugin.hpp>
4243

4344
#include "compressed_image_transport/compression_common.hpp"
@@ -64,7 +65,7 @@ class CompressedSubscriber final : public image_transport::SimpleSubscriberPlugi
6465

6566
protected:
6667
void subscribeImpl(
67-
rclcpp::Node *,
68+
image_transport::RequiredInterfaces node_interfaces,
6869
const std::string & base_topic,
6970
const Callback & callback,
7071
rclcpp::QoS custom_qos,
@@ -75,7 +76,7 @@ class CompressedSubscriber final : public image_transport::SimpleSubscriberPlugi
7576
const Callback & user_cb) override;
7677

7778
rclcpp::Logger logger_;
78-
rclcpp::Node * node_;
79+
rclcpp::node_interfaces::NodeParametersInterface::SharedPtr node_param_interface_;
7980

8081
private:
8182
std::vector<std::string> parameters_;

compressed_image_transport/src/compressed_publisher.cpp

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -131,25 +131,26 @@ const struct ParameterDefinition kParameters[] =
131131
};
132132

133133
void CompressedPublisher::advertiseImpl(
134-
rclcpp::Node * node,
134+
image_transport::RequiredInterfaces node_interfaces,
135135
const std::string & base_topic,
136136
rclcpp::QoS custom_qos,
137137
rclcpp::PublisherOptions options)
138138
{
139-
node_ = node;
139+
node_param_interface_ = node_interfaces.get_node_parameters_interface();
140+
node_base_interface_ = node_interfaces.get_node_base_interface();
140141
typedef image_transport::SimplePublisherPlugin<sensor_msgs::msg::CompressedImage> Base;
141-
Base::advertiseImpl(node, base_topic, custom_qos, options);
142+
Base::advertiseImpl(node_interfaces, base_topic, custom_qos, options);
142143

143144
// Declare Parameters
144-
uint ns_len = node->get_effective_namespace().length();
145-
uint ns_prefix_len = ns_len > 1 ? ns_len + 1 : ns_len;
146-
std::string param_base_name = base_topic.substr(ns_prefix_len);
145+
unsigned int ns_len =
146+
std::string(node_interfaces.get_node_base_interface()->get_namespace()).length();
147+
std::string param_base_name = base_topic.substr(ns_len);
147148
std::replace(param_base_name.begin(), param_base_name.end(), '/', '.');
148149

149150
if (ns_len > 1) {
150151
// Add pre set parameter callback to handle deprecated parameters
151152
pre_set_parameter_callback_handle_ =
152-
node->add_pre_set_parameters_callback(std::bind(
153+
node_param_interface_->add_pre_set_parameters_callback(std::bind(
153154
&CompressedPublisher::preSetParametersCallback, this, std::placeholders::_1));
154155
}
155156

@@ -163,15 +164,21 @@ void CompressedPublisher::publish(
163164
const PublisherT & publisher) const
164165
{
165166
// Fresh Configuration
166-
std::string cfg_format = node_->get_parameter(parameters_[FORMAT]).get_value<std::string>();
167-
int cfg_png_level = node_->get_parameter(parameters_[PNG_LEVEL]).get_value<int64_t>();
168-
int cfg_jpeg_quality = node_->get_parameter(parameters_[JPEG_QUALITY]).get_value<int64_t>();
167+
std::string cfg_format = node_param_interface_->get_parameter(
168+
parameters_[FORMAT]).get_value<std::string>();
169+
int cfg_png_level = node_param_interface_->get_parameter(
170+
parameters_[PNG_LEVEL]).get_value<int64_t>();
171+
int cfg_jpeg_quality = node_param_interface_->get_parameter(
172+
parameters_[JPEG_QUALITY]).get_value<int64_t>();
169173
bool cfg_jpeg_compress_bayer =
170-
node_->get_parameter(parameters_[JPEG_COMPRESS_BAYER]).get_value<bool>();
174+
node_param_interface_->get_parameter(parameters_[JPEG_COMPRESS_BAYER]).get_value<bool>();
171175
std::string cfg_tiff_res_unit =
172-
node_->get_parameter(parameters_[TIFF_RESOLUTION_UNIT]).get_value<std::string>();
173-
int cfg_tiff_xdpi = node_->get_parameter(parameters_[TIFF_XDPI]).get_value<int64_t>();
174-
int cfg_tiff_ydpi = node_->get_parameter(parameters_[TIFF_YDPI]).get_value<int64_t>();
176+
node_param_interface_->get_parameter(
177+
parameters_[TIFF_RESOLUTION_UNIT]).get_value<std::string>();
178+
int cfg_tiff_xdpi = node_param_interface_->get_parameter(
179+
parameters_[TIFF_XDPI]).get_value<int64_t>();
180+
int cfg_tiff_ydpi = node_param_interface_->get_parameter(
181+
parameters_[TIFF_YDPI]).get_value<int64_t>();
175182

176183
// Compressed image message
177184
sensor_msgs::msg::CompressedImage compressed;
@@ -393,22 +400,24 @@ void CompressedPublisher::declareParameter(
393400
rclcpp::ParameterValue param_value;
394401

395402
try {
396-
param_value = node_->declare_parameter(param_name, definition.defaultValue,
397-
definition.descriptor);
403+
param_value = node_param_interface_->declare_parameter(
404+
param_name, definition.defaultValue,
405+
definition.descriptor);
398406
} catch (const rclcpp::exceptions::ParameterAlreadyDeclaredException &) {
399407
RCLCPP_DEBUG(logger_, "%s was previously declared", definition.descriptor.name.c_str());
400-
param_value = node_->get_parameter(param_name).get_parameter_value();
408+
param_value = node_param_interface_->get_parameter(param_name).get_parameter_value();
401409
}
402410

403411
// TODO(anyone): Remove deprecated parameters after Lyrical release
404-
if (node_->get_effective_namespace().length() > 1) {
412+
if (std::string(node_base_interface_->get_namespace()).length() > 1) {
405413
// deprecated parameters starting with the dot character (e.g. .image_raw.compressed.format)
406414
const std::string deprecated_dot_name = "." + base_name + "." + transport_name + "." +
407415
definition.descriptor.name;
408416
deprecated_parameters_.insert(deprecated_dot_name);
409417

410418
try {
411-
node_->declare_parameter(deprecated_dot_name, param_value, definition.descriptor);
419+
node_param_interface_->declare_parameter(deprecated_dot_name, param_value,
420+
definition.descriptor);
412421
} catch (const rclcpp::exceptions::ParameterAlreadyDeclaredException &) {
413422
RCLCPP_DEBUG(logger_, "%s was previously declared", definition.descriptor.name.c_str());
414423
}

compressed_image_transport/src/compressed_subscriber.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,19 +68,20 @@ const struct ParameterDefinition kParameters[] =
6868
};
6969

7070
void CompressedSubscriber::subscribeImpl(
71-
rclcpp::Node * node,
71+
image_transport::RequiredInterfaces node_interfaces,
7272
const std::string & base_topic,
7373
const Callback & callback,
7474
rclcpp::QoS custom_qos,
7575
rclcpp::SubscriptionOptions options)
7676
{
77-
node_ = node;
78-
logger_ = node->get_logger();
77+
node_param_interface_ = node_interfaces.get_node_parameters_interface();
78+
logger_ = node_interfaces.get_node_logging_interface()->get_logger();
7979
typedef image_transport::SimpleSubscriberPlugin<CompressedImage> Base;
80-
Base::subscribeImpl(node, base_topic, callback, custom_qos, options);
80+
Base::subscribeImpl(node_interfaces, base_topic, callback, custom_qos, options);
8181

8282
// Declare Parameters
83-
uint ns_len = node->get_effective_namespace().length();
83+
unsigned int ns_len =
84+
std::string(node_interfaces.get_node_base_interface()->get_namespace()).length();
8485
std::string param_base_name = base_topic.substr(ns_len);
8586
std::replace(param_base_name.begin(), param_base_name.end(), '/', '.');
8687

@@ -179,7 +180,8 @@ void CompressedSubscriber::internalCallback(
179180

180181
int CompressedSubscriber::imdecodeFlagFromConfig()
181182
{
182-
std::string mode = node_->get_parameter(parameters_[MODE]).get_value<std::string>();
183+
std::string mode =
184+
node_param_interface_->get_parameter(parameters_[MODE]).get_value<std::string>();
183185

184186
if (mode == "unchanged") {
185187
return cv::IMREAD_UNCHANGED;
@@ -207,11 +209,11 @@ void CompressedSubscriber::declareParameter(
207209
rclcpp::ParameterValue param_value;
208210

209211
try {
210-
param_value = node_->declare_parameter(param_name, definition.defaultValue,
212+
param_value = node_param_interface_->declare_parameter(param_name, definition.defaultValue,
211213
definition.descriptor);
212214
} catch (const rclcpp::exceptions::ParameterAlreadyDeclaredException &) {
213215
RCLCPP_DEBUG(logger_, "%s was previously declared", definition.descriptor.name.c_str());
214-
param_value = node_->get_parameter(param_name).get_parameter_value();
216+
param_value = node_param_interface_->get_parameter(param_name).get_parameter_value();
215217
}
216218
}
217219

theora_image_transport/include/theora_image_transport/theora_publisher.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
#include <sensor_msgs/msg/image.hpp>
4545
#include <sensor_msgs/msg/compressed_image.hpp>
4646

47+
#include <image_transport/node_interfaces.hpp>
4748
#include <image_transport/simple_publisher_plugin.hpp>
4849
#include <cv_bridge/cv_bridge.hpp>
4950
#include <std_msgs/msg/header.hpp>
@@ -68,7 +69,7 @@ class TheoraPublisher
6869

6970
protected:
7071
void advertiseImpl(
71-
rclcpp::Node * node,
72+
image_transport::RequiredInterfaces node_interfaces,
7273
const std::string & base_topic,
7374
rclcpp::QoS custom_qos,
7475
rclcpp::PublisherOptions options) override;
@@ -104,7 +105,8 @@ class TheoraPublisher
104105
mutable std::vector<theora_image_transport::msg::Packet> stream_header_;
105106

106107
rclcpp::Logger logger_;
107-
rclcpp::Node * node_;
108+
rclcpp::node_interfaces::NodeParametersInterface::SharedPtr node_param_interface_;
109+
rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_base_interface_;
108110

109111
private:
110112
std::vector<std::string> parameters_;

theora_image_transport/include/theora_image_transport/theora_subscriber.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939

4040
#include <rclcpp/node.hpp>
4141

42+
#include <image_transport/node_interfaces.hpp>
4243
#include <image_transport/simple_subscriber_plugin.hpp>
4344
#include <theora_image_transport/msg/packet.hpp>
4445

@@ -59,9 +60,8 @@ class TheoraSubscriber
5960
std::string getTransportName() const override {return "theora";}
6061

6162
protected:
62-
// Overridden to bump queue_size, otherwise we might lose headers
6363
void subscribeImpl(
64-
rclcpp::Node * node,
64+
image_transport::RequiredInterfaces node_interfaces,
6565
const std::string & base_topic,
6666
const Callback & callback,
6767
rclcpp::QoS custom_qos,
@@ -91,7 +91,7 @@ class TheoraSubscriber
9191
sensor_msgs::msg::Image::SharedPtr latest_image_;
9292

9393
rclcpp::Logger logger_;
94-
rclcpp::Node * node_;
94+
rclcpp::node_interfaces::NodeParametersInterface::SharedPtr node_param_interface_;
9595

9696
private:
9797
std::vector<std::string> parameters_;

0 commit comments

Comments
 (0)