Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ParameterEventsSubscriber class #829

Merged
merged 31 commits into from
Mar 4, 2021

Conversation

bpwilcox
Copy link
Contributor

@bpwilcox bpwilcox commented Aug 22, 2019

This PR adds a new class ParameterEventsSubscriber which provides function interfaces to handle parameter events.

The aim of this class is to address shortcomings and one of the unimplemented features (see https://design.ros2.org/articles/ros_parameters.html#unimplemented) for parameter events. Namely, this class:

  • can register multiple custom callbacks by parameter name and node (either your own or remote)
  • register a parameter to automatically update a reference variable
  • add a custom event callback by namespace (same behavior as on_parameter_event() in AsyncParametersClient)
  • can track different namespaces for parameter events (I believe the subscription created in the parameter client doesn't necessarily subscribe to parameter events on the namespace of the remote node passed in but of its own node)

In my opinion, this class would separate the parameter event subscriptions created in the parameter client (I'd remove the on_parameter_event in the future)

Copy link
Member

@ivanpauno ivanpauno left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In general, the idea looks great to me.
I left some comments and questions.

rclcpp/include/rclcpp/parameter_events_subscriber.hpp Outdated Show resolved Hide resolved
rclcpp/include/rclcpp/parameter_events_subscriber.hpp Outdated Show resolved Hide resolved
rclcpp/src/rclcpp/parameter_events_subscriber.cpp Outdated Show resolved Hide resolved
rclcpp/src/rclcpp/parameter_events_subscriber.cpp Outdated Show resolved Hide resolved
rclcpp/src/rclcpp/parameter_events_subscriber.cpp Outdated Show resolved Hide resolved
rclcpp/src/rclcpp/parameter_events_subscriber.cpp Outdated Show resolved Hide resolved
@bpwilcox bpwilcox force-pushed the add_parameter_event_subscriber branch 2 times, most recently from 312a493 to 33b1df0 Compare September 9, 2019 22:55
@bpwilcox
Copy link
Contributor Author

bpwilcox commented Sep 9, 2019

@ivanpauno Added a commit to address most of your feedback, including a test case for having the same parameter name on two separate nodes.

Copy link
Member

@ivanpauno ivanpauno left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bpwilcox thanks for iterating on this, LGTM!

rclcpp/src/rclcpp/parameter_events_subscriber.cpp Outdated Show resolved Hide resolved
@ivanpauno
Copy link
Member

CI up to rclcpp test_rclcpp, only fastrtps:

  • Linux Build Status
  • Linux-aarch64 Build Status
  • macOS Build Status
  • Windows Build Status

Copy link
Member

@ivanpauno ivanpauno left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Windows build failed because of missing visibility macros.
Please take a look to my other comments.

rclcpp/include/rclcpp/parameter_events_subscriber.hpp Outdated Show resolved Hide resolved
rclcpp/include/rclcpp/parameter_events_subscriber.hpp Outdated Show resolved Hide resolved
rclcpp/include/rclcpp/parameter_events_subscriber.hpp Outdated Show resolved Hide resolved
rclcpp/include/rclcpp/parameter_events_subscriber.hpp Outdated Show resolved Hide resolved
@ivanpauno
Copy link
Member

Also, check this warnings from the windows build:

10:17:38 C:\J\workspace\ci_windows\ws\src\ros2\rclcpp\rclcpp\test\test_parameter_events_subscriber.cpp(214): warning C4244: '=': conversion from 'int64_t' to 'int', possible loss of data [C:\J\workspace\ci_windows\ws\build\rclcpp\test_parameter_events_subscriber.vcxproj]
10:17:38 C:\J\workspace\ci_windows\ws\src\ros2\rclcpp\rclcpp\include\rclcpp/parameter_events_subscriber.hpp(116): warning C4244: '=': conversion from 'int64_t' to 'ParameterT', possible loss of data [C:\J\workspace\ci_windows\ws\build\rclcpp\test_parameter_events_subscriber.vcxproj]
10:17:38           with
10:17:38           [
10:17:38               ParameterT=int
10:17:38           ]
10:17:38   C:\J\workspace\ci_windows\ws\src\ros2\rclcpp\rclcpp\include\rclcpp/parameter_events_subscriber.hpp(92): note: see reference to function template instantiation 'void rclcpp::ParameterEventsSubscriber::get_parameter_update<ParameterT>(const rclcpp::Parameter &,ParameterT &)' being compiled
10:17:38           with
10:17:38           [
10:17:38               ParameterT=int
10:17:38           ]
10:17:38   C:\J\workspace\ci_windows\ws\src\ros2\rclcpp\rclcpp\test\test_parameter_events_subscriber.cpp(150): note: see reference to function template instantiation 'void rclcpp::ParameterEventsSubscriber::register_parameter_update<int>(const std::string &,ParameterT &,const std::string &)' being compiled
10:17:38           with
10:17:38           [
10:17:38               ParameterT=int
10:17:38           ]

Copy link
Member

@wjwwood wjwwood left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this feature! I have a few issues that I think we should try to resolve first, however.

First, I think the feature of updating the variable automatically is inherently unsafe. I could perhaps be convinced otherwise, but not without a new interface in place to protect the user.

Second, I think there needs to be more documentation about how to use this class. There are some not-so-obvious details about it for users, like the fact that you need to spinning on the Node for it to work.


Some what out-of-scope, but I think it applies to this classes future at least, is that when using this on a local node (if you have a reference rather than just a name), then you should be able to get updates without using the topic and without spinning. This is really needed for things like the TimeSource, see this issue:

#609


Also perhaps out-of-scope, but it would be a preferable end state, I think that this should support multiple callbacks not just one per node/parameter. For instance more than one party might care when use_sim_time changes. Right now they'd step on each other if they both tried to use the same instance of this class. So you could use two instances of this class, but then you'd need additional subscriptions which is wasteful. Therefore it would be better to support more than one callback at a time (at any granularity).

Also, it is not currently possible with this class to get a set of parameters, which is a common use case. For example, "if any of P, I, or D change, give me all of them" kind of thing. A stretch goal for sure, but it would require either changing this classes interface or adding nearly identical functionality along side of it in the future. Seems like it would be better to consider this case from the beginning.

rclcpp/include/rclcpp/parameter_events_subscriber.hpp Outdated Show resolved Hide resolved
rclcpp/include/rclcpp/parameter_events_subscriber.hpp Outdated Show resolved Hide resolved
: ParameterEventsSubscriber(
node->get_node_base_interface(),
node->get_node_topics_interface(),
node->get_node_logging_interface(),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For topics and logging they don't exist yet, but we should add them, it's just copy-paste update the names.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure I understand, can you clarify what you mean?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That something similar to

/// Get the NodeBaseInterface as a pointer from a pointer to a "Node like" object.
template<
typename NodeType,
typename std::enable_if<std::is_pointer<NodeType>::value, int>::type = 0
>
rclcpp::node_interfaces::NodeBaseInterface *
get_node_base_interface(NodeType node_pointer)
{
// Forward pointers to detail implmentation directly.
return detail::get_node_base_interface_from_pointer(node_pointer);
}
/// Get the NodeBaseInterface as a pointer from a "Node like" object.
template<
typename NodeType,
typename std::enable_if<
!std::is_pointer<typename std::remove_reference<NodeType>::type>::value, int
>::type = 0
>
rclcpp::node_interfaces::NodeBaseInterface *
get_node_base_interface(NodeType && node_reference)
{
// Forward references to detail implmentation as a pointer.
return detail::get_node_base_interface_from_pointer(&node_reference);
}
has to be implemented for the node logging interface.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This still applies, as @ivanpauno said, you need the equivalent of these files:

for the logging interface. It's essentially copy-paste-replace "base" or "topics" with "logging". And then use those here.

For example it is used here:

// Extract the NodeTopicsInterface from the NodeT.
using rclcpp::node_interfaces::get_node_topics_interface;
auto node_topics = get_node_topics_interface(node);

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added a get_node_logging_interface.hpp

rclcpp/include/rclcpp/parameter_events_subscriber.hpp Outdated Show resolved Hide resolved
rclcpp/include/rclcpp/parameter_events_subscriber.hpp Outdated Show resolved Hide resolved
if (std::find(node_namespaces_.begin(), node_namespaces_.end(),
node_namespace) == node_namespaces_.end())
{
node_namespaces_.push_back(node_namespace);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also here, thread-safety?

rclcpp/src/rclcpp/parameter_events_subscriber.cpp Outdated Show resolved Hide resolved
rclcpp/src/rclcpp/parameter_events_subscriber.cpp Outdated Show resolved Hide resolved
}
}

if (user_callback_) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What if this is set to nullptr with set_event_callback() after this line, but before the next?

rclcpp/test/test_parameter_events_subscriber.cpp Outdated Show resolved Hide resolved
@ivanpauno
Copy link
Member

First, I think the feature of updating the variable automatically is inherently unsafe. I could perhaps be convinced otherwise, but not without a new interface in place to protect the user.

I agree with @wjwwood that is unsafe.
I originally thought that it could be useful in some single threaded scenarios, but after reading the last comments I agree that it doesn't add extra value compared with using get_parameter directly.


I also agree with the other thread-safety concerns that I originally missed.

@bpwilcox
Copy link
Contributor Author

First, I think the feature of updating the variable automatically is inherently unsafe. I could perhaps be convinced otherwise, but not without a new interface in place to protect the user.

I'd like to look into making this feature thread-safe as well as address thread-safety through the class

Second, I think there needs to be more documentation about how to use this class. There are some not-so-obvious details about it for users, like the fact that you need to spinning on the Node for it to work.

Yes, I'll be working on documentation.

Some what out-of-scope, but I think it applies to this classes future at least, is that when using this on a local node (if you have a reference rather than just a name), then you should be able to get updates without using the topic and without spinning. This is really needed for things like the TimeSource, see this issue:

#609

I agree this would be preferable behavior, maybe a subsequent PR

Also perhaps out-of-scope, but it would be a preferable end state, I think that this should support multiple callbacks not just one per node/parameter. For instance more than one party might care when use_sim_time changes. Right now they'd step on each other if they both tried to use the same instance of this class. So you could use two instances of this class, but then you'd need additional subscriptions which is wasteful. Therefore it would be better to support more than one callback at a time (at any granularity).

Hmm, so perhaps saving a vector of callbacks per node/parameter, similar to what's being done in https://github.com/ros2/rclcpp/blob/master/rclcpp/include/rclcpp/node.hpp#L962?

Also, it is not currently possible with this class to get a set of parameters, which is a common use case. For example, "if any of P, I, or D change, give me all of them" kind of thing. A stretch goal for sure, but it would require either changing this classes interface or adding nearly identical functionality along side of it in the future. Seems like it would be better to consider this case from the beginning.

This is interesting. I suppose you could add a custom callback on each parameter and provide your own inspection into the other parameters, but it sounds like there could be a set_parameter_group_callback type function that accepts multiple parameter names and has a callback associated with that grouping if any change? You might have to create a client to remote nodes unless you're caching their values somewhere, though.

@wjwwood
Copy link
Member

wjwwood commented Sep 11, 2019

I agree this would be preferable behavior, maybe a subsequent PR

👍

Hmm, so perhaps saving a vector of callbacks per node/parameter, similar to what's being done in https://github.com/ros2/rclcpp/blob/master/rclcpp/include/rclcpp/node.hpp#L962?

I think that's the best way to go about it, especially since unlike that set of callbacks these callbacks can not influence one another. What I mean is that the other ones you linked to can each "reject" changes by returning something, whereas these callbacks are informative only, and so you don't need to decide whether or not these callbacks will affect each other.

So, it's more work, but not quite as much work as the other callbacks already using this pattern, and I think generally more useful.

This is interesting. I suppose you could add a custom callback on each parameter and provide your own inspection into the other parameters, but it sounds like there could be a set_parameter_group_callback type function that accepts multiple parameter names and has a callback associated with that grouping if any change? You might have to create a client to remote nodes unless you're caching their values somewhere, though.

I was thinking more like a callback that would only get called if all the parameters changed or something, but maybe the use case for this is less concrete than I imagined. You're right that the user can request the group if they want separately. Maybe we just table this feature.

@bpwilcox bpwilcox force-pushed the add_parameter_event_subscriber branch 2 times, most recently from a2536fb to a91f464 Compare September 26, 2019 21:36
@bpwilcox
Copy link
Contributor Author

@wjwwood I've addressed much of your feedback in my latest commits. Namely:

  • adding mutexes for thread safety
  • removed register_parameter_update feature
    • given our conversation and further investigation, I decided it is best for now to just remove
  • made get_parameter_from_event a static method
  • changed naming to from register_parameter_callback to add_parameter_callback
  • added feature to add multiple callbacks per {parameter, node}
  • added functions to remove parameter callbacks (either by callback handle or entire parameter) and removal of event callback
  • internally, subscriptions will be erased if there are no more callbacks associated with the <namespace>/parameter_events topic
  • updated tests to cover added features

Can you review the changes and let me know if there are any remaining blocking issues for this PR?

@mkhansenbot
Copy link

@wjwwood - can you review again please?

@wjwwood
Copy link
Member

wjwwood commented Oct 10, 2019

I might be able to get to it this week. It's already on my list, but there are other big pull requests that are older (e.g. #778) which I am working on now.

@mkhansenbot
Copy link

Thanks for the update!

Copy link
Member

@ivanpauno ivanpauno left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left some comments.

@wjwwood Why do we have a parameter event topic per namespace? Was that intentional?
I think it's ok, but also having only one is reasonable.

: ParameterEventsSubscriber(
node->get_node_base_interface(),
node->get_node_topics_interface(),
node->get_node_logging_interface(),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That something similar to

/// Get the NodeBaseInterface as a pointer from a pointer to a "Node like" object.
template<
typename NodeType,
typename std::enable_if<std::is_pointer<NodeType>::value, int>::type = 0
>
rclcpp::node_interfaces::NodeBaseInterface *
get_node_base_interface(NodeType node_pointer)
{
// Forward pointers to detail implmentation directly.
return detail::get_node_base_interface_from_pointer(node_pointer);
}
/// Get the NodeBaseInterface as a pointer from a "Node like" object.
template<
typename NodeType,
typename std::enable_if<
!std::is_pointer<typename std::remove_reference<NodeType>::type>::value, int
>::type = 0
>
rclcpp::node_interfaces::NodeBaseInterface *
get_node_base_interface(NodeType && node_reference)
{
// Forward references to detail implmentation as a pointer.
return detail::get_node_base_interface_from_pointer(&node_reference);
}
has to be implemented for the node logging interface.

RCLCPP_PUBLIC
static bool
get_parameter_from_event(
const rcl_interfaces::msg::ParameterEvent::SharedPtr event,
Copy link
Member

@ivanpauno ivanpauno Nov 21, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use const rcl_interfaces::msg::ParameterEvent & event

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ParameterEventsFilter used in this function requires a shared ptr to the event msg,

rcl_interfaces::msg::ParameterEvent::SharedPtr event,

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I really don't like the ParameterEventsFilter class design.
The problem could be solved with a free function, without the need of taking a shared_ptr to an event.
But that discussion is probably out of the scope of this PR.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is a valid critique of the existing filter class and would be worth changing now so that we don't have to compromise this new API in order to use the existing filter class API...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've removed the ParameterEventsFilter dependency from the get_parameter_from_event function and modified code from the filter to work for this use case.

// Utility functions for string and path name operations.
std::string resolve_path(const std::string & path);
std::pair<std::string, std::string> split_path(const std::string & str);
std::string join_path(std::string path, std::string name);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will see if I can use these.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Though, if we remove the namespace from the topic name as your PR proposes, then I no longer need to worry about splitting/joining strings.

rclcpp/include/rclcpp/parameter_events_subscriber.hpp Outdated Show resolved Hide resolved
{
node_namespaces_.push_back(node_namespace);
auto topic = join_path(node_namespace, "parameter_events");
RCLCPP_DEBUG(node_logging_->get_logger(), "Subscribing to topic: %s", topic.c_str());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably, using this

get_child(const std::string & suffix)

std::string full_namespace;
for (auto & ns : node_namespaces) {
if (ns == "") {
full_namespace = node_base_->get_namespace();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand that the methods that take a namespace, defaults it to the current node namespace.
But when you take a vector of namespaces, I don't think that applying that rule is good.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it be better to create a function overload then that doesn't take any namespaces but only applies callback to itself?

As mentioned in another comment, I am thinking to set the callbacks on the nodes as opposed to the namespace.

{
std::lock_guard<std::recursive_mutex> lock(mutex_);
// Clear current vector of event namespaces and remove subscriptions
auto temp_namespaces = event_namespaces_;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: Using the move constructor might be better.
Prefer not using auto, except the type is obvious or too complicated to write.

  std::vector<std::string> temp_namesaces(std::move(event_namespaces_));

rclcpp/include/rclcpp/parameter_events_subscriber.hpp Outdated Show resolved Hide resolved
rclcpp/src/rclcpp/parameter_events_subscriber.cpp Outdated Show resolved Hide resolved
}

if (event_callback_) {
event_callback_(event);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't call this one only when the namespace is in event_namespaces_;?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree that makes more sense.

Actually, I had a couple more thoughts I'm considering:

  1. Apply the event callbacks per node as opposed to namespace
  2. Support multiple event callbacks, either multiple on a same node, or multiple different nodes. This is similar to what I've done for the individual parameter callbacks

@wjwwood
Copy link
Member

wjwwood commented Nov 22, 2019

@wjwwood Why do we have a parameter event topic per namespace? Was that intentional?
I think it's ok, but also having only one is reasonable.

Can you link to the line where this is done (where the topic name is specified)?

I believe this was discussed somewhere else, but I can't find it. Basically, if the topic is currently parameter_events, then I agree it's not right and should be changed. I think either /parameter_events or ~/parameter_events makes sense, but not parameter_events. I don't know what the hangup was on changing that, if there was any. Personally, I'd go for /parameter_events, because I judge that filtering undesired events is more efficient then having many subscriptions (one for each node) when you want to monitor all changes. Plus we could consider using a keyed topic (keyed on node name most likely) in the future to gain some performance back.

@ivanpauno
Copy link
Member

Can you link to the line where this is done (where the topic name is specified)?

I believe this was discussed somewhere else, but I can't find it.

I remember an offline discussion, but no idea is something was written about it.

I'd go for /parameter_events, because I judge that filtering undesired events is more efficient then having many subscriptions

I agree. I'm going to open a PR proposing that.

mjeronimo and others added 2 commits January 8, 2021 12:34
…Monitor

Signed-off-by: Michael Jeronimo <michael.jeronimo@openrobotics.org>
Another name change; using Handler instead of the more passive term, …
RCLCPP_PUBLIC
void
remove_parameter_event_callback(
const ParameterEventCallbackHandle * const handle);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But it's not documented that letting the shared pointer returned by add_parameter_event_callback go out of scope will automatically remove it, unlike the inspiration for these signatures, Node::add_on_set_parameters_callback(). As far as I can tell from the code, it is not the case that letting this shared pointer go out of scope will result in the callback getting removed. So I don't see any reason for it to be returned as a shared_ptr.

So going back to my original thing, I think the add function should return a raw pointer (as there's no need to have shared ownership) or the remove function should take a shared pointer so it is symmetric with the add function.

Since automatic removal is not happening, it sounds like it should never be a shared pointer in the first place.

And since the handle is trivially copied, maybe it should just return a OnSetParametersCallbackHandle from add and take a const OnSetParametersCallbackHandle & in remove?

I still just don't see why we're returning a shared ptr from add but taking a raw pointer here.

Copy link
Member

@wjwwood wjwwood left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are some lingering questions, but this is really close.

mjeronimo and others added 2 commits February 2, 2021 17:10
Per William's review feedback.

Signed-off-by: Michael Jeronimo <michael.jeronimo@openrobotics.org>
Pass SharedPtrs callback remove functions instead of bare pointers
Signed-off-by: Michael Jeronimo <michael.jeronimo@openrobotics.org>
* Remove unused interfaces
* Document LIFO order for invoking callbacks
* Add test cases to verify LIFO order for callbacks

Signed-off-by: Michael Jeronimo <michael.jeronimo@openrobotics.org>
@mjeronimo
Copy link
Contributor

@fujitatomoya @wjwwood Any further input?

Copy link
Member

@wjwwood wjwwood left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mostly a bunch of nitpicks about the documentation.

I think this is ready to merge regardless. So take or leave the suggestions and lgtm 👍

rclcpp/include/rclcpp/parameter_event_handler.hpp Outdated Show resolved Hide resolved
rclcpp/include/rclcpp/parameter_event_handler.hpp Outdated Show resolved Hide resolved
Comment on lines 73 to 77
* RCLCPP_INFO(
* node->get_logger(), "cb1: Received an update to parameter \"%s\" of type %s: \"%ld\"",
* p.get_name().c_str(),
* p.get_type_name().c_str(),
* p.as_int());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nitpick: There is a stream operator for parameters:

Which you could use like this (test it because I'm not 100% sure on the syntax):

Suggested change
* RCLCPP_INFO(
* node->get_logger(), "cb1: Received an update to parameter \"%s\" of type %s: \"%ld\"",
* p.get_name().c_str(),
* p.get_type_name().c_str(),
* p.as_int());
* RCLCPP_INFO_STREAM(node->get_logger(), << "cb1: Received an update to parameter " << p);

So long as the format is what you want. Just a suggestion, feel free to ignore it.

rclcpp/include/rclcpp/parameter_event_handler.hpp Outdated Show resolved Hide resolved
* You can also monitor for *all* parameter changes, using add_parameter_event_callback. In this
* case, the callback will be invoked whenever any parameter changes in the system. You are likely
* interested in a subset of these parameter changes, so in the callback it is convenient to use
* a regular expression on the node names or namespaces of interest. For example,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* a regular expression on the node names or namespaces of interest. For example,
* a regular expression on the node names or namespaces of interest. For example:

rclcpp/include/rclcpp/parameter_event_handler.hpp Outdated Show resolved Hide resolved
rclcpp/include/rclcpp/parameter_event_handler.hpp Outdated Show resolved Hide resolved
Comment on lines +194 to +199
auto shared_event_handle = event_cb->lock();
if (nullptr != shared_event_handle) {
shared_event_handle->callback(event);
} else {
event_cb = event_callbacks_.erase(event_cb);
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did the documentation mention that the handle was scoped?

mjeronimo and others added 2 commits March 3, 2021 14:34
Signed-off-by: Michael Jeronimo <michael.jeronimo@openrobotics.org>
A couple more doc fixes from review comments
@nuclearsandwich
Copy link
Member

Merging this introduced build failures on Windows Build Status. We reverted the change in #1572 and there is a new PR in #1573 to re-apply them.

mjeronimo pushed a commit that referenced this pull request Mar 9, 2021
Also add the following fixes for CI:

* Fix symbol visibility error on Windows
* Remove an unused parameter to quiet a clang-tidy warning on MacOS

Signed-off-by: Michael Jeronimo <michael.jeronimo@openrobotics.org>

std::list<ParameterEventCallbackHandle::WeakPtr> event_callbacks_;

std::recursive_mutex mutex_;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bpwilcox we're investigating some strange behavior and this class is involved, but during that investigation I noticed this mutex is recursive, but it wasn't immediately obvious to me why that's required. The callback is used in a subscription which is used in a mutually exclusive callback group (the default) and so it will never be called in parallel with itself. Likewise I don't see why any of the other functions (add/remove ones) use the mutex in a way where recursion is needed.

I know this is an ancient issue, but it was just a shot in the dark if you remembered why that was the case.

timonegk pushed a commit to timonegk/ros-rolling-rclcpp-release that referenced this pull request May 21, 2022
ros-rolling-rclcpp (16.0.1-1jammy) jammy; urgency=high
.
  * remove DEFINE_CONTENT_FILTER cmake option (#1914 <https://github.com/ros2/rclcpp/issues/1914>)
  * Contributors: Chen Lihui
.
ros-rolling-rclcpp (16.0.0-1jammy) jammy; urgency=high
.
  * remove things that were deprecated during galactic (#1913 <https://github.com/ros2/rclcpp/issues/1913>)
  * Contributors: William Woodall
.
ros-rolling-rclcpp (15.4.0-1jammy) jammy; urgency=high
.
  * add take_data_by_entity_id API to waitable (#1892 <https://github.com/ros2/rclcpp/issues/1892>)
  * add content-filtered-topic interfaces (#1561 <https://github.com/ros2/rclcpp/issues/1561>)
  * Contributors: Alberto Soragna, Chen Lihui
.
ros-rolling-rclcpp (15.3.0-1jammy) jammy; urgency=high
.
  * [NodeParameters] Set name in param info pre-check (#1908 <https://github.com/ros2/rclcpp/issues/1908>)
  * Add test-dep ament_cmake_google_benchmark (#1904 <https://github.com/ros2/rclcpp/issues/1904>)
  * Add publish by loaned message in GenericPublisher (#1856 <https://github.com/ros2/rclcpp/issues/1856>)
  * Contributors: Abrar Rahman Protyasha, Barry Xu, Gaël Écorchard
.
ros-rolling-rclcpp (15.2.0-1jammy) jammy; urgency=high
.
  * Add missing ament dependency on rcl_interfaces (#1903 <https://github.com/ros2/rclcpp/issues/1903>)
  * Update data callback tests to account for all published samples (#1900 <https://github.com/ros2/rclcpp/issues/1900>)
  * Increase timeout for acknowledgments to account for slower Connext settings (#1901 <https://github.com/ros2/rclcpp/issues/1901>)
  * clang-tidy: explicit constructors (#1782 <https://github.com/ros2/rclcpp/issues/1782>)
  * Add client/service QoS getters (#1784 <https://github.com/ros2/rclcpp/issues/1784>)
  * Fix a bunch more rosdoc2 issues in rclcpp. (#1897 <https://github.com/ros2/rclcpp/issues/1897>)
  * time_until_trigger returns max time if timer is cancelled (#1893 <https://github.com/ros2/rclcpp/issues/1893>)
  * Micro-optimizations in rclcpp (#1896 <https://github.com/ros2/rclcpp/issues/1896>)
  * Contributors: Andrea Sorbini, Chris Lalancette, Mauro Passerino, Scott K Logan, William Woodall
.
ros-rolling-rclcpp (15.1.0-1jammy) jammy; urgency=high
.
  * spin_all with a zero timeout. (#1878 <https://github.com/ros2/rclcpp/issues/1878>)
  * Add RMW listener APIs (#1579 <https://github.com/ros2/rclcpp/issues/1579>)
  * Remove fastrtps customization on tests (#1887 <https://github.com/ros2/rclcpp/issues/1887>)
  * Install headers to include/${PROJECT_NAME} (#1888 <https://github.com/ros2/rclcpp/issues/1888>)
  * Use ament_generate_version_header (#1886 <https://github.com/ros2/rclcpp/issues/1886>)
  * use universal reference to support rvalue. (#1883 <https://github.com/ros2/rclcpp/issues/1883>)
  * fix one subscription can wait_for_message twice (#1870 <https://github.com/ros2/rclcpp/issues/1870>)
  * Add return value version of get_parameter_or (#1813 <https://github.com/ros2/rclcpp/issues/1813>)
  * Cleanup time source object lifetimes (#1867 <https://github.com/ros2/rclcpp/issues/1867>)
  * add is_spinning() method to executor base class
  * Contributors: Alberto Soragna, Chen Lihui, Chris Lalancette, Kenji Miyake, Miguel Company, Shane Loretz, Tomoya Fujita, iRobot ROS
.
ros-rolling-rclcpp (15.0.0-1jammy) jammy; urgency=high
.
  * Cleanup the TypeAdapt tests (#1858 <https://github.com/ros2/rclcpp/issues/1858>)
  * Cleanup includes (#1857 <https://github.com/ros2/rclcpp/issues/1857>)
  * Fix include order and relative paths for cpplint (#1859 <https://github.com/ros2/rclcpp/issues/1859>)
  * Rename stringstream in macros to a more unique name (#1862 <https://github.com/ros2/rclcpp/issues/1862>)
  * Add non transform capabilities for intra-process (#1849 <https://github.com/ros2/rclcpp/issues/1849>)
  * Fix rclcpp documentation build (#1779 <https://github.com/ros2/rclcpp/issues/1779>)
  * Contributors: Chris Lalancette, Doug Smith, Gonzo, Jacob Perron, Michel Hidalgo
.
ros-rolling-rclcpp (14.1.0-1jammy) jammy; urgency=high
.
  * Use UninitializedStaticallyTypedParameterException (#1689 <https://github.com/ros2/rclcpp/issues/1689>)
  * Add wait_for_all_acked support (#1662 <https://github.com/ros2/rclcpp/issues/1662>)
  * Add tests for function templates of declare_parameter (#1747 <https://github.com/ros2/rclcpp/issues/1747>)
  * Contributors: Barry Xu, Bi0T1N, M. Mostafa Farzan
.
ros-rolling-rclcpp (14.0.0-1jammy) jammy; urgency=high
.
  * Fixes for uncrustify 0.72 (#1844 <https://github.com/ros2/rclcpp/issues/1844>)
  * use private member to keep the all reference underneath. (#1845 <https://github.com/ros2/rclcpp/issues/1845>)
  * Make node base sharable (#1832 <https://github.com/ros2/rclcpp/issues/1832>)
  * Add Clock::sleep_for() (#1828 <https://github.com/ros2/rclcpp/issues/1828>)
  * Synchronize rcl and std::chrono steady clocks in Clock::sleep_until (#1830 <https://github.com/ros2/rclcpp/issues/1830>)
  * Use rclcpp::guard_condition (#1612 <https://github.com/ros2/rclcpp/issues/1612>)
  * Call CMake function to generate version header (#1805 <https://github.com/ros2/rclcpp/issues/1805>)
  * Use parantheses around logging macro parameter (#1820 <https://github.com/ros2/rclcpp/issues/1820>)
  * Remove author by request (#1818 <https://github.com/ros2/rclcpp/issues/1818>)
  * Update maintainers (#1817 <https://github.com/ros2/rclcpp/issues/1817>)
  * min_forward & min_backward thresholds must not be disabled (#1815 <https://github.com/ros2/rclcpp/issues/1815>)
  * Re-add Clock::sleep_until (#1814 <https://github.com/ros2/rclcpp/issues/1814>)
  * Fix lifetime of context so it remains alive while its dependent node handles are still in use (#1754 <https://github.com/ros2/rclcpp/issues/1754>)
  * Add the interface for pre-shutdown callback (#1714 <https://github.com/ros2/rclcpp/issues/1714>)
  * Take message ownership from moved LoanedMessage (#1808 <https://github.com/ros2/rclcpp/issues/1808>)
  * Suppress clang dead-store warnings in the benchmarks. (#1802 <https://github.com/ros2/rclcpp/issues/1802>)
  * Wait for publisher and subscription to match (#1777 <https://github.com/ros2/rclcpp/issues/1777>)
  * Fix unused QoS profile for clock subscription and make ClockQoS the default (#1801 <https://github.com/ros2/rclcpp/issues/1801>)
  * Contributors: Abrar Rahman Protyasha, Barry Xu, Chen Lihui, Chris Lalancette, Grey, Jacob Perron, Nikolai Morin, Shane Loretz, Tomoya Fujita, mauropasse
.
ros-rolling-rclcpp (13.1.0-1jammy) jammy; urgency=high
.
  * Fix dangerous std::bind capture in TimeSource implementation. (#1768 <https://github.com/ros2/rclcpp/issues/1768>)
  * Fix dangerous std::bind capture in ParameterEventHandler implementation. (#1770 <https://github.com/ros2/rclcpp/issues/1770>)
  * Handle sigterm, in the same way sigint is being handled. (#1771 <https://github.com/ros2/rclcpp/issues/1771>)
  * rclcpp::Node copy constructor: make copy of node_waitables_ member. (#1799 <https://github.com/ros2/rclcpp/issues/1799>)
  * Extend NodeGraph to match what rcl provides. (#1484 <https://github.com/ros2/rclcpp/issues/1484>)
  * Context::sleep_for(): replace recursion with do-while to avoid potential stack-overflow. (#1765 <https://github.com/ros2/rclcpp/issues/1765>)
  * extend_sub_namespace(): Verify string::empty() before calling string::front(). (#1764 <https://github.com/ros2/rclcpp/issues/1764>)
  * Deprecate the void shared_ptr<MessageT> subscription callback signatures. (#1713 <https://github.com/ros2/rclcpp/issues/1713>)
  * Contributors: Abrar Rahman Protyasha, Chris Lalancette, Emerson Knapp, Geoffrey Biggs, Ivan Santiago Paunovic, Jorge Perez, Tomoya Fujita, William Woodall, Yong-Hao Zou, livanov93
.
ros-rolling-rclcpp (13.0.0-1jammy) jammy; urgency=high
.
  * Remove can_be_nullptr assignment check for QNX case. (#1752 <https://github.com/ros2/rclcpp/issues/1752>)
  * Update client API to be able to remove pending requests. (#1734 <https://github.com/ros2/rclcpp/issues/1734>)
  * Fix: Allow to add a node while spinning in the StaticSingleThreadedExecutor. (#1690 <https://github.com/ros2/rclcpp/issues/1690>)
  * Add tracing instrumentation for executor and message taking. (#1738 <https://github.com/ros2/rclcpp/issues/1738>)
  * Fix: Reset timer trigger time before execute in StaticSingleThreadedExecutor. (#1739 <https://github.com/ros2/rclcpp/issues/1739>)
  * Use FindPython3 and make python3 dependency explicit. (#1745 <https://github.com/ros2/rclcpp/issues/1745>)
  * Use rosidl_get_typesupport_target(). (#1729 <https://github.com/ros2/rclcpp/issues/1729>)
  * Fix returning invalid namespace if sub_namespace is empty. (#1658 <https://github.com/ros2/rclcpp/issues/1658>)
  * Add free function to wait for a subscription message. (#1705 <https://github.com/ros2/rclcpp/issues/1705>)
  * Use rcpputils/scope_exit.hpp and remove rclcpp/scope_exit.hpp. (#1727 <https://github.com/ros2/rclcpp/issues/1727>)
  * Contributors: Ahmed Sobhy, Christophe Bedard, Ivan Santiago Paunovic, Karsten Knese, M. Hofstätter, Mauro Passerino, Shane Loretz, mauropasse
.
ros-rolling-rclcpp (12.0.0-1jammy) jammy; urgency=high
.
  * Remove unsafe get_callback_groups API.
    Callers should change to using for_each_callback_group(), or
    store the callback groups they need internally.
  * Add in callback_groups_for_each.
    The main reason to add this method in is to make accesses to the
    callback_groups_ vector thread-safe.  By having a
    callback_groups_for_each that accepts a std::function, we can
    just have the callers give us the callback they are interested
    in, and we can take care of the locking.
    The rest of this fairly large PR is cleaning up all of the places
    that use get_callback_groups() to instead use
    callback_groups_for_each().
  * Use a different mechanism to avoid timers being scheduled multiple times by the MultiThreadedExecutor (#1692 <https://github.com/ros2/rclcpp/issues/1692>)
  * Fix windows CI (#1726 <https://github.com/ros2/rclcpp/issues/1726>)
    Fix bug in AnyServiceCallback introduced in #1709 <https://github.com/ros2/rclcpp/issues/1709>.
  * Contributors: Chris Lalancette, Ivan Santiago Paunovic
.
ros-rolling-rclcpp (11.2.0-1jammy) jammy; urgency=high
.
  * Support to defer to send a response in services. (#1709 <https://github.com/ros2/rclcpp/issues/1709>)
    Signed-off-by: Ivan Santiago Paunovic <mailto:ivanpauno@ekumenlabs.com>
  * Fix documentation bug. (#1719 <https://github.com/ros2/rclcpp/issues/1719>)
    Signed-off-by: William Woodall <mailto:william@osrfoundation.org>
  * Contributors: Ivan Santiago Paunovic, William Woodall
.
ros-rolling-rclcpp (11.1.0-1jammy) jammy; urgency=high
.
  * Removed left over ``is_initialized()`` implementation (#1711 <https://github.com/ros2/rclcpp/issues/1711>)
    Leftover from https://github.com/ros2/rclcpp/pull/1622
  * Fixed declare parameter methods for int and float vectors (#1696 <https://github.com/ros2/rclcpp/issues/1696>)
  * Cleaned up implementation of the intra-process manager (#1695 <https://github.com/ros2/rclcpp/issues/1695>)
  * Added the node name to an executor ``runtime_error`` (#1686 <https://github.com/ros2/rclcpp/issues/1686>)
  * Fixed a typo "Attack" -> "Attach" (#1687 <https://github.com/ros2/rclcpp/issues/1687>)
  * Removed use of std::allocator<>::rebind (#1678 <https://github.com/ros2/rclcpp/issues/1678>)
    rebind is deprecated in c++17 and removed in c++20
  * Contributors: Alberto Soragna, Chen Lihui, Chris Lalancette, Petter Nilsson, Steve Macenski, William Woodall
.
ros-rolling-rclcpp (11.0.0-1jammy) jammy; urgency=high
.
  * Allow declare uninitialized parameters (#1673 <https://github.com/ros2/rclcpp/issues/1673>)
  * Fix syntax issue with gcc (#1674 <https://github.com/ros2/rclcpp/issues/1674>)
  * [service] Don't use a weak_ptr to avoid leaking (#1668 <https://github.com/ros2/rclcpp/issues/1668>)
  * Contributors: Ivan Santiago Paunovic, Jacob Perron, William Woodall
.
ros-rolling-rclcpp (10.0.0-1jammy) jammy; urgency=high
.
  * Fix doc typo (#1663 <https://github.com/ros2/rclcpp/issues/1663>)
  * [rclcpp] Type Adaptation feature (#1557 <https://github.com/ros2/rclcpp/issues/1557>)
  * Do not attempt to use void allocators for memory allocation. (#1657 <https://github.com/ros2/rclcpp/issues/1657>)
  * Keep custom allocator in publisher and subscription options alive. (#1647 <https://github.com/ros2/rclcpp/issues/1647>)
  * Fix get_publishers_subscriptions_info_by_topic test in test_node.cpp (#1648 <https://github.com/ros2/rclcpp/issues/1648>)
  * Use OnShutdown callback handle instead of OnShutdown callback (#1639 <https://github.com/ros2/rclcpp/issues/1639>)
  * use dynamic_pointer_cast to detect allocator mismatch in intra process manager (#1643 <https://github.com/ros2/rclcpp/issues/1643>)
  * Increase cppcheck timeout to 500s (#1634 <https://github.com/ros2/rclcpp/issues/1634>)
  * Clarify node parameters docs (#1631 <https://github.com/ros2/rclcpp/issues/1631>)
  * Contributors: Audrow Nash, Barry Xu, Jacob Perron, Michel Hidalgo, Shane Loretz, William Woodall
.
ros-rolling-rclcpp (9.0.2-1jammy) jammy; urgency=high
.
  * Avoid returning loan when none was obtained. (#1629 <https://github.com/ros2/rclcpp/issues/1629>)
  * Use a different implementation of mutex two priorities (#1628 <https://github.com/ros2/rclcpp/issues/1628>)
  * Do not test the value of the history policy when testing the get_publishers/subscriptions_info_by_topic() methods (#1626 <https://github.com/ros2/rclcpp/issues/1626>)
  * Check first parameter type and range before calling the user validation callbacks (#1627 <https://github.com/ros2/rclcpp/issues/1627>)
  * Contributors: Ivan Santiago Paunovic, Miguel Company
.
ros-rolling-rclcpp (9.0.1-1jammy) jammy; urgency=high
.
  * Restore test exception for Connext (#1625 <https://github.com/ros2/rclcpp/issues/1625>)
  * Fix race condition in TimeSource clock thread setup (#1623 <https://github.com/ros2/rclcpp/issues/1623>)
  * Contributors: Andrea Sorbini, Michel Hidalgo
.
ros-rolling-rclcpp (9.0.0-1jammy) jammy; urgency=high
.
  * remove deprecated code which was deprecated in foxy and should be removed in galactic (#1622 <https://github.com/ros2/rclcpp/issues/1622>)
  * Change index.ros.org -> docs.ros.org. (#1620 <https://github.com/ros2/rclcpp/issues/1620>)
  * Unique network flows (#1496 <https://github.com/ros2/rclcpp/issues/1496>)
  * Add spin_some support to the StaticSingleThreadedExecutor (#1338 <https://github.com/ros2/rclcpp/issues/1338>)
  * Add publishing instrumentation (#1600 <https://github.com/ros2/rclcpp/issues/1600>)
  * Create load_parameters and delete_parameters methods (#1596 <https://github.com/ros2/rclcpp/issues/1596>)
  * refactor AnySubscriptionCallback and add/deprecate callback signatures (#1598 <https://github.com/ros2/rclcpp/issues/1598>)
  * Add generic publisher and generic subscription for serialized messages (#1452 <https://github.com/ros2/rclcpp/issues/1452>)
  * use context from node_base_ for clock executor. (#1617 <https://github.com/ros2/rclcpp/issues/1617>)
  * updating quality declaration links (re: ros2/docs.ros2.org#52 <https://github.com/ros2/docs.ros2.org/issues/52>) (#1615 <https://github.com/ros2/rclcpp/issues/1615>)
  * Contributors: Ananya Muddukrishna, BriceRenaudeau, Chris Lalancette, Christophe Bedard, Nikolai Morin, Tomoya Fujita, William Woodall, mauropasse, shonigmann
.
ros-rolling-rclcpp (8.2.0-1jammy) jammy; urgency=high
.
  * Initialize integers in test_parameter_event_handler.cpp to avoid undefined behavior (#1609 <https://github.com/ros2/rclcpp/issues/1609>)
  * Namespace tracetools C++ functions (#1608 <https://github.com/ros2/rclcpp/issues/1608>)
  * Revert "Namespace tracetools C++ functions (#1603 <https://github.com/ros2/rclcpp/issues/1603>)" (#1607 <https://github.com/ros2/rclcpp/issues/1607>)
  * Namespace tracetools C++ functions (#1603 <https://github.com/ros2/rclcpp/issues/1603>)
  * Clock subscription callback group spins in its own thread (#1556 <https://github.com/ros2/rclcpp/issues/1556>)
  * Contributors: Chris Lalancette, Christophe Bedard, Ivan Santiago Paunovic, anaelle-sw
.
ros-rolling-rclcpp (8.1.0-1jammy) jammy; urgency=high
.
  * Remove rmw_connext_cpp references. (#1595 <https://github.com/ros2/rclcpp/issues/1595>)
  * Add API for checking QoS profile compatibility (#1554 <https://github.com/ros2/rclcpp/issues/1554>)
  * Document misuse of parameters callback (#1590 <https://github.com/ros2/rclcpp/issues/1590>)
  * use const auto & to iterate over parameters (#1593 <https://github.com/ros2/rclcpp/issues/1593>)
  * Contributors: Chris Lalancette, Jacob Perron, Karsten Knese
.
ros-rolling-rclcpp (8.0.0-1jammy) jammy; urgency=high
.
  * Guard against integer overflow in duration conversion (#1584 <https://github.com/ros2/rclcpp/issues/1584>)
  * Contributors: Jacob Perron
.
ros-rolling-rclcpp (7.0.1-1jammy) jammy; urgency=high
.
  * get_parameters service should return empty if undeclared parameters are allowed (#1514 <https://github.com/ros2/rclcpp/issues/1514>)
  * Made 'Context::shutdown_reason' function a const function (#1578 <https://github.com/ros2/rclcpp/issues/1578>)
  * Contributors: Tomoya Fujita, suab321321
.
ros-rolling-rclcpp (7.0.0-1jammy) jammy; urgency=high
.
  * Document design decisions that were made for statically typed parameters (#1568 <https://github.com/ros2/rclcpp/issues/1568>)
  * Fix doc typo in CallbackGroup constructor (#1582 <https://github.com/ros2/rclcpp/issues/1582>)
  * Enable qos parameter overrides for the /parameter_events topic  (#1532 <https://github.com/ros2/rclcpp/issues/1532>)
  * Add support for rmw_connextdds (#1574 <https://github.com/ros2/rclcpp/issues/1574>)
  * Remove 'struct' from the rcl_time_jump_t. (#1577 <https://github.com/ros2/rclcpp/issues/1577>)
  * Add tests for declaring statically typed parameters when undeclared parameters are allowed (#1575 <https://github.com/ros2/rclcpp/issues/1575>)
  * Quiet clang memory leak warning on "DoNotOptimize". (#1571 <https://github.com/ros2/rclcpp/issues/1571>)
  * Add ParameterEventsSubscriber class (#829 <https://github.com/ros2/rclcpp/issues/829>)
  * When a parameter change is rejected, the parameters map shouldn't be updated. (#1567 <https://github.com/ros2/rclcpp/pull/1567>)
  * Fix when to throw the NoParameterOverrideProvided exception. (#1567 <https://github.com/ros2/rclcpp/pull/1567>)
  * Fix SEGV caused by order of destruction of Node sub-interfaces (#1469 <https://github.com/ros2/rclcpp/issues/1469>)
  * Fix benchmark test failure introduced in #1522 <https://github.com/ros2/rclcpp/issues/1522> (#1564 <https://github.com/ros2/rclcpp/issues/1564>)
  * Fix documented example in create_publisher (#1558 <https://github.com/ros2/rclcpp/issues/1558>)
  * Enforce static parameter types (#1522 <https://github.com/ros2/rclcpp/issues/1522>)
  * Allow timers to keep up the intended rate in MultiThreadedExecutor (#1516 <https://github.com/ros2/rclcpp/issues/1516>)
  * Fix UBSAN warnings in any_subscription_callback. (#1551 <https://github.com/ros2/rclcpp/issues/1551>)
  * Fix runtime error: reference binding to null pointer of type (#1547 <https://github.com/ros2/rclcpp/issues/1547>)
  * Contributors: Andrea Sorbini, Chris Lalancette, Colin MacKenzie, Ivan Santiago Paunovic, Jacob Perron, Steven! Ragnarök, bpwilcox, tomoya
.
ros-rolling-rclcpp (6.3.1-1jammy) jammy; urgency=high
.
  * Reference test resources directly from source tree (#1543 <https://github.com/ros2/rclcpp/issues/1543>)
  * clear statistics after window reset (#1531 <https://github.com/ros2/rclcpp/issues/1531>) (#1535 <https://github.com/ros2/rclcpp/issues/1535>)
  * Fix a minor string error in the topic_statistics test. (#1541 <https://github.com/ros2/rclcpp/issues/1541>)
  * Avoid Resource deadlock avoided if use intra_process_comms (#1530 <https://github.com/ros2/rclcpp/issues/1530>)
  * Avoid an object copy in parameter_value.cpp. (#1538 <https://github.com/ros2/rclcpp/issues/1538>)
  * Assert that the publisher_list size is 1. (#1537 <https://github.com/ros2/rclcpp/issues/1537>)
  * Don't access objects after they have been std::move (#1536 <https://github.com/ros2/rclcpp/issues/1536>)
  * Update for checking correct variable (#1534 <https://github.com/ros2/rclcpp/issues/1534>)
  * Destroy msg extracted from LoanedMessage. (#1305 <https://github.com/ros2/rclcpp/issues/1305>)
  * Contributors: Chen Lihui, Chris Lalancette, Ivan Santiago Paunovic, Miaofei Mei, Scott K Logan, William Woodall, hsgwa
.
ros-rolling-rclcpp (6.3.0-1jammy) jammy; urgency=high
.
  * Add instrumentation for linking a timer to a node (#1500 <https://github.com/ros2/rclcpp/issues/1500>)
  * Fix error when using IPC with StaticSingleThreadExecutor (#1520 <https://github.com/ros2/rclcpp/issues/1520>)
  * Change to using unique_ptrs for DummyExecutor. (#1517 <https://github.com/ros2/rclcpp/issues/1517>)
  * Allow reconfiguring 'clock' topic qos (#1512 <https://github.com/ros2/rclcpp/issues/1512>)
  * Allow to add/remove nodes thread safely in rclcpp::Executor  (#1505 <https://github.com/ros2/rclcpp/issues/1505>)
  * Call rclcpp::shutdown in test_node for clean shutdown on Windows (#1515 <https://github.com/ros2/rclcpp/issues/1515>)
  * Reapply "Add get_logging_directory method to rclcpp::Logger (#1509 <https://github.com/ros2/rclcpp/issues/1509>)" (#1513 <https://github.com/ros2/rclcpp/issues/1513>)
  * use describe_parameters of parameter client for test (#1499 <https://github.com/ros2/rclcpp/issues/1499>)
  * Revert "Add get_logging_directory method to rclcpp::Logger (#1509 <https://github.com/ros2/rclcpp/issues/1509>)" (#1511 <https://github.com/ros2/rclcpp/issues/1511>)
  * Add get_logging_directory method to rclcpp::Logger (#1509 <https://github.com/ros2/rclcpp/issues/1509>)
  * Contributors: Chris Lalancette, Christophe Bedard, Ivan Santiago Paunovic, eboasson, mauropasse, tomoya
.
ros-rolling-rclcpp (6.2.0-1jammy) jammy; urgency=high
.
  * Better documentation for the QoS class (#1508 <https://github.com/ros2/rclcpp/issues/1508>)
  * Modify excluding callback duration from topic statistics (#1492 <https://github.com/ros2/rclcpp/issues/1492>)
  * Make the test of graph users more robust. (#1504 <https://github.com/ros2/rclcpp/issues/1504>)
  * Make sure to wait for graph change events in test_node_graph. (#1503 <https://github.com/ros2/rclcpp/issues/1503>)
  * add timeout to SyncParametersClient methods (#1493 <https://github.com/ros2/rclcpp/issues/1493>)
  * Fix wrong test expectations (#1497 <https://github.com/ros2/rclcpp/issues/1497>)
  * Update create_publisher/subscription documentation, clarifying when a parameters interface is required (#1494 <https://github.com/ros2/rclcpp/issues/1494>)
  * Fix string literal warnings (#1442 <https://github.com/ros2/rclcpp/issues/1442>)
  * support describe_parameters methods to parameter client. (#1453 <https://github.com/ros2/rclcpp/issues/1453>)
  * Contributors: Audrow Nash, Chris Lalancette, Ivan Santiago Paunovic, Nikolai Morin, hsgwa, tomoya
.
ros-rolling-rclcpp (6.1.0-1jammy) jammy; urgency=high
.
  * Add getters to rclcpp::qos and rclcpp::Policy enum classes (#1467 <https://github.com/ros2/rclcpp/issues/1467>)
  * Change nullptr checks to use ASSERT_TRUE. (#1486 <https://github.com/ros2/rclcpp/issues/1486>)
  * Adjust logic around finding and erasing guard_condition (#1474 <https://github.com/ros2/rclcpp/issues/1474>)
  * Update QDs to QL 1 (#1477 <https://github.com/ros2/rclcpp/issues/1477>)
  * Add performance tests for parameter transport (#1463 <https://github.com/ros2/rclcpp/issues/1463>)
  * Contributors: Chris Lalancette, Ivan Santiago Paunovic, Scott K Logan, Stephen Brawner
.
ros-rolling-rclcpp (6.0.0-1jammy) jammy; urgency=high
.
  * Move ownership of shutdown_guard_condition to executors/graph_listener (#1404 <https://github.com/ros2/rclcpp/issues/1404>)
  * Add options to automatically declare qos parameters when creating a publisher/subscription (#1465 <https://github.com/ros2/rclcpp/issues/1465>)
  * Add take_data to Waitable and data to AnyExecutable (#1241 <https://github.com/ros2/rclcpp/issues/1241>)
  * Add benchmarks for node parameters interface (#1444 <https://github.com/ros2/rclcpp/issues/1444>)
  * Remove allocation from executor::remove_node() (#1448 <https://github.com/ros2/rclcpp/issues/1448>)
  * Fix test crashes on CentOS 7 (#1449 <https://github.com/ros2/rclcpp/issues/1449>)
  * Bump rclcpp packages to Quality Level 2 (#1445 <https://github.com/ros2/rclcpp/issues/1445>)
  * Added executor benchmark tests (#1413 <https://github.com/ros2/rclcpp/issues/1413>)
  * Add fully-qualified namespace to WeakCallbackGroupsToNodesMap (#1435 <https://github.com/ros2/rclcpp/issues/1435>)
  * Contributors: Alejandro Hernández Cordero, Audrow Nash, Chris Lalancette, Ivan Santiago Paunovic, Louise Poubel, Scott K Logan, brawner
.
ros-rolling-rclcpp (5.1.0-1jammy) jammy; urgency=high
.
  * Deprecate Duration(rcl_duration_value_t) in favor of static Duration::from_nanoseconds(rcl_duration_value_t) (#1432 <https://github.com/ros2/rclcpp/issues/1432>)
  * Avoid parsing arguments twice in rclcpp::init_and_remove_ros_arguments (#1415 <https://github.com/ros2/rclcpp/issues/1415>)
  * Add service and client benchmarks (#1425 <https://github.com/ros2/rclcpp/issues/1425>)
  * Set CMakeLists to only use default rmw for benchmarks (#1427 <https://github.com/ros2/rclcpp/issues/1427>)
  * Update tracetools' QL in rclcpp's QD (#1428 <https://github.com/ros2/rclcpp/issues/1428>)
  * Add missing locking to the rclcpp_action::ServerBase. (#1421 <https://github.com/ros2/rclcpp/issues/1421>)
  * Initial benchmark tests for rclcpp::init/shutdown create/destroy node (#1411 <https://github.com/ros2/rclcpp/issues/1411>)
  * Refactor test CMakeLists in prep for benchmarks (#1422 <https://github.com/ros2/rclcpp/issues/1422>)
  * Add methods in topic and service interface to resolve a name (#1410 <https://github.com/ros2/rclcpp/issues/1410>)
  * Update deprecated gtest macros (#1370 <https://github.com/ros2/rclcpp/issues/1370>)
  * Clear members for StaticExecutorEntitiesCollector to avoid shared_ptr dependency (#1303 <https://github.com/ros2/rclcpp/issues/1303>)
  * Increase test timeouts of slow running tests with rmw_connext_cpp (#1400 <https://github.com/ros2/rclcpp/issues/1400>)
  * Avoid self dependency that not destoryed (#1301 <https://github.com/ros2/rclcpp/issues/1301>)
  * Update maintainers (#1384 <https://github.com/ros2/rclcpp/issues/1384>)
  * Add clock qos to node options (#1375 <https://github.com/ros2/rclcpp/issues/1375>)
  * Fix NodeOptions copy constructor (#1376 <https://github.com/ros2/rclcpp/issues/1376>)
  * Make sure to clean the external client/service handle. (#1296 <https://github.com/ros2/rclcpp/issues/1296>)
  * Increase coverage of WaitSetTemplate (#1368 <https://github.com/ros2/rclcpp/issues/1368>)
  * Increase coverage of guard_condition.cpp to 100% (#1369 <https://github.com/ros2/rclcpp/issues/1369>)
  * Add coverage statement (#1367 <https://github.com/ros2/rclcpp/issues/1367>)
  * Tests for LoanedMessage with mocked loaned message publisher (#1366 <https://github.com/ros2/rclcpp/issues/1366>)
  * Add unit tests for qos and qos_event files (#1352 <https://github.com/ros2/rclcpp/issues/1352>)
  * Finish coverage of publisher API (#1365 <https://github.com/ros2/rclcpp/issues/1365>)
  * Finish API coverage on executors. (#1364 <https://github.com/ros2/rclcpp/issues/1364>)
  * Add test for ParameterService (#1355 <https://github.com/ros2/rclcpp/issues/1355>)
  * Add time API coverage tests (#1347 <https://github.com/ros2/rclcpp/issues/1347>)
  * Add timer coverage tests (#1363 <https://github.com/ros2/rclcpp/issues/1363>)
  * Add in additional tests for parameter_client.cpp coverage.
  * Minor fixes to the parameter_service.cpp file.
  * reset rcl_context shared_ptr after calling rcl_init sucessfully (#1357 <https://github.com/ros2/rclcpp/issues/1357>)
  * Improved test publisher - zero qos history depth value exception (#1360 <https://github.com/ros2/rclcpp/issues/1360>)
  * Covered resolve_use_intra_process (#1359 <https://github.com/ros2/rclcpp/issues/1359>)
  * Improve test_subscription_options (#1358 <https://github.com/ros2/rclcpp/issues/1358>)
  * Add in more tests for init_options coverage. (#1353 <https://github.com/ros2/rclcpp/issues/1353>)
  * Test the remaining node public API (#1342 <https://github.com/ros2/rclcpp/issues/1342>)
  * Complete coverage of Parameter and ParameterValue API (#1344 <https://github.com/ros2/rclcpp/issues/1344>)
  * Add in more tests for the utilities. (#1349 <https://github.com/ros2/rclcpp/issues/1349>)
  * Add in two more tests for expand_topic_or_service_name. (#1350 <https://github.com/ros2/rclcpp/issues/1350>)
  * Add tests for node_options API (#1343 <https://github.com/ros2/rclcpp/issues/1343>)
  * Add in more coverage for expand_topic_or_service_name. (#1346 <https://github.com/ros2/rclcpp/issues/1346>)
  * Test exception in spin_until_future_complete. (#1345 <https://github.com/ros2/rclcpp/issues/1345>)
  * Add coverage tests graph_listener (#1330 <https://github.com/ros2/rclcpp/issues/1330>)
  * Add in unit tests for the Executor class.
  * Allow mimick patching of methods with up to 9 arguments.
  * Improve the error messages in the Executor class.
  * Add coverage for client API (#1329 <https://github.com/ros2/rclcpp/issues/1329>)
  * Increase service coverage (#1332 <https://github.com/ros2/rclcpp/issues/1332>)
  * Make more of the static entity collector API private.
  * Const-ify more of the static executor.
  * Add more tests for the static single threaded executor.
  * Many more tests for the static_executor_entities_collector.
  * Get one more line of code coverage in memory_strategy.cpp
  * Bugfix when adding callback group.
  * Fix typos in comments.
  * Remove deprecated executor::FutureReturnCode APIs. (#1327 <https://github.com/ros2/rclcpp/issues/1327>)
  * Increase coverage of publisher/subscription API (#1325 <https://github.com/ros2/rclcpp/issues/1325>)
  * Not finalize guard condition while destructing SubscriptionIntraProcess (#1307 <https://github.com/ros2/rclcpp/issues/1307>)
  * Expose qos setting for /rosout (#1247 <https://github.com/ros2/rclcpp/issues/1247>)
  * Add coverage for missing API (except executors) (#1326 <https://github.com/ros2/rclcpp/issues/1326>)
  * Include topic name in QoS mismatch warning messages (#1286 <https://github.com/ros2/rclcpp/issues/1286>)
  * Add coverage tests context functions (#1321 <https://github.com/ros2/rclcpp/issues/1321>)
  * Increase coverage of node_interfaces, including with mocking rcl errors (#1322 <https://github.com/ros2/rclcpp/issues/1322>)
  * Contributors: Ada-King, Alejandro Hernández Cordero, Audrow Nash, Barry Xu, Chen Lihui, Chris Lalancette, Christophe Bedard, Ivan Santiago Paunovic, Jorge Perez, Morgan Quigley, brawner
.
ros-rolling-rclcpp (5.0.0-1jammy) jammy; urgency=high
.
  * Make node_graph::count_graph_users() const (#1320 <https://github.com/ros2/rclcpp/issues/1320>)
  * Add coverage for wait_set_policies (#1316 <https://github.com/ros2/rclcpp/issues/1316>)
  * Only exchange intra_process waitable if nonnull (#1317 <https://github.com/ros2/rclcpp/issues/1317>)
  * Check waitable for nullptr during constructor (#1315 <https://github.com/ros2/rclcpp/issues/1315>)
  * Call vector.erase with end iterator overload (#1314 <https://github.com/ros2/rclcpp/issues/1314>)
  * Use best effort, keep last, history depth 1 QoS Profile for '/clock' subscriptions (#1312 <https://github.com/ros2/rclcpp/issues/1312>)
  * Add tests type_support module (#1308 <https://github.com/ros2/rclcpp/issues/1308>)
  * Replace std_msgs with test_msgs in executors test (#1310 <https://github.com/ros2/rclcpp/issues/1310>)
  * Add set_level for rclcpp::Logger (#1284 <https://github.com/ros2/rclcpp/issues/1284>)
  * Remove unused private function (rclcpp::Node and rclcpp_lifecycle::Node) (#1294 <https://github.com/ros2/rclcpp/issues/1294>)
  * Adding tests basic getters (#1291 <https://github.com/ros2/rclcpp/issues/1291>)
  * Adding callback groups in executor (#1218 <https://github.com/ros2/rclcpp/issues/1218>)
  * Refactor Subscription Topic Statistics Tests (#1281 <https://github.com/ros2/rclcpp/issues/1281>)
  * Add operator!= for duration (#1236 <https://github.com/ros2/rclcpp/issues/1236>)
  * Fix clock thread issue (#1266 <https://github.com/ros2/rclcpp/issues/1266>) (#1267 <https://github.com/ros2/rclcpp/issues/1267>)
  * Fix topic stats test, wait for more messages, only check the ones with samples (#1274 <https://github.com/ros2/rclcpp/issues/1274>)
  * Add get_domain_id method to rclcpp::Context (#1271 <https://github.com/ros2/rclcpp/issues/1271>)
  * Fixes for unit tests that fail under cyclonedds (#1270 <https://github.com/ros2/rclcpp/issues/1270>)
  * initialize_logging_ should be copied (#1272 <https://github.com/ros2/rclcpp/issues/1272>)
  * Use static_cast instead of C-style cast for instrumentation (#1263 <https://github.com/ros2/rclcpp/issues/1263>)
  * Make parameter clients use template constructors (#1249 <https://github.com/ros2/rclcpp/issues/1249>)
  * Ability to configure domain_id via InitOptions. (#1165 <https://github.com/ros2/rclcpp/issues/1165>)
  * Simplify and fix allocator memory strategy unit test for connext (#1252 <https://github.com/ros2/rclcpp/issues/1252>)
  * Use global namespace for parameter events subscription topic (#1257 <https://github.com/ros2/rclcpp/issues/1257>)
  * Increase timeouts for connext for long tests (#1253 <https://github.com/ros2/rclcpp/issues/1253>)
  * Adjust test_static_executor_entities_collector for rmw_connext_cpp (#1251 <https://github.com/ros2/rclcpp/issues/1251>)
  * Fix failing test with Connext since it doesn't wait for discovery (#1246 <https://github.com/ros2/rclcpp/issues/1246>)
  * Fix node graph test with Connext and CycloneDDS returning actual data (#1245 <https://github.com/ros2/rclcpp/issues/1245>)
  * Warn about unused result of add_on_set_parameters_callback (#1238 <https://github.com/ros2/rclcpp/issues/1238>)
  * Unittests for memory strategy files, except allocator_memory_strategy (#1189 <https://github.com/ros2/rclcpp/issues/1189>)
  * EXPECT_THROW_EQ and ASSERT_THROW_EQ macros for unittests (#1232 <https://github.com/ros2/rclcpp/issues/1232>)
  * Add unit test for static_executor_entities_collector (#1221 <https://github.com/ros2/rclcpp/issues/1221>)
  * Parameterize test executors for all executor types (#1222 <https://github.com/ros2/rclcpp/issues/1222>)
  * Unit tests for allocator_memory_strategy.cpp part 2 (#1198 <https://github.com/ros2/rclcpp/issues/1198>)
  * Unit tests for allocator_memory_strategy.hpp (#1197 <https://github.com/ros2/rclcpp/issues/1197>)
  * Derive and throw exception in spin_some spin_all for StaticSingleThreadedExecutor (#1220 <https://github.com/ros2/rclcpp/issues/1220>)
  * Make ring buffer thread-safe (#1213 <https://github.com/ros2/rclcpp/issues/1213>)
  * Add missing RCLCPP_PUBLIC to ~StaticExecutorEntitiesCollector (#1227 <https://github.com/ros2/rclcpp/issues/1227>)
  * Document graph functions don't apply remap rules (#1225 <https://github.com/ros2/rclcpp/issues/1225>)
  * Remove recreation of entities_collector (#1217 <https://github.com/ros2/rclcpp/issues/1217>)
  * Contributors: Audrow Nash, Chen Lihui, Christophe Bedard, Daisuke Sato, Devin Bonnie, Dirk Thomas, Ivan Santiago Paunovic, Jacob Perron, Jannik Abbenseth, Jorge Perez, Pedro Pena, Shane Loretz, Stephen Brawner, Tomoya Fujita
.
ros-rolling-rclcpp (4.0.0-1jammy) jammy; urgency=high
.
  * Fix rclcpp::NodeOptions::operator= (#1211 <https://github.com/ros2/rclcpp/issues/1211>)
  * Link against thread library where necessary (#1210 <https://github.com/ros2/rclcpp/issues/1210>)
  * Unit tests for node interfaces (#1202 <https://github.com/ros2/rclcpp/issues/1202>)
  * Remove usage of domain id in node options (#1205 <https://github.com/ros2/rclcpp/issues/1205>)
  * Remove deprecated set_on_parameters_set_callback function (#1199 <https://github.com/ros2/rclcpp/issues/1199>)
  * Fix conversion of negative durations to messages (#1188 <https://github.com/ros2/rclcpp/issues/1188>)
  * Fix implementation of NodeOptions::use_global_arguments() (#1176 <https://github.com/ros2/rclcpp/issues/1176>)
  * Bump to QD to level 3 and fixed links (#1158 <https://github.com/ros2/rclcpp/issues/1158>)
  * Fix pub/sub count API tests (#1203 <https://github.com/ros2/rclcpp/issues/1203>)
  * Update tracetools' QL to 2 in rclcpp's QD (#1187 <https://github.com/ros2/rclcpp/issues/1187>)
  * Fix exception message on rcl_clock_init (#1182 <https://github.com/ros2/rclcpp/issues/1182>)
  * Throw exception if rcl_timer_init fails (#1179 <https://github.com/ros2/rclcpp/issues/1179>)
  * Unit tests for some header-only functions/classes (#1181 <https://github.com/ros2/rclcpp/issues/1181>)
  * Callback should be perfectly-forwarded (#1183 <https://github.com/ros2/rclcpp/issues/1183>)
  * Add unit tests for logging functionality (#1184 <https://github.com/ros2/rclcpp/issues/1184>)
  * Add create_publisher include to create_subscription (#1180 <https://github.com/ros2/rclcpp/issues/1180>)
  * Contributors: Alejandro Hernández Cordero, Christophe Bedard, Claire Wang, Dirk Thomas, Ivan Santiago Paunovic, Johannes Meyer, Michel Hidalgo, Stephen Brawner, tomoya
.
ros-rolling-rclcpp (3.0.0-1jammy) jammy; urgency=high
.
  * Check period duration in create_wall_timer (#1178 <https://github.com/ros2/rclcpp/issues/1178>)
  * Fix get_node_time_source_interface() docstring (#988 <https://github.com/ros2/rclcpp/issues/988>)
  * Add message lost subscription event (#1164 <https://github.com/ros2/rclcpp/issues/1164>)
  * Add spin_all method to Executor (#1156 <https://github.com/ros2/rclcpp/issues/1156>)
  * Reorganize test directory and split CMakeLists.txt (#1173 <https://github.com/ros2/rclcpp/issues/1173>)
  * Check if context is valid when looping in spin_some (#1167 <https://github.com/ros2/rclcpp/issues/1167>)
  * Add check for invalid topic statistics publish period (#1151 <https://github.com/ros2/rclcpp/issues/1151>)
  * Fix spin_until_future_complete: check spinning value (#1023 <https://github.com/ros2/rclcpp/issues/1023>)
  * Fix doxygen warnings (#1163 <https://github.com/ros2/rclcpp/issues/1163>)
  * Fix reference to rclcpp in its Quality declaration (#1161 <https://github.com/ros2/rclcpp/issues/1161>)
  * Allow spin_until_future_complete to accept any future like object (#1113 <https://github.com/ros2/rclcpp/issues/1113>)
  * Contributors: Alejandro Hernández Cordero, Christophe Bedard, Devin Bonnie, Dirk Thomas, DongheeYe, Ivan Santiago Paunovic, Jacob Perron, Sarthak Mittal, brawner, tomoya
.
ros-rolling-rclcpp (2.0.0-1jammy) jammy; urgency=high
.
  * Added missing virtual destructors. (#1149 <https://github.com/ros2/rclcpp/issues/1149>)
  * Fixed a test which was using different types on the same topic. (#1150 <https://github.com/ros2/rclcpp/issues/1150>)
  * Made ``test_rate`` more reliable on Windows and improve error output when it fails (#1146 <https://github.com/ros2/rclcpp/issues/1146>)
  * Added Security Vulnerability Policy pointing to REP-2006. (#1130 <https://github.com/ros2/rclcpp/issues/1130>)
  * Added missing header in ``logging_mutex.cpp``. (#1145 <https://github.com/ros2/rclcpp/issues/1145>)
  * Changed the WaitSet API to pass a shared pointer by value instead than by const reference when possible. (#1141 <https://github.com/ros2/rclcpp/issues/1141>)
  * Changed ``SubscriptionBase::get_subscription_handle() const`` to return a shared pointer to const value. (#1140 <https://github.com/ros2/rclcpp/issues/1140>)
  * Extended the lifetime of ``rcl_publisher_t`` by holding onto the shared pointer in order to avoid a use after free situation. (#1119 <https://github.com/ros2/rclcpp/issues/1119>)
  * Improved some docblocks (#1127 <https://github.com/ros2/rclcpp/issues/1127>)
  * Fixed a lock-order-inversion (potential deadlock) (#1135 <https://github.com/ros2/rclcpp/issues/1135>)
  * Fixed a potential Construction/Destruction order problem between global contexts vector and Context of static lifetime (#1132 <https://github.com/ros2/rclcpp/issues/1132>)
  * Contributors: Alejandro Hernández Cordero, Chris Lalancette, Ivan Santiago Paunovic, Michel Hidalgo, tomoya
.
ros-rolling-rclcpp (1.1.0-1jammy) jammy; urgency=high
.
  * Deprecate set_on_parameters_set_callback (#1123 <https://github.com/ros2/rclcpp/issues/1123>)
  * Expose get_service_names_and_types_by_node from rcl in rclcpp (#1131 <https://github.com/ros2/rclcpp/issues/1131>)
  * Fix thread safety issues related to logging (#1125 <https://github.com/ros2/rclcpp/issues/1125>)
  * Make sure rmw_publisher_options is initialized in to_rcl_publisher_options (#1099 <https://github.com/ros2/rclcpp/issues/1099>)
  * Remove empty lines within method signatures (#1128 <https://github.com/ros2/rclcpp/issues/1128>)
  * Add API review March 2020 document (#1031 <https://github.com/ros2/rclcpp/issues/1031>)
  * Improve documentation (#1106 <https://github.com/ros2/rclcpp/issues/1106>)
  * Make test multi threaded executor more reliable (#1105 <https://github.com/ros2/rclcpp/issues/1105>)
  * Fixed rep links and added more details to dependencies in quality declaration (#1116 <https://github.com/ros2/rclcpp/issues/1116>)
  * Update quality declarations to reflect version 1.0 (#1115 <https://github.com/ros2/rclcpp/issues/1115>)
  * Contributors: Alejandro Hernández Cordero, ChenYing Kuo, Claire Wang, Dirk Thomas, Ivan Santiago Paunovic, William Woodall, Stephen Brawner
.
ros-rolling-rclcpp (1.0.0-1jammy) jammy; urgency=high
.
  * Remove MANUAL_BY_NODE liveliness API (#1107 <https://github.com/ros2/rclcpp/issues/1107>)
  * Use rosidl_default_generators dependency in test (#1114 <https://github.com/ros2/rclcpp/issues/1114>)
  * Make sure to include what you use (#1112 <https://github.com/ros2/rclcpp/issues/1112>)
  * Mark flaky test with xfail: TestMultiThreadedExecutor (#1109 <https://github.com/ros2/rclcpp/issues/1109>)
  * Contributors: Chris Lalancette, Ivan Santiago Paunovic, Karsten Knese, Louise Poubel
.
ros-rolling-rclcpp (0.9.1-1jammy) jammy; urgency=high
.
  * Fix tests that were not properly torn down (#1073 <https://github.com/ros2/rclcpp/issues/1073>)
  * Added docblock in rclcpp (#1103 <https://github.com/ros2/rclcpp/issues/1103>)
  * Added Quality declaration: rclcpp, rclpp_action, rclcpp_components andrclcpp_lifecycle (#1100 <https://github.com/ros2/rclcpp/issues/1100>)
  * Use RCL_RET_SERVICE_TAKE_FAILED and not RCL_RET_CLIENT_TAKE_FAILED when checking a request take (#1101 <https://github.com/ros2/rclcpp/issues/1101>)
  * Update comment about return value in Executor::get_next_ready_executable (#1085 <https://github.com/ros2/rclcpp/issues/1085>)
  * Contributors: Alejandro Hernández Cordero, Christophe Bedard, Devin Bonnie, Ivan Santiago Paunovic
.
ros-rolling-rclcpp (0.9.0-1jammy) jammy; urgency=high
.
  * Serialized message move constructor (#1097 <https://github.com/ros2/rclcpp/issues/1097>)
  * Enforce a precedence for wildcard matching in parameter overrides. (#1094 <https://github.com/ros2/rclcpp/issues/1094>)
  * Add serialized_message.hpp header (#1095 <https://github.com/ros2/rclcpp/issues/1095>)
  * Add received message age metric to topic statistics (#1080 <https://github.com/ros2/rclcpp/issues/1080>)
  * Deprecate redundant namespaces (#1083 <https://github.com/ros2/rclcpp/issues/1083>)
  * Export targets in addition to include directories / libraries (#1088 <https://github.com/ros2/rclcpp/issues/1088>)
  * Ensure logging is initialized just once (#998 <https://github.com/ros2/rclcpp/issues/998>)
  * Adapt subscription traits to rclcpp::SerializedMessage (#1092 <https://github.com/ros2/rclcpp/issues/1092>)
  * Protect subscriber_statistics_collectors_ with a mutex (#1084 <https://github.com/ros2/rclcpp/issues/1084>)
  * Remove unused test variable (#1087 <https://github.com/ros2/rclcpp/issues/1087>)
  * Use serialized message (#1081 <https://github.com/ros2/rclcpp/issues/1081>)
  * Integrate topic statistics (#1072 <https://github.com/ros2/rclcpp/issues/1072>)
  * Fix rclcpp interface traits test (#1086 <https://github.com/ros2/rclcpp/issues/1086>)
  * Generate node interfaces' getters and traits (#1069 <https://github.com/ros2/rclcpp/issues/1069>)
  * Use composition for serialized message (#1082 <https://github.com/ros2/rclcpp/issues/1082>)
  * Dnae adas/serialized message (#1075 <https://github.com/ros2/rclcpp/issues/1075>)
  * Reflect changes in rclcpp API (#1079 <https://github.com/ros2/rclcpp/issues/1079>)
  * Fix build regression (#1078 <https://github.com/ros2/rclcpp/issues/1078>)
  * Add NodeDefault option for enabling topic statistics (#1074 <https://github.com/ros2/rclcpp/issues/1074>)
  * Topic Statistics: Add SubscriptionTopicStatistics class (#1050 <https://github.com/ros2/rclcpp/issues/1050>)
  * Add SubscriptionOptions for topic statistics (#1057 <https://github.com/ros2/rclcpp/issues/1057>)
  * Remove warning message from failing to register default callback (#1067 <https://github.com/ros2/rclcpp/issues/1067>)
  * Create a default warning for qos incompatibility (#1051 <https://github.com/ros2/rclcpp/issues/1051>)
  * Add WaitSet class and modify entities to work without executor (#1047 <https://github.com/ros2/rclcpp/issues/1047>)
  * Include what you use (#1059 <https://github.com/ros2/rclcpp/issues/1059>)
  * Rename rosidl_generator_cpp namespace to rosidl_runtime_cpp (#1060 <https://github.com/ros2/rclcpp/issues/1060>)
  * Changed rosidl_generator_c/cpp to rosidl_runtime_c/cpp (#1014 <https://github.com/ros2/rclcpp/issues/1014>)
  * Use constexpr for endpoint type name (#1055 <https://github.com/ros2/rclcpp/issues/1055>)
  * Add InvalidParameterTypeException (#1027 <https://github.com/ros2/rclcpp/issues/1027>)
  * Support for ON_REQUESTED_INCOMPATIBLE_QOS and ON_OFFERED_INCOMPATIBLE_QOS events (#924 <https://github.com/ros2/rclcpp/issues/924>)
  * Fixup clang warning (#1040 <https://github.com/ros2/rclcpp/issues/1040>)
  * Adding a "static" single threaded executor (#1034 <https://github.com/ros2/rclcpp/issues/1034>)
  * Add equality operators for QoS profile (#1032 <https://github.com/ros2/rclcpp/issues/1032>)
  * Remove extra vertical whitespace (#1030 <https://github.com/ros2/rclcpp/issues/1030>)
  * Switch IntraProcessMessage to test_msgs/Empty (#1017 <https://github.com/ros2/rclcpp/issues/1017>)
  * Add new type of exception that may be thrown during creation of publisher/subscription (#1026 <https://github.com/ros2/rclcpp/issues/1026>)
  * Don't check lifespan on publisher QoS (#1002 <https://github.com/ros2/rclcpp/issues/1002>)
  * Fix get_parameter_tyeps of AsyncPrameterClient results are always empty (#1019 <https://github.com/ros2/rclcpp/issues/1019>)
  * Cleanup node interfaces includes (#1016 <https://github.com/ros2/rclcpp/issues/1016>)
  * Add ifdefs to remove tracing-related calls if tracing is disabled (#1001 <https://github.com/ros2/rclcpp/issues/1001>)
  * Include missing header in node_graph.cpp (#994 <https://github.com/ros2/rclcpp/issues/994>)
  * Add missing includes of logging.hpp (#995 <https://github.com/ros2/rclcpp/issues/995>)
  * Zero initialize publisher GID in subscription intra process callback (#1011 <https://github.com/ros2/rclcpp/issues/1011>)
  * Removed ament_cmake dependency (#989 <https://github.com/ros2/rclcpp/issues/989>)
  * Switch to using new rcutils_strerror (#993 <https://github.com/ros2/rclcpp/issues/993>)
  * Ensure all rclcpp::Clock accesses are thread-safe
  * Use a PIMPL for rclcpp::Clock implementation
  * Replace rmw_implementation for rmw dependency in package.xml (#990 <https://github.com/ros2/rclcpp/issues/990>)
  * Add missing service callback registration tracepoint (#986 <https://github.com/ros2/rclcpp/issues/986>)
  * Rename rmw_topic_endpoint_info_array count to size (#996 <https://github.com/ros2/rclcpp/issues/996>)
  * Implement functions to get publisher and subcription informations like QoS policies from topic name (#960 <https://github.com/ros2/rclcpp/issues/960>)
  * Code style only: wrap after open parenthesis if not in one line (#977 <https://github.com/ros2/rclcpp/issues/977>)
  * Accept taking an rvalue ref future in spin_until_future_complete (#971 <https://github.com/ros2/rclcpp/issues/971>)
  * Allow node clock use in logging macros (#969 <https://github.com/ros2/rclcpp/issues/969>) (#970 <https://github.com/ros2/rclcpp/issues/970>)
  * Change order of deprecated and visibility attributes (#968 <https://github.com/ros2/rclcpp/issues/968>)
  * Deprecated is_initialized() (#967 <https://github.com/ros2/rclcpp/issues/967>)
  * Don't specify calling convention in std::_Binder template (#952 <https://github.com/ros2/rclcpp/issues/952>)
  * Added missing include to logging.hpp (#964 <https://github.com/ros2/rclcpp/issues/964>)
  * Assigning make_shared result to variables in test (#963 <https://github.com/ros2/rclcpp/issues/963>)
  * Fix unused parameter warning (#962 <https://github.com/ros2/rclcpp/issues/962>)
  * Stop retaining ownership of the rcl context in GraphListener (#946 <https://github.com/ros2/rclcpp/issues/946>)
  * Clear sub contexts when starting another init-shutdown cycle (#947 <https://github.com/ros2/rclcpp/issues/947>)
  * Avoid possible UB in Clock jump callbacks (#954 <https://github.com/ros2/rclcpp/issues/954>)
  * Handle unknown global ROS arguments (#951 <https://github.com/ros2/rclcpp/issues/951>)
  * Mark get_clock() as override to fix clang warnings (#939 <https://github.com/ros2/rclcpp/issues/939>)
  * Create node clock calls const (try 2) (#922 <https://github.com/ros2/rclcpp/issues/922>)
  * Fix asserts on shared_ptr::use_count; expects long, got uint32 (#936 <https://github.com/ros2/rclcpp/issues/936>)
  * Use absolute topic name for parameter events (#929 <https://github.com/ros2/rclcpp/issues/929>)
  * Add enable_rosout into NodeOptions. (#900 <https://github.com/ros2/rclcpp/issues/900>)
  * Removing "virtual", adding "override" keywords (#897 <https://github.com/ros2/rclcpp/issues/897>)
  * Use weak_ptr to store context in GraphListener (#906 <https://github.com/ros2/rclcpp/issues/906>)
  * Complete published event message when declaring a parameter (#928 <https://github.com/ros2/rclcpp/issues/928>)
  * Fix duration.cpp lint error (#930 <https://github.com/ros2/rclcpp/issues/930>)
  * Intra-process subscriber should use RMW actual qos. (ros2`#913 <https://github.com/ros2/rclcpp/issues/913>`_) (#914 <https://github.com/ros2/rclcpp/issues/914>)
  * Type conversions fixes (#901 <https://github.com/ros2/rclcpp/issues/901>)
  * Add override keyword to functions
  * Remove unnecessary virtual keywords
  * Only check for new work once in spin_some (#471 <https://github.com/ros2/rclcpp/issues/471>) (#844 <https://github.com/ros2/rclcpp/issues/844>)
  * Add addition/subtraction assignment operators to Time (#748 <https://github.com/ros2/rclcpp/issues/748>)
  * Contributors: Alberto Soragna, Alejandro Hernández Cordero, Barry Xu, Chris Lalancette, Christophe Bedard, Claire Wang, Dan Rose, DensoADAS, Devin Bonnie, Dino Hüllmann, Dirk Thomas, DongheeYe, Emerson Knapp, Ivan Santiago Paunovic, Jacob Perron, Jaison Titus, Karsten Knese, Matt Schickler, Miaofei Mei, Michel Hidalgo, Mikael Arguedas, Monika Idzik, Prajakta Gokhale, Roger Strain, Scott K Logan, Sean Kelly, Stephen Brawner, Steven Macenski, Steven! Ragnarök, Todd Malsbary, Tomoya Fujita, William Woodall, Zachary Michaels
.
ros-rolling-rclcpp (0.8.3-1jammy) jammy; urgency=high
.
.
.
ros-rolling-rclcpp (0.8.2-1jammy) jammy; urgency=high
.
  * Updated tracing logic to match changes in rclcpp's intra-process system (#918 <https://github.com/ros2/rclcpp/issues/918>)
  * Fixed a bug that prevented the ``shutdown_on_sigint`` option to not work correctly (#850 <https://github.com/ros2/rclcpp/issues/850>)
  * Added support for STREAM logging macros (#926 <https://github.com/ros2/rclcpp/issues/926>)
  * Relaxed multithreaded test constraint (#907 <https://github.com/ros2/rclcpp/issues/907>)
  * Contributors: Anas Abou Allaban, Christophe Bedard, Dirk Thomas, alexfneves
.
ros-rolling-rclcpp (0.8.1-1jammy) jammy; urgency=high
.
  * De-flake tests for rmw_connext (#899 <https://github.com/ros2/rclcpp/issues/899>)
  * rename return functions for loaned messages (#896 <https://github.com/ros2/rclcpp/issues/896>)
  * Enable throttling logs (#879 <https://github.com/ros2/rclcpp/issues/879>)
  * New Intra-Process Communication (#778 <https://github.com/ros2/rclcpp/issues/778>)
  * Instrumentation update (#789 <https://github.com/ros2/rclcpp/issues/789>)
  * Zero copy api (#864 <https://github.com/ros2/rclcpp/issues/864>)
  * Drop rclcpp remove_ros_arguments_null test case. (#894 <https://github.com/ros2/rclcpp/issues/894>)
  * add mechanism to pass rmw impl specific payloads during pub/sub creation (#882 <https://github.com/ros2/rclcpp/issues/882>)
  * make get_actual_qos return a rclcpp::QoS (#883 <https://github.com/ros2/rclcpp/issues/883>)
  * Fix Compiler Warning (#881 <https://github.com/ros2/rclcpp/issues/881>)
  * Add callback handler for use_sim_time parameter #802 <https://github.com/ros2/rclcpp/issues/802> (#875 <https://github.com/ros2/rclcpp/issues/875>)
  * Contributors: Alberto Soragna, Brian Marchi, Hunter L. Allen, Ingo Lütkebohle, Karsten Knese, Michael Carroll, Michel Hidalgo, William Woodall
.
ros-rolling-rclcpp (0.8.0-1jammy) jammy; urgency=high
.
  * clean up publisher and subscription creation logic (#867 <https://github.com/ros2/rclcpp/issues/867>)
  * Take parameter overrides provided through the CLI. (#865 <https://github.com/ros2/rclcpp/issues/865>)
  * add more context to exception message (#858 <https://github.com/ros2/rclcpp/issues/858>)
  * remove features and related code which were deprecated in dashing (#852 <https://github.com/ros2/rclcpp/issues/852>)
  * check valid timer handler 1st to reduce the time window for scan. (#841 <https://github.com/ros2/rclcpp/issues/841>)
  * Add throwing parameter name if parameter is not set (#833 <https://github.com/ros2/rclcpp/issues/833>)
  * Fix typo in deprecated warning. (#848 <https://github.com/ros2/rclcpp/issues/848>)
  * Fail on invalid and unknown ROS specific arguments (#842 <https://github.com/ros2/rclcpp/issues/842>)
  * Force explicit --ros-args in NodeOptions::arguments(). (#845 <https://github.com/ros2/rclcpp/issues/845>)
  * Use of -r/--remap flags where appropriate. (#834 <https://github.com/ros2/rclcpp/issues/834>)
  * Fix hang with timers in MultiThreadedExecutor (#835 <https://github.com/ros2/rclcpp/issues/835>) (#836 <https://github.com/ros2/rclcpp/issues/836>)
  * add mutex in add/remove_node and wait_for_work to protect concurrent use/change of memory_strategy_ (#837 <https://github.com/ros2/rclcpp/issues/837>)
  * Crash in callback group pointer vector iterator (#814 <https://github.com/ros2/rclcpp/issues/814>)
  * Wrap documentation examples in code blocks (#830 <https://github.com/ros2/rclcpp/issues/830>)
  * add callback group as member variable and constructor arg (#811 <https://github.com/ros2/rclcpp/issues/811>)
  * Fix get_node_interfaces functions taking a pointer (#821 <https://github.com/ros2/rclcpp/issues/821>)
  * Delete unnecessary call for get_node_by_group (#823 <https://github.com/ros2/rclcpp/issues/823>)
  * Allow passing logger by const ref (#820 <https://github.com/ros2/rclcpp/issues/820>)
  * Explain return value of spin_until_future_complete (#792 <https://github.com/ros2/rclcpp/issues/792>)
  * Adapt to '--ros-args ... [--]'-based ROS args extraction (#816 <https://github.com/ros2/rclcpp/issues/816>)
  * Add line break after first open paren in multiline function call (#785 <https://github.com/ros2/rclcpp/issues/785>)
  * remove mock msgs from rclcpp (#800 <https://github.com/ros2/rclcpp/issues/800>)
  * Make TimeSource ignore use_sim_time events coming from other nodes. (#799 <https://github.com/ros2/rclcpp/issues/799>)
  * Allow registering multiple on_parameters_set_callback (#772 <https://github.com/ros2/rclcpp/issues/772>)
  * Add free function for creating service clients (#788 <https://github.com/ros2/rclcpp/issues/788>)
  * Include missing rcl headers in use. (#782 <https://github.com/ros2/rclcpp/issues/782>)
  * Switch the NodeParameters lock to recursive. (#781 <https://github.com/ros2/rclcpp/issues/781>)
  * changed on_parameter_event qos profile to rmw_qos_profile_parameter_events (#774 <https://github.com/ros2/rclcpp/issues/774>)
  * Adding a factory method to create a Duration from seconds (#567 <https://github.com/ros2/rclcpp/issues/567>)
  * Fix a comparison with a sign mismatch (#771 <https://github.com/ros2/rclcpp/issues/771>)
  * delete superfluous spaces (#770 <https://github.com/ros2/rclcpp/issues/770>)
  * Use params from node '/**' from parameter YAML file (#762 <https://github.com/ros2/rclcpp/issues/762>)
  * Add ignore override argument to declare parameter (#767 <https://github.com/ros2/rclcpp/issues/767>)
  * use default parameter descriptor in parameters interface (#765 <https://github.com/ros2/rclcpp/issues/765>)
  * Added support for const member functions (#763 <https://github.com/ros2/rclcpp/issues/763>)
  * add get_actual_qos() feature to subscriptions (#754 <https://github.com/ros2/rclcpp/issues/754>)
  * Ignore parameters overrides in set parameter methods when allowing undeclared parameters (#756 <https://github.com/ros2/rclcpp/issues/756>)
  * Add rclcpp::create_timer() (#757 <https://github.com/ros2/rclcpp/issues/757>)
  * checking origin of intra-process msg before taking them (#753 <https://github.com/ros2/rclcpp/issues/753>)
  * Contributors: Alberto Soragna, Carl Delsey, Chris Lalancette, Dan Rose, Dirk Thomas, Esteve Fernandez, Guillaume Autran, Jacob Perron, Karsten Knese, Luca Della Vedova, M. M, Michel Hidalgo, Scott K Logan, Shane Loretz, Todd Malsbary, William Woodall, bpwilcox, fujitatomoya, ivanpauno
.
ros-rolling-rclcpp (0.7.5-1jammy) jammy; urgency=high
.
  * Avoid 'Intra process message no longer being stored when trying to handle it' warning (#749 <https://github.com/ros2/rclcpp/issues/749>)
  * Contributors: ivanpauno
.
ros-rolling-rclcpp (0.7.4-1jammy) jammy; urgency=high
.
  * Rename parameter options (#745 <https://github.com/ros2/rclcpp/issues/745>)
  * Bionic use of strerror_r (#742 <https://github.com/ros2/rclcpp/issues/742>)
  * Enforce parameter ranges (#735 <https://github.com/ros2/rclcpp/issues/735>)
  * removed not used parameter client (#740 <https://github.com/ros2/rclcpp/issues/740>)
  * ensure removal of guard conditions of expired nodes from memory strategy (#741 <https://github.com/ros2/rclcpp/issues/741>)
  * Fix typo in log warning message (#737 <https://github.com/ros2/rclcpp/issues/737>)
  * Throw nice errors when creating a publisher with intraprocess communication and incompatible qos policy (#729 <https://github.com/ros2/rclcpp/issues/729>)
  * Contributors: Alberto Soragna, Dirk Thomas, Jacob Perron, William Woodall, ivanpauno, roderick-koehle
.
ros-rolling-rclcpp (0.7.3-1jammy) jammy; urgency=high
.
  * Fixed misspelling, volitile -> volatile (#724 <https://github.com/ros2/rclcpp/issues/724>), and then fixed that since it is a C++ keyword to be ``durability_volatile`` (#725 <https://github.com/ros2/rclcpp/issues/725>)
  * Fixed a clang warning (#723 <https://github.com/ros2/rclcpp/issues/723>)
  * Added ``on_parameter_event`` static method to the ``AsyncParametersClient`` (#688 <https://github.com/ros2/rclcpp/issues/688>)
  * Added a guard against ``ParameterNotDeclaredException`` throwing from within the parameter service callbacks. (#718 <https://github.com/ros2/rclcpp/issues/718>)
  * Added missing template functionality to lifecycle_node. (#707 <https://github.com/ros2/rclcpp/issues/707>)
  * Fixed heap-use-after-free and memory leaks reported from ``test_node.cpp`` (#719 <https://github.com/ros2/rclcpp/issues/719>)
  * Contributors: Alberto Soragna, Dirk Thomas, Emerson Knapp, Jacob Perron, Michael Jeronimo, Prajakta Gokhale
.
ros-rolling-rclcpp (0.7.2-1jammy) jammy; urgency=high
.
  * Added new way to specify QoS settings for publishers and subscriptions. (#713 <https://github.com/ros2/rclcpp/issues/713>)
    * The new way requires that you specify a history depth when creating a publisher or subscription.
    * In the past it was possible to create one without specifying any history depth, but these signatures have been deprecated.
  * Deprecated ``shared_ptr`` and raw pointer versions of ``Publisher<T>::publish()``. (#709 <https://github.com/ros2/rclcpp/issues/709>)
  * Implemented API to set callbacks for liveliness and deadline QoS events for publishers and subscriptions. (#695 <https://github.com/ros2/rclcpp/issues/695>)
  * Fixed a segmentation fault when publishing a parameter event when they ought to be disabled. (#714 <https://github.com/ros2/rclcpp/issues/714>)
  * Changes required for upcoming pre-allocation API. (#711 <https://github.com/ros2/rclcpp/issues/711>)
  * Changed ``Node::get_node_names()`` to return the full node names rather than just the base name. (#698 <https://github.com/ros2/rclcpp/issues/698>)
  * Remove logic made redundant by the ros2/rcl#255 <https://github.com/ros2/rcl/issues/255> pull request. (#712 <https://github.com/ros2/rclcpp/issues/712>)
  * Various improvements for ``rclcpp::Clock``. (#696 <https://github.com/ros2/rclcpp/issues/696>)
    * Fixed uninitialized bool in ``clock.cpp``.
    * Fixed up includes of ``clock.hpp/cpp``.
    * Added documentation for exceptions to ``clock.hpp``.
    * Adjusted function signature of getters of ``clock.hpp/cpp``.
    * Removed raw pointers to ``Clock::create_jump_callback``.
    * Removed unnecessary ``rclcpp`` namespace reference from ``clock.cpp``.
    * Changed exception to ``bad_alloc`` on ``JumpHandler`` allocation failure.
    * Fixed missing ``nullptr`` check in ``Clock::on_time_jump``.
    * Added ``JumpHandler::callback`` types.
    * Added warning for lifetime of Clock and JumpHandler
  * Fixed bug left over from the pull request #495 <https://github.com/ros2/rclcpp/pull/495>. (#708 <https://github.com/ros2/rclcpp/issues/708>)
  * Changed the ``IntraProcessManager`` to be capable of storing ``shared_ptr<const T>`` in addition to ``unique_ptr<T>``. (#690 <https://github.com/ros2/rclcpp/issues/690>)
  * Contributors: Alberto Soragna, Dima Dorezyuk, M. M, Michael Carroll, Michael Jeronimo, Tully Foote, William Woodall, ivanpauno, jhdcs
.
ros-rolling-rclcpp (0.7.1-1jammy) jammy; urgency=high
.
  * Added read only parameters. (#495 <https://github.com/ros2/rclcpp/issues/495>)
  * Fixed a concurrency problem in the multithreaded executor. (#703 <https://github.com/ros2/rclcpp/issues/703>)
  * Fixup utilities. (#692 <https://github.com/ros2/rclcpp/issues/692>)
  * Added method to read timer cancellation. (#697 <https://github.com/ros2/rclcpp/issues/697>)
  * Added Exception Generator function for implementing "from_rcl_error". (#678 <https://github.com/ros2/rclcpp/issues/678>)
  * Updated initialization of rmw_qos_profile_t struct instances. (#691 <https://github.com/ros2/rclcpp/issues/691>)
  * Removed the const value from the logger before comparison. (#680 <https://github.com/ros2/rclcpp/issues/680>)
  * Contributors: Devin Bonnie, Dima Dorezyuk, Guillaume Autran, M. M, Shane Loretz, Víctor Mayoral Vilches, William Woodall, jhdcs
.
ros-rolling-rclcpp (0.7.0-1jammy) jammy; urgency=high
.
  * Added Options-struct interfaces for creating publishers/subscribers (pre-QoS, standalone). (#673 <https://github.com/ros2/rclcpp/issues/673>)
  * Replaced strncpy with memcpy. (#684 <https://github.com/ros2/rclcpp/issues/684>)
  * Replaced const char * with a std::array<char, TOPIC_NAME_LENGTH> as the key of IPM IDTopicMap. (#671 <https://github.com/ros2/rclcpp/issues/671>)
  * Refactored SignalHandler logger to avoid race during destruction. (#682 <https://github.com/ros2/rclcpp/issues/682>)
  * Introduce rclcpp_components to implement composition. (#665 <https://github.com/ros2/rclcpp/issues/665>)
  * Added QoS policy check when configuring intraprocess, skip interprocess publish when possible. (#674 <https://github.com/ros2/rclcpp/issues/674>)
  * Updated to use do { .. } while(0) around content of logging macros. (#681 <https://github.com/ros2/rclcpp/issues/681>)
  * Added function to get publisher's actual QoS settings. (#667 <https://github.com/ros2/rclcpp/issues/667>)
  * Updated to avoid race that triggers timer too often. (#621 <https://github.com/ros2/rclcpp/issues/621>)
  * Exposed get_fully_qualified_name in NodeBase API. (#662 <https://github.com/ros2/rclcpp/issues/662>)
  * Updated to use ament_target_dependencies where possible. (#659 <https://github.com/ros2/rclcpp/issues/659>)
  * Fixed wait for service memory leak bug. (#656 <https://github.com/ros2/rclcpp/issues/656>)
  * Fixed test_time_source test. (#639 <https://github.com/ros2/rclcpp/issues/639>)
  * Fixed hard-coded duration type representation so int64_t isn't assumed. (#648 <https://github.com/ros2/rclcpp/issues/648>)
  * Fixed cppcheck warning. (#646 <https://github.com/ros2/rclcpp/issues/646>)
  * Added count matching api and intra-process subscriber count. (#628 <https://github.com/ros2/rclcpp/issues/628>)
  * Added Sub Node alternative. (#581 <https://github.com/ros2/rclcpp/issues/581>)
  * Replaced 'auto' with 'const auto &'. (#630 <https://github.com/ros2/rclcpp/issues/630>)
  * Se…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

8 participants