-
Notifications
You must be signed in to change notification settings - Fork 430
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
Make Rate to select the clock to work with #2123
Conversation
The PR contains only the |
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.
overall lgtm
30b95de
to
f33ea43
Compare
The build was failed due to outdated branch. Rebased over latest |
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.
Otherwise LGTM @clalancette is there a chance to get this in before Iron? This is an important update
rclcpp/include/rclcpp/rate.hpp
Outdated
@@ -42,19 +45,20 @@ using std::chrono::duration_cast; | |||
using std::chrono::nanoseconds; | |||
|
|||
template<class Clock = std::chrono::high_resolution_clock> | |||
class GenericRate : public RateBase | |||
class [[deprecated("use rclcpp::Rate class instead of GenericRate")]] GenericRate |
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.
Shouldn't this derive from RateBase again?
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.
Since of meaning of clock types has been updated (ROS-respecitve clock type added), new rcl_clock_type_t get_type()
method was introduced in a RateBase
basic class as a alternative/replacement for bool is_steady()
one (I would like to completely remove is_steady()
method from on now as unnecessary, but since old API should be supported for compatibility of rclcpp::Rate
and rclcpp::WallRate
classes, is_steady
was remain). GenericRate
if being a child-class of RateBase
, now should implement get_type()
method. But since GenericRate
- is a deprecated class, it might be excess, I believe.
Therefore GenericRate
was taken out of parenthood of RateBase
remaining the same functionality as it previously has; while new RateBase -> Rate -> WallRate/ROSRate
lineage was introduced instead.
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.
OK. Should rate base be marked with a similar deprecation warning? @fujitatomoya what do you think?
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.
Sorry to be late to get back to you. What we need to deprecate is RateBase::is_steady
since the application can get the clock type?
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.
The problem with removing GenericRate
from the hierarchy is that this breaks certain applications. Consider for example if a downstream node has std::vector<RateBase>
in their code. In that case, they will no longer be able to store a GenericRate
in there, since it is no longer a child class of RateBase
.
So I think we should add this back to the hierarchy (i.e. make this a child of RateBase
), and implement get_type()
as returning either RCL_SYSTEM_TIME
(if Clock::is_steady
is false), or RCL_STEADY_TIME
(if Clock::is_steady
is true).
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.
@fujitatomoya, OK. Thanks for reaching us. I've made is_steady()
method to be deprecated for all classes in this commit.
@clalancette, Got your point. This indeed makes sense, so RateBase
-> GenericRate
relationship was restored in the same commit.
@ros-pull-request-builder retest this please |
So there were a lot of failures in CI. That may be because this needs to be rebased, I'm not sure. @AlexeyMerzlyakov @SteveMacenski can you rebase this onto the latest and we can try again? |
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
@Mergifyio rebase |
✅ Branch has been successfully rebased |
@AlexeyMerzlyakov take a look. The policy is that deprecations in the core need to have PRs to resolve so that builds are green without deprecated API use. So anywhere that we have failures we should have complimentary PRs in the ROS 2 core so that everything turns over OK. Unfortunately due to that delay, this won't be able to get in before Iron's freeze |
Any update? |
Waiting until ros2/system_tests#516 (that covers failed tests) to be reviewed on the way to its merge. Then we need to restart testing again in this PR to make sure that all regressions were resolved. |
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.
overall lgtm! just one minor comment.
rclcpp/include/rclcpp/rate.hpp
Outdated
@@ -42,19 +45,20 @@ using std::chrono::duration_cast; | |||
using std::chrono::nanoseconds; | |||
|
|||
template<class Clock = std::chrono::high_resolution_clock> | |||
class GenericRate : public RateBase | |||
class [[deprecated("use rclcpp::Rate class instead of GenericRate")]] GenericRate |
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.
Sorry to be late to get back to you. What we need to deprecate is RateBase::is_steady
since the application can get the clock type?
For the clarity, I've prepared API Hope, this might help to take an overall look on this change. |
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.
Thank you so much for putting together the document explaining the change. It is really helpful.
I've left one change inline.
Besides that, the fact that the Rate
and WallRate
classes now require a context to be initialized is a big change from the previous implementation. That doesn't necessarily mean we shouldn't do this, but I do want to have a conversation about it with the maintainers. @fujitatomoya @alsora @wjwwood what do you think about this change in semantics?
rclcpp/include/rclcpp/rate.hpp
Outdated
{ | ||
// Time coming into sleep | ||
auto now = clock_->now(); | ||
// Time of next interval | ||
auto next_interval = last_interval_ + period_; | ||
// Detect backwards time flow | ||
if (now < last_interval_) { | ||
// Best thing to do is to set the next_interval to now + period | ||
next_interval = now + period_; | ||
} | ||
// Update the interval | ||
last_interval_ += period_; | ||
// If the time_to_sleep is negative or zero, don't sleep | ||
if (next_interval <= now) { | ||
// If an entire cycle was missed then reset next interval. | ||
// This might happen if the loop took more than a cycle. | ||
// Or if time jumps forward. | ||
if (now > next_interval + period_) { | ||
last_interval_ = now + period_; | ||
} | ||
// Either way do not sleep and return false | ||
return false; | ||
} | ||
// Calculate the time to sleep | ||
auto time_to_sleep = next_interval - now; | ||
// Sleep (will get interrupted by ctrl-c, may not sleep full time) | ||
return clock_->sleep_for(time_to_sleep); | ||
} |
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.
Given that this class is not a template, I'd like to see all of this implementation moved into a rate.cpp
file. That will help with compile times of downstream projects.
The same goes for all of the other methods below.
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.
Moved all Rate
implementations into source-file in 3d7b223
that is true, after this PR, context must be initialized before using those classes. i think that would not be a problem for ROS 2 applications. and depending on ROS 2 |
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.
I've left a couple more small things to fix, then I think this will be good.
As far as:
Do we need to add similar checks for obsolete GenericRate constructors, or better leave it as-is, making changes only in working API?
I'm fine with only adding the checks to the new API, and leaving GenericRate
as-is.
Signed-off-by: Alexey Merzlyakov <alexey.merzlyakov@samsung.com>
rclcpp/test/rclcpp/test_rate.cpp
Outdated
|
||
TEST(TestRate, incorrect_constuctor) { | ||
// Constructor with 0-frequency | ||
try { |
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.
should we use EXPECT_THROW
here?
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.
Yes, there is needed macro in utils/rclcpp_gtest_macros.hpp
. Switched to it in the following commit. Thanks for notice!
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.
Beyond comments that were made, this looks good to me!
Co-authored-by: Chris Lalancette <clalancette@gmail.com> Signed-off-by: Alexey Merzlyakov <alexey.merzlyakov@samsung.com>
Co-authored-by: Chris Lalancette <clalancette@gmail.com> Signed-off-by: Alexey Merzlyakov <alexey.merzlyakov@samsung.com>
Co-authored-by: Chris Lalancette <clalancette@gmail.com> Signed-off-by: Alexey Merzlyakov <alexey.merzlyakov@samsung.com>
Signed-off-by: Alexey Merzlyakov <alexey.merzlyakov@samsung.com>
Oops, seems like GitHub auto-commits broken the DCO signature test. Rebasing it with adding the signature and force-pushing the branch. |
55b772b
to
6354c68
Compare
So we are getting closer, but unfortunately Windows says:
I'm honestly not sure what that means; that is a new one for me. Maybe we need |
Signed-off-by: Chris Lalancette <clalancette@gmail.com>
OK, I think my latest commit (bff4fd0) should fix things on Windows. Let's run CI again and see if that is the case: |
@clalancette, thank you for helping with Windows builds!
However, Clang builds give linking problems (is it related to the latest commit?)
Unfortunately, I checked only Linux builds when prepared the commit, so missed this point. If Windows will fail, on next week I'll try to get out with Windows builds and check the problem as well |
Yeah, it looks like the network was having problems there. I'll kick them off again.
Yeah, most probably. We'll have to take a closer look at building with clang. |
Signed-off-by: Chris Lalancette <clalancette@gmail.com>
I think f54ca7d should fix it on clang. Let's see if that is happy across the board: |
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.
Thanks for all of the back-and-forth here @AlexeyMerzlyakov . With the latest changes, this looks good to me. I'm going to go ahead and merge, along with ros2/system_tests#516
Just as an FYI, I released this into Rolling yesterday and I think there was some downstream fallout from this change. In particular, look at:
All of those failures revolve around |
OK, I found it. See #2301 which fixes it. |
* Make Rate to select the clock to work with Add ROSRate respective with ROS time * Make GenericRate class to be deprecated * Adjust test cases for new rates is_steady() to be deprecated Signed-off-by: Alexey Merzlyakov <alexey.merzlyakov@samsung.com> Co-authored-by: Chris Lalancette <clalancette@gmail.com>
Signed-off-by: methylDragon <methylDragon@gmail.com> Fix a format-security warning when building with clang (ros2#2171) In particular, you should never have a "bare" string in a printf-like call; that could potentially access uninitialized memory. Instead, make sure to format the string with %s. Signed-off-by: Chris Lalancette <clalancette@gmail.com> Add missing stdexcept include (ros2#2186) Signed-off-by: Øystein Sture <os@skarvtech.com> Fix race condition in events-executor (ros2#2177) The initial implementation of the events-executor contained a bug where the executor would end up in an inconsistent state and stop processing interrupt/shutdown notifications. Manually adding a node to the executor results in a) producing a notify waitable event and b) refreshing the executor collections. The inconsistent state would happen if the event was processed before the collections were finished to be refreshed: the executor would pick up the event but be unable to process it. This would leave the `notify_waitable_event_pushed_` flag to true, preventing additional notify waitable events to be pushed. The behavior is observable only under heavy load. Signed-off-by: Alberto Soragna <alberto.soragna@gmail.com> Changelog Signed-off-by: Yadunund <yadunund@openrobotics.org> 21.1.1 Declare rclcpp callbacks before the rcl entities (ros2#2024) This is to ensure callbacks are destroyed last on entities destruction, avoiding the gap in time in which rmw entities hold a reference to a destroyed function. Signed-off-by: Mauro Passerino <mpasserino@irobot.com> Co-authored-by: Mauro Passerino <mpasserino@irobot.com> add mutex to protect events_executor current entity collection (ros2#2187) * add mutex to protect events_executor current entity collection and unit-test Signed-off-by: Alberto Soragna <alberto.soragna@gmail.com> * be more precise with mutex locks; make stress test less stressfull Signed-off-by: Alberto Soragna <alberto.soragna@gmail.com> * fix uncrustify error Signed-off-by: Alberto Soragna <alberto.soragna@gmail.com> --------- Signed-off-by: Alberto Soragna <alberto.soragna@gmail.com> Feature/available capacity of ipm (ros2#2173) * added available_capacity to get the lowest number of free capacity for intra-process communication for a publisher Signed-off-by: Joshua Hampp <j.hampp@denso-adas.de> * added unit tests for available_capacity Signed-off-by: Joshua Hampp <j.hampp@eu.denso.com> Signed-off-by: Joshua Hampp <j.hampp@denso-adas.de> * fixed typos in comments Signed-off-by: Joshua Hampp <j.hampp@denso-adas.de> * Updated warning Co-authored-by: Alberto Soragna <alberto.soragna@gmail.com> Signed-off-by: Joshua Hampp <j.hampp@denso-adas.de> * returning 0 if ipm is disabled in lowest_available_ipm_capacity Signed-off-by: Joshua Hampp <j.hampp@denso-adas.de> * return 0 if no subscribers are present in lowest_available_capacity Signed-off-by: Joshua Hampp <j.hampp@denso-adas.de> * updated unit test Signed-off-by: Joshua Hampp <j.hampp@denso-adas.de> * update unit test Signed-off-by: Joshua Hampp <j.hampp@eu.denso.com> * moved available_capacity to a lambda function to be able to handle subscriptions which went out of scope Signed-off-by: Joshua Hampp <j.hampp@denso-adas.de> * updated unit test to check subscriptions which went out of scope Signed-off-by: Joshua Hampp <j.hampp@denso-adas.de> --------- Signed-off-by: Joshua Hampp <j.hampp@denso-adas.de> Signed-off-by: Joshua Hampp <j.hampp@eu.denso.com> Co-authored-by: Joshua Hampp <j.hampp@denso-adas.de> Co-authored-by: Joshua Hampp <j.hampp@eu.denso.com> Co-authored-by: Alberto Soragna <alberto.soragna@gmail.com> remove nolint since ament_cpplint updated for the c++17 header (ros2#2198) Signed-off-by: Chen Lihui <lihui.chen@sony.com> Changelog. Signed-off-by: Chris Lalancette <clalancette@gmail.com> 21.2.0 Use TRACETOOLS_ prefix for tracepoint-related macros (ros2#2162) Signed-off-by: Christophe Bedard <bedard.christophe@gmail.com> Remove flaky stressAddRemoveNode test (ros2#2206) Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> Fix up misspellings of "receive". (ros2#2208) Signed-off-by: Chris Lalancette <clalancette@gmail.com> Changelog. Signed-off-by: Chris Lalancette <clalancette@gmail.com> 21.3.0 Enable callback group tests for connextdds (ros2#2182) * Enable callback group tests for connextdds * Enable executors and event executor tests for connextdds * Enable qos events tests for connextdds * Less flaky qos_event tests Signed-off-by: Christopher Wecht <cwecht@mailbox.org> Modifies timers API to select autostart state (ros2#2005) * Modifies timers API to select autostart state * Removes unnecessary variables * Adds autostart documentation and expands some timer test Signed-off-by: Voldivh <eloyabmfcv@gmail.com> warning: comparison of integer expressions of different signedness (ros2#2219) ros2#2167 (comment) Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Revamp the test_subscription.cpp tests. (ros2#2227) The original motiviation to do this was a crash during teardown when using a newer version of gtest. But while I was in here, I did a small overall cleanup, including: 1. Moving code closer to where it is actually used. 2. Getting rid of unused 'using' statements. 3. Adding in missing includes. 4. Properly tearing down and recreating the rclcpp context during test teardown (this fixed the actual bug). 5. Making class members private where possible. 6. Renaming class methods to our usual conventions. Signed-off-by: Chris Lalancette <clalancette@gmail.com> Move always_false_v to detail namespace (ros2#2232) Since this is a common idiom, especially under this name, we should define the `always_false_v` template within a namespace to avoid conflict with other libraries and user code. This could either be `rclcpp::detail` if it's intended only for internal use or just `rclcpp` if it's intended as a public helper. In this PR, I've initially chosen the former. Signed-off-by: Nathan Wiebe Neufeldt <nwiebeneufeldt@clearpath.ai> Add new node interface TypeDescriptionsInterface to provide GetTypeDescription service (ros2#2224) * TypeDescriptions interface with readonly param configuration * Add parameter descriptor, to make read only * example of spinning in thread for get_type_description service * Add a basic test for the new interface * Fix tests with new parameter * Add comments about builtin parameters Signed-off-by: Emerson Knapp <emerson.b.knapp@gmail.com> Signed-off-by: William Woodall <william@osrfoundation.org> Switch lifecycle to use the RCLCPP macros. (ros2#2233) This ensures that they'll go out to /rosout and the disk. Signed-off-by: Chris Lalancette <clalancette@gmail.com> Implement get_node_type_descriptions_interface for lifecyclenode and add smoke test for it (ros2#2237) Signed-off-by: Emerson Knapp <emerson.b.knapp@gmail.com> Changelog. Signed-off-by: Chris Lalancette <clalancette@gmail.com> 22.0.0 Stop using constref signature of benchmark DoNotOptimize. (ros2#2238) * Stop using constref signature of benchmark DoNotOptimize. Newer versions of google benchmark (1.8.2 in my case) warn that the compiler may optimize away the DoNotOptimize calls when using the constref version. Get away from that here by explicitly *not* calling the constref version, casting where necessary. Signed-off-by: Chris Lalancette <clalancette@gmail.com> Instrument loaned message publication code path (ros2#2240) Signed-off-by: Christophe Bedard <christophe.bedard@apex.ai> associated clocks should be protected by mutex. (ros2#2255) Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Change associated clocks storage to unordered_set (ros2#2257) Signed-off-by: Luca Della Vedova <lucadv@intrinsic.ai> Adding Missing Group Exceptions (ros2#2256) * Adding Missing Group Exceptions Signed-off-by: CursedRock17 <mtglucas1@gmail.com> Signed-off-by: Chris Lalancette <clalancette@gmail.com> Co-authored-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Add spin_all shortcut (ros2#2246) Signed-off-by: Tony Najjar <tony.najjar@logivations.com> Remove an unused variable from the events executor tests. (ros2#2270) Signed-off-by: Chris Lalancette <clalancette@gmail.com> Add a pimpl inside rclcpp::Node for future distro backports (ros2#2228) * Add a pimpl inside rclcpp::Node for future distro backports Signed-off-by: Emerson Knapp <emerson.b.knapp@gmail.com> Co-authored-by: Chris Lalancette <clalancette@gmail.com> Adding Custom Unknown Type Error (ros2#2272) Signed-off-by: CursedRock17 <mtglucas1@gmail.com> Co-authored-by: Christophe Bedard <bedard.christophe@gmail.com> Do not crash Executor when send_response fails due to client failure. (ros2#2276) * Do not crash Executor when send_response fails due to client failure. Related to ros2/ros2#1253 It is not sane that a faulty client can crash our service Executor, as discussed in the referred issue, if the client is not setup properly, send_response may return RCL_RET_TIMEOUT, we should not throw an error in this case. Signed-off-by: Zang MingJie <zealot0630@gmail.com> * Update rclcpp/include/rclcpp/service.hpp Co-authored-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Signed-off-by: Zang MingJie <zealot0630@gmail.com> * address review comments. Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> --------- Signed-off-by: Zang MingJie <zealot0630@gmail.com> Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Co-authored-by: Zang MingJie <zealot0630@gmail.com> Changelog. Signed-off-by: Chris Lalancette <clalancette@gmail.com> 22.1.0 doc fix: call `canceled` only after goal state is in canceling. (ros2#2266) Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Fix a typo in a comment. (ros2#2283) Signed-off-by: Chris Lalancette <clalancette@gmail.com> Revamp list_parameters to be more efficient and easier to read. (ros2#2282) 1. Use constref for the loop variable. 2. Do more work outside of the loop. 3. Skip doing unnecessary work where we can inside the loop. With this in place, I measured about a 7% performance improvement over the previous implementation. Signed-off-by: Chris Lalancette <clalancette@gmail.com> Add rcl_logging_interface as an explicit dependency. (ros2#2284) It is depended on by rclcpp/src/rclcpp/logger.cpp, but the dependency was not explicitly declared (it was being inherited from rcl, I believe). Fix that here. Signed-off-by: Chris Lalancette <clalancette@gmail.com> add logger level service to lifecycle node. (ros2#2277) Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Remove unnecessary lambda captures in the tests. (ros2#2289) * Remove unnecessary lambda captures in the tests. This was pointed out by compiling with clang. Signed-off-by: Chris Lalancette <clalancette@gmail.com> Correct the position of a comment. (ros2#2290) Signed-off-by: Jiaqi Li <ljq0831@qq.com> Make Rate to select the clock to work with (ros2#2123) * Make Rate to select the clock to work with Add ROSRate respective with ROS time * Make GenericRate class to be deprecated * Adjust test cases for new rates is_steady() to be deprecated Signed-off-by: Alexey Merzlyakov <alexey.merzlyakov@samsung.com> Co-authored-by: Chris Lalancette <clalancette@gmail.com> Fix C++20 allocator construct deprecation (ros2#2292) Signed-off-by: Guilherme Rodrigues <guilherme.rodrigues@ait.ac.at> Topic correct typeadapter deduction (ros2#2294) * fix TypeAdapter deduction Signed-off-by: Chen Lihui <lihui.chen@sony.com> Changelog. Signed-off-by: Chris Lalancette <clalancette@gmail.com> 22.2.0 Cleanup flaky timers_manager tests. (ros2#2299) * Cleanup flaky timers_manager tests. The timers_manager tests were relying too heavily on specific timings; this caused them to be flaky on the buildfarm, particularly on Windows. Here, we increase the timeouts, and remove one test which just relies too heavily on specific timeouts. This should make this test much less flaky on the buildfarm. Signed-off-by: Chris Lalancette <clalancette@gmail.com> fix(ClientGoalHandle): Made mutex recursive to prevent deadlocks (ros2#2267) * fix(ClientGoalHandle): Made mutex recursive to prevent deadlocks This prevents deadlocks in cases, were e.g. get_status() would be called on the handle in a callback of the handle. * test(rclcpp_action): Added test for deadlocks during access of a goal handle This test checks, if the code deadlocks, if methods on the goal handle are called from the callbacks. Signed-off-by: Janosch Machowinski <J.Machowinski@cellumation.com> Co-authored-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Update API docs links in package READMEs (ros2#2302) Signed-off-by: Christophe Bedard <christophe.bedard@apex.ai> Fix the return type of Rate::period. (ros2#2301) In a recent commit (bc43577), we reworked how the Rate class worked so it could be used with ROS time as well. Unfortunately, we also accidentally broke the API of it by changing the return type of Rate::period to a Duration instead of a std::chrono::nanoseconds . Put this back to a std::chrono::nanoseconds; if we want to change it to a Duration, we'll have to add a new method and deprecate this one. Signed-off-by: Chris Lalancette <clalancette@gmail.com> Changelog. Signed-off-by: Chris Lalancette <clalancette@gmail.com> 23.0.0 fix the depth to relative in list_parameters (ros2#2300) * fix the depth to relative in list_parameters Signed-off-by: leeminju531 <dlalswn531@naver.com> Decouple rosout publisher init from node init. (ros2#2174) Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Documentation for list_parameters (ros2#2315) * list_parameters documentation Signed-off-by: CursedRock17 <mtglucas1@gmail.com> Removing Old Connext Tests (ros2#2313) * Removing Old Connext Tests Signed-off-by: CursedRock17 <mtglucas1@gmail.com> Update SignalHandler get_global_signal_handler to avoid complex types in static memory (ros2#2316) * Update SignalHandler get_global_signal_handler to avoid complex types in static memory This was flagged by msan as a problem. There's a description of why this is a potential problem here: https://google.github.io/styleguide/cppguide.html#Static_and_Global_Variables Signed-off-by: Tully Foote <tullyfoote@intrinsic.ai> Co-authored-by: William Woodall <william+github@osrfoundation.org> Add locking to protect the TimeSource::NodeState::node_base_ (ros2#2320) We need this because it is possible for one thread to be handling the on_parameter_event callback while another one is detaching the node. This lock will protect that from happening. Signed-off-by: Chris Lalancette <clalancette@gmail.com> Add missing header required by the rclcpp::NodeOptions type (ros2#2324) Signed-off-by: Ignacio Vizzo <ignacio@dexory.com> Changelog. Signed-off-by: Chris Lalancette <clalancette@gmail.com> 23.1.0 Adding API to copy all parameters from one node to another (ros2#2304) Signed-off-by: stevemacenski <stevenmacenski@gmail.com> remove invalid sized allocation test for SerializedMessage. (ros2#2330) Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> add clients & services count (ros2#2072) * add clients & services count * add count clients,services tests Signed-off-by: leeminju531 <dlalswn531@naver.com> Changelog. Signed-off-by: Chris Lalancette <clalancette@gmail.com> 23.2.0 Fix rclcpp_lifecycle inclusion on Windows. (ros2#2331) The comment in the commit explains this clearly, but on Windows ERROR is a macro. The reuse of it, even as an enum, causes compilation errors on downstream users. Push the macro and undefine it so downstream consumers can freely include it. Signed-off-by: Chris Lalancette <clalancette@gmail.com> Remove useless ROSRate class (ros2#2326) Signed-off-by: Alexey Merzlyakov <alexey.merzlyakov@samsung.com> Fixes pointed out by the clang analyzer. (ros2#2339) 1. Remove the default Logger copy constructor without copy assignment (rule of three -> rule of zero). 2. Remove an unnecessary capture in a lambda. 3. Mark a variable unused. 4. Mark a method as override. Signed-off-by: Chris Lalancette <clalancette@gmail.com> address rate related flaky tests. (ros2#2329) Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Adjust rclcpp usage of type description service (ros2#2344) Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> Add missing 'enable_rosout' comments (ros2#2345) Signed-off-by: Jiaqi Li <ljq0831@qq.com> Use message_info in SubscriptionTopicStatistics instead of typed message (ros2#2337) * Use message_info in SubscriptionTopicStatistics instead of typed message - Untemplatize the rclcpp::topic_statistics::SubscriptionTopicStatistics class. Now we will be using message_info instead of typed deserialized messages in the handle_message callbacks. * Fix test_receive_stats_include_window_reset by using publisher emulator - Emulate publishing messages by directly calling rclcpp::Subscription::handle_message(msg_shared_ptr, message_info) and settling up needed message_info.source_timestamp Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Disable the loaned messages inside the executor. (ros2#2335) * Disable the loaned messages inside the executor. They are currently unsafe to use; see the comment in the commit for more information. Signed-off-by: Chris Lalancette <clalancette@gmail.com> Add a custom deleter when constructing rcl_service_t (ros2#2351) * Add a custom deleter when constructing rcl_service_t In the type description service construction, we were previously passing the shared_ptr to the rcl_service_t with the assumption that rclcpp::Service would do the clean up. This was an incorrect assumption, and so I have added a custom deleter to fini the service and delete when the shared_ptr is cleaned up. Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> Serialized Messages with Topic Statistics (ros2#2274) Signed-off-by: CursedRock17 <mtglucas1@gmail.com> rclcpp::Time::max() clock type support. (ros2#2352) Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Updates to not use std::move in some places. (ros2#2353) gcc 13.1.1 complains that these uses inhibit copy elision. Signed-off-by: Chris Lalancette <clalancette@gmail.com> fix (signal_handler.hpp): spelling (ros2#2356) Signed-off-by: Zard-C <patrick.zhang5233@gmail.com> Changelog. Signed-off-by: Chris Lalancette <clalancette@gmail.com> 24.0.0 fix(rclcpp_components): increase the service queue sizes in component_container (ros2#2363) * fix(rclcpp_components): increase the service queue sizes in component_container Signed-off-by: M. Fatih Cırıt <mfc@leodrive.ai> Support users holding onto shared pointers in the message memory pool (ros2#2336) * Support users holding onto shared pointers in the message memory pool Before this commit, the MessageMemoryPool would actually reuse messages in the pool, even if the user had taken additional shared_ptr copies. This commit fixes things so that we properly handle that situation. In particular, we allocate memory during class initialization, and delete it during destruction. We then run the constructor when we hand the pointer out, and the destructor (only) when we return it to the pool. This keeps things consistent. We also add in locks, since in a multi-threaded scenario we need to protect against multiple threads accessing the pool at the same time. With this in place, things work as expected when users hold shared_ptr copies. We also add in a test for this situation. One note about performance: this update preserves the "no-allocations-at-runtime" aspect of the MessagePool. However, there are some tradeoffs with CPU time here, particularly with very large message pools. This could probably be optimized further to do less work when trying to add items back to the free_list, but I view that as a further enhancement. Signed-off-by: Chris Lalancette <clalancette@gmail.com> Fix data race in EventHandlerBase (ros2#2349) Both the EventHandler and its associated pubs/subs share the same underlying rmw event listener. When a pub/sub is destroyed, the listener is destroyed. There is a data race when the ~EventHandlerBase wants to access the listener after it has been destroyed. The EventHandler stores a shared_ptr of its associated pub/sub. But since we were clearing the listener event callbacks on the base class destructor ~EventHandlerBase, the pub/sub was already destroyed, which means the rmw event listener was also destroyed, thus causing a segfault when trying to obtain it to clear the callbacks. Clearing the callbacks on ~EventHandler instead of ~EventHandlerBase avoids the race, since the pub/sub are still valid. Signed-off-by: Mauro Passerino <mpasserino@irobot.com> aligh with rcl that a rosout publisher of a node might not exist (ros2#2357) * aligh with rcl * keep same behavior with rclpy 1. to not throw exception durning rcl_logging_rosout_remove_sublogger 2. reset error message for RCL_RET_NOT_FOUND * test for a node with rosout disabled Signed-off-by: Chen Lihui <lihui.chen@sony.com> feat(rclcpp_components): support events executor in node main template (ros2#2366) Signed-off-by: wep21 <daisuke.nishimatsu1021@gmail.com> Switch to target_link_libraries. (ros2#2374) That way we can hide more of the implementation by using the PRIVATE keyword. Signed-off-by: Chris Lalancette <clalancette@gmail.com> Adding QoS to subscription options (ros2#2323) * Adding QoS to subscription options Signed-off-by: CursedRock17 <mtglucas1@gmail.com> make type support helper supported for service (ros2#2209) * make type support helper supported for service and action as well Signed-off-by: Chen Lihui <lihui.chen@sony.com> * not to use template and only add the necessary service type currently Signed-off-by: Chen Lihui <lihui.chen@sony.com> * update comment Signed-off-by: Chen Lihui <lihui.chen@sony.com> * add deprecated cycle for `get_typesupport_handle` Signed-off-by: Chen Lihui <lihui.chen@sony.com> --------- Signed-off-by: Chen Lihui <lihui.chen@sony.com> Updated GenericSubscription to AnySubscriptionCallback (ros2#1928) * added rclcpp::SerializedMessage support for AnySubscriptionCallback Signed-off-by: Joshua Hampp <j.hampp@denso-adas.de> Signed-off-by: Joshua Hampp <j.hampp@eu.denso.com> * using AnySubscription callback for generic subscriptiion Signed-off-by: Joshua Hampp <j.hampp@denso-adas.de> Signed-off-by: Joshua Hampp <j.hampp@eu.denso.com> * updated tests Signed-off-by: Joshua Hampp <j.hampp@denso-adas.de> Signed-off-by: Joshua Hampp <j.hampp@eu.denso.com> * Remove comment Signed-off-by: Joshua Hampp <j.hampp@eu.denso.com> --------- Signed-off-by: Joshua Hampp <j.hampp@denso-adas.de> Signed-off-by: Joshua Hampp <j.hampp@eu.denso.com> Co-authored-by: Joshua Hampp <j.hampp@denso-adas.de> Co-authored-by: Jacob Perron <jacob@openrobotics.org> Changelog. Signed-off-by: Chris Lalancette <clalancette@gmail.com> 25.0.0 Increase timeout for rclcpp_lifecycle to 360 (ros2#2395) * Increase timeout for rclcpp_lifecycle to 360 Signed-off-by: Jorge Perez <jjperez@ekumenlabs.com> Co-authored-by: Chris Lalancette <clalancette@gmail.com> Stop storing the context in the guard condition. (ros2#2400) * Stop storing the context in the guard condition. This was creating a circular reference between GuardCondition and Context, so that Context would never be cleaned up. Since we never really need the GuardCondition to know about its own Context, remove that part of the circular reference. While we are in here, we also change the get_context() lambda to a straight weak_ptr; there is no reason for the indirection since the context for the guard condition cannot change at runtime. We also remove the deprecated version of the get_notify_guard_condition(). That's because there is no way to properly implement it in the new scheme, and it seems to be unused outside of rclcpp. Finally, we add in a test that guarantees the use_count is what we expect when inside and leaving a scope, ensuring that contexts will properly be destroyed. Signed-off-by: Chris Lalancette <clalancette@gmail.com> Add transient local durability support to publisher and subscriptions when using intra-process communication (ros2#2303) * Add intra process transient local durability support to publisher and subscription Signed-off-by: Jeffery Hsu <jefferyyjhsu@gmail.com> * Remove durability_is_transient_local_ from publisher_base Signed-off-by: Jeffery Hsu <jefferyyjhsu@gmail.com> * Design changes that move most transient local publish functionalities out of intra process manager into intra process manager Signed-off-by: Jeffery Hsu <jefferyyjhsu@gmail.com> * Move transient local publish to a separate function Signed-off-by: Jeffery Hsu <jefferyyjhsu@gmail.com> * Remove publisher buffer weak ptr from intra process manager when it associated publisher is removed. Signed-off-by: Jeffery Hsu <jefferyyjhsu@gmail.com> * Remove incorrectly placed RCLCPP_PUBLIC Signed-off-by: Jeffery Hsu <jefferyyjhsu@gmail.com> * Add missing RCLCPP_PUBLIC Signed-off-by: Jeffery Hsu <jefferyyjhsu@gmail.com> * Expand RingBufferImplementation beyond shared_ptr and unique_ptr Signed-off-by: Jeffery Hsu <jefferyyjhsu@gmail.com> * Comment and format fix Signed-off-by: Jeffery Hsu <jefferyyjhsu@gmail.com> --------- Signed-off-by: Jeffery Hsu <jefferyyjhsu@gmail.com> Increase the cppcheck timeout to 600 seconds. (ros2#2409) Signed-off-by: Chris Lalancette <clalancette@gmail.com> Changelog. Signed-off-by: Chris Lalancette <clalancette@gmail.com> 26.0.0 Make sure to mark RingBuffer methods as 'override'. (ros2#2410) This gets rid of a warning when building under clang. Signed-off-by: Chris Lalancette <clalancette@gmail.com> Removed deprecated header (ros2#2413) Signed-off-by: Alejandro Hernández Cordero <ahcorde@gmail.com> [events executor] - Fix Behavior with Timer Cancel (ros2#2375) * fix Signed-off-by: Matt Condino <mwcondino@gmail.com> * add timer cancel tests Signed-off-by: Matt Condino <mwcondino@gmail.com> * cleanup header include Signed-off-by: Matt Condino <mwcondino@gmail.com> * reverting change to timer_greater function Signed-off-by: Gus Brigantino <gusbrig97@gmail.com> * use std::optional, and handle edgecase of 1 cancelled timer Signed-off-by: Matt Condino <mwcondino@gmail.com> * clean up run_timers func Signed-off-by: Gus Brigantino <gusbrig97@gmail.com> * some fixes and added tests for cancel then reset of timers. Signed-off-by: Matt Condino <mwcondino@gmail.com> * refactor and clean up. remove cancelled timer tracking. Signed-off-by: Matt Condino <mwcondino@gmail.com> * remove unused method for size() Signed-off-by: Matt Condino <mwcondino@gmail.com> * linting Signed-off-by: Matt Condino <mwcondino@gmail.com> * relax timing constraints in tests Signed-off-by: Matt Condino <mwcondino@gmail.com> * further relax timing constraints to ensure windows tests are not flaky. Signed-off-by: Matt Condino <mwcondino@gmail.com> * use sim clock for tests, pub clock at .25 realtime rate. Signed-off-by: Matt Condino <mwcondino@gmail.com> --------- Signed-off-by: Matt Condino <mwcondino@gmail.com> Signed-off-by: Gus Brigantino <gusbrig97@gmail.com> Co-authored-by: Gus Brigantino <gusbrig97@gmail.com> Split test_executors up into smaller chunks. (ros2#2421) The original reason is that on Windows Debug, we were failing to compile because the compilation unit was too large. But also this file was way too large (1200 lines), so it makes sense to split it up. Signed-off-by: Chris Lalancette <clalancette@gmail.com> Changelog. Signed-off-by: Chris Lalancette <clalancette@gmail.com> 27.0.0 feat: add/minus for msg::Time and rclcpp::Duration (ros2#2419) * feat: add/minus for msg::Time and rclcpp::Duration Signed-off-by: HuaTsai <huatsai.eed07g@nctu.edu.tw> crash on no class found (ros2#2415) * crash on no class found * error on no class found instead of no callback groups Signed-off-by: Adam Aposhian <adam.aposhian@fireflyautomatix.com> Co-authored-by: Chris Lalancette <clalancette@gmail.com> Update quality declaration documents (ros2#2427) Signed-off-by: Christophe Bedard <christophe.bedard@apex.ai> Set hints to find the python version we actually want. (ros2#2426) The comment in the commit explains the reasoning behind it. Signed-off-by: Chris Lalancette <clalancette@gmail.com> fix doxygen syntax for NodeInterfaces (ros2#2428) Signed-off-by: Jonas Otto <jonas@jonasotto.com> Remove the set_deprecated signatures in any_subscription_callback. (ros2#2431) These have been deprecated since April 2021, so it is safe to remove them now. Signed-off-by: Chris Lalancette <clalancette@gmail.com> Add EXECUTOR docs (ros2#2440) Signed-off-by: Ruddick Lawrence <679360+mrjogo@users.noreply.github.com> Various cleanups to deal with uncrustify 0.78. (ros2#2439) These should also work with uncrustify 0.72. Signed-off-by: Chris Lalancette <clalancette@gmail.com> Rule of five: implement move operators (ros2#2425) Signed-off-by: Tim Clephas <tim.clephas@nobleo.nl> Implement generic client (ros2#2358) * Implement generic client Signed-off-by: Barry Xu <barry.xu@sony.com> * Fix the incorrect parameter declaration Signed-off-by: Barry Xu <barry.xu@sony.com> * Deleted copy constructor and assignment for FutureAndRequestId Signed-off-by: Barry Xu <barry.xu@sony.com> * Update codes after rebase Signed-off-by: Barry Xu <barry.xu@sony.com> * Address review comments Signed-off-by: Barry Xu <barry.xu@sony.com> * Address review comments from iuhilnehc-ynos Signed-off-by: Barry Xu <barry.xu@sony.com> * Correct an error in a description Signed-off-by: Barry Xu <barry.xu@sony.com> * Fix window build errors Signed-off-by: Barry Xu <barry.xu@sony.com> * Address review comments from William Signed-off-by: Barry Xu <barry.xu@sony.com> * Add doc strings to create_generic_client Signed-off-by: Barry Xu <barry.xu@sony.com> --------- Signed-off-by: Barry Xu <barry.xu@sony.com> Fix TypeAdapted publishing with large messages. (ros2#2443) Mostly by ensuring we aren't attempting to store large messages on the stack. Also add in tests. I verified that before these changes, the tests failed, while after them they succeed. Signed-off-by: Chris Lalancette <clalancette@gmail.com> Modify rclcpp_action::GoalUUID hashing algorithm (ros2#2441) * Add unit tests for hashing rclcpp_action::GoalUUID's * Use the FNV-1a hash algorithm for Goal UUID Signed-off-by: Mauro Passerino <mpasserino@irobot.com> relax the test simulation rate for timer canceling tests. (ros2#2453) Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Revert "relax the test simulation rate for timer canceling tests. (ros2#2453)" (ros2#2456) This reverts commit 1c350d0. Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> enable simulation clock for timer canceling test. (ros2#2458) * enable simulation clock for timer canceling test. Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> * move MainExecutorTypes to test_executors_timer_cancel_behavior.cpp. Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> --------- Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> refactor and improve the parameterized spin_some tests for executors (ros2#2460) * refactor and improve the spin_some parameterized tests for executors Signed-off-by: William Woodall <william@osrfoundation.org> * disable spin_some_max_duration for the StaticSingleThreadedExecutor and EventsExecutor Signed-off-by: William Woodall <william@osrfoundation.org> * fixup and clarify the docstring for Executor::spin_some() Signed-off-by: William Woodall <william@osrfoundation.org> * style Signed-off-by: William Woodall <william@osrfoundation.org> * review comments Signed-off-by: William Woodall <william@osrfoundation.org> --------- Signed-off-by: William Woodall <william@osrfoundation.org> fix spin_some_max_duration unit-test for events-executor (ros2#2465) Signed-off-by: Alberto Soragna <alberto.soragna@gmail.com> Do not generate the exception when action service response timeout. (ros2#2464) * Do not generate the exception when action service response timeout. Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> * address review comment. Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> --------- Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Changelog. Signed-off-by: Marco A. Gutierrez <marcogg@marcogg.com> 28.0.0 Signed-off-by: Marco A. Gutierrez <marcogg@marcogg.com> fix flakiness in TestTimersManager unit-test (ros2#2468) the previous version of the test was relying on the assumption that a timer with 1ms period gets called at least 6 times if the main thread waits 15ms. this is true most of the times, but it's not guaranteed, especially when running the test on windows CI servers. the new version of the test makes no assumptions on how much time it takes for the timers manager to invoke the timers, but rather focuses on ensuring that they are called the right amount of times, which is what's important for the purpose of the test Signed-off-by: Alberto Soragna <alberto.soragna@gmail.com> Utilize rclcpp::WaitSet as part of the executors (ros2#2142) * Deprecate callback_group call taking context Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Add base executor objects that can be used by implementors Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Template common operations Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Address reviewer feedback: * Add callback to EntitiesCollector constructor * Make function to check automatically added callback groups take a list Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Lint Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Address reviewer feedback and fix templates Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Lint and docs Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Make executor own the notify waitable Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Add pending queue to collector, remove from waitable Also change node's get_guard_condition to return shared_ptr Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Change interrupt guard condition to shared_ptr Check if guard condition is valid before adding it to the waitable Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Lint and docs Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Utilize rclcpp::WaitSet as part of the executors Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Don't exchange atomic twice Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Fix add_node and add more tests Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Make get_notify_guard_condition follow API tick-tock Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Improve callback group tick-tocking Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Don't lock twice Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Address reviewer feedback Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Add thread safety annotations and make locks consistent Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * @wip Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Reset callback groups for multithreaded executor Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Avoid many small function calls when building executables Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Re-trigger guard condition if buffer has data Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Address reviewer feedback Signed-off-by: Michael Carroll <michael@openrobotics.org> * Trace points Signed-off-by: Michael Carroll <michael@openrobotics.org> * Remove tracepoints Signed-off-by: Michael Carroll <michael@openrobotics.org> * Reducing diff Signed-off-by: Michael Carroll <michael@openrobotics.org> * Reduce diff Signed-off-by: Michael Carroll <michael@openrobotics.org> * Uncrustify Signed-off-by: Michael Carroll <michael@openrobotics.org> * Restore tests Signed-off-by: Michael Carroll <michael@openrobotics.org> * Back to weak_ptr and reduce test time Signed-off-by: Michael Carroll <michael@openrobotics.org> * reduce diff and lint Signed-off-by: Michael Carroll <michael@openrobotics.org> * Restore static single threaded tests that weren't working before Signed-off-by: Michael Carroll <michael@openrobotics.org> * Restore more tests Signed-off-by: Michael Carroll <michael@openrobotics.org> * Fix multithreaded test Signed-off-by: Michael Carroll <michael@openrobotics.org> * Fix assert Signed-off-by: Michael Carroll <michael@openrobotics.org> * Fix constructor test Signed-off-by: Michael Carroll <michael@openrobotics.org> * Change ready_executables signature back Signed-off-by: Michael Carroll <michael@openrobotics.org> * Don't enforce removing callback groups before nodes Signed-off-by: Michael Carroll <michael@openrobotics.org> * Remove the "add_valid_node" API Signed-off-by: Michael Carroll <michael@openrobotics.org> * Only notify if the trigger condition is valid Signed-off-by: Michael Carroll <michael@openrobotics.org> * Only trigger if valid and needed Signed-off-by: Michael Carroll <michael@openrobotics.org> * Fix spin_some/spin_all implementation Signed-off-by: Michael Carroll <michael@openrobotics.org> * Restore single threaded executor Signed-off-by: Michael Carroll <michael@openrobotics.org> * Picking ABI-incompatible executor changes Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Add PIMPL Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Additional waitset prune Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Fix bad merge Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Expand test timeout Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Introduce method to clear expired entities from a collection Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Make sure to call remove_expired_entities(). Signed-off-by: Chris Lalancette <clalancette@gmail.com> * Prune queued work when callback group is removed Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Prune subscriptions from dynamic storage Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Styles fixes. Signed-off-by: Chris Lalancette <clalancette@gmail.com> * Re-trigger guard conditions Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Condense to just use watiable.take_data Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Lint Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Address reviewer comments (nits) Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Lock mutex when copying Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Refactors to static single threaded based on reviewers Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * More small refactoring Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Lint Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Lint Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Add ready executable accessors to WaitResult Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Make use of accessors from wait_set Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Fix tests Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Fix more tests Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Tidy up single threaded executor implementation Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * Don't null out timer, rely on call Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> * change how timers are checked from wait result in executors Signed-off-by: William Woodall <william@osrfoundation.org> * peak -> peek Signed-off-by: William Woodall <william@osrfoundation.org> * fix bug in next_waitable logic Signed-off-by: William Woodall <william@osrfoundation.org> * fix bug in StaticSTE that broke the add callback groups to executor tests Signed-off-by: William Woodall <william@osrfoundation.org> * style Signed-off-by: William Woodall <william@osrfoundation.org> --------- Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai> Signed-off-by: Michael Carroll <michael@openrobotics.org> Signed-off-by: Chris Lalancette <clalancette@gmail.com> Signed-off-by: William Woodall <william@osrfoundation.org> Co-authored-by: Chris Lalancette <clalancette@gmail.com> Co-authored-by: William Woodall <william@osrfoundation.org> update rclcpp::Waitable API to use references and const (ros2#2467) Signed-off-by: William Woodall <william@osrfoundation.org> Add tracepoint for generic publisher/subscriber (ros2#2448) Signed-off-by: h-suzuki <h-suzuki@isp.co.jp>
This is the continue of [#1373] discussion and related to the ros-navigation/navigation2#3325 issue in Nav2
The initial idea is to make
rclcpp::Rate
to work with ROS-time (currently it works only with system and steady times).What was made:
rclcpp::Clock
pointer to therclcpp::Rate
constructor to allow developer to specify the clock to work with (by-default it is stillRCL_SYSTEM_TIME
if no clock is specified)rclcpp::ROSRate
rate class, respective to ROS-timeCurrent implementation points:
rclcpp::GenericRate
-> torclcpp::Rate
and gave it the default clock to work withrclcpp::Rate
andrclcpp::WallRate
API remaining to be untouched as much as possiblerclcpp::Duration
instead ofstd::chrono::nanoseconds
in durations andRate::get_type()
routine instead of previously usedRate::is_steady()
rclcpp::ROSRate
class that working with ROS time