-
Notifications
You must be signed in to change notification settings - Fork 425
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
WIP: Allow to pass existing TimeSource
via NodeOptions
#2673
base: rolling
Are you sure you want to change the base?
Conversation
e88dff2
to
a7d891f
Compare
Signed-off-by: Patrick Roncagliolo <[email protected]>
Signed-off-by: Patrick Roncagliolo <[email protected]>
edd5b50
to
31f87f6
Compare
@roncapat is this still in draft / WIP status? |
@fujitatomoya works nicely for me locally, but I'd like at least a review to understand what are your opinion on this / if I need to change something. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@roncapat thanks for the PR and feedback.
a several comments for now, i think we need to add more unit tests to verify this feature.
- if the
TimeSource
is shared withuse_clock_thread_
disabled, this main Node must be spinning to update the clock for everybody else, otherwise other nodes sharingTimeSource
cannot get the update for the simulation clock information. user application must understand this condition. - i think if the
TimeSource
is shared, we cannot reset this in the subordinate Nodes during destruction. only main Node can do the reset once theTimeSource
is no longer required to keep? - The subordinate Nodes will not have
<nodename>/use_sim_time
parameter neither clock subscription QoS parameters, but only main Node. i think this is also important for user to know, i would suggest doc section in the code and ros2_documentation. - unit test required to make sure
TimeSource
is shared within multiple Nodes instances w/ and w/o simulation time. (currently only copy assignment test is added.) LifecycleNode
support is missing? or is this on purpose for any constraints?
@@ -235,6 +237,7 @@ Node::Node( | |||
sub_namespace_(""), | |||
effective_namespace_(create_effective_namespace(this->get_namespace(), sub_namespace_)) | |||
{ | |||
node_time_source_->attachClock(node_clock_); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this actually tries to insert the same element node_cloeck_
if TimeSource
is not specified in NodeOption
, but that is just fine since std::unordered_set
checks the hash to avoid duplication.
Addresses #2659 (task 1).
This allows to put an existing
TimeSource
inNodeOptions
so that a Node in the same process space can avoid re-creating aTimeSource
.For example, the
TimeSource
may be extracted viarclcpp::Node::get_node_time_source_interface()
from an existing node, and passed viaNodeOptions
to all the others that share the process space.This is, for example, how I tested it locally in an application of mine.
Main benefit: a single subscriber can be shared when using
use_sim_time
: better scaling for large rclcpp-composed simulations.