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 a create_timer method to Node and LifecycleNode classes #1975

Merged

Conversation

asymingt
Copy link
Contributor

@asymingt asymingt commented Jul 22, 2022

Problem

Right now the Node and LifecycleNode classes only provide a method for creating a wall timer, even though the underlying functions for creating a generic timer (which respects ROS time via /clock) are available. This is a problem because those that write node implementations -- and especially those that come from a ROS1 background -- default to using {Node, LifecycleNode}::create_wall_timer not understanding the implications this decision has on timer behavior in replay, and especially when ros2 bag play --rate is used. The existing method of creating the correct timer type is opaque: it requires knowledge of free-functions in rclcpp.

Relates to issues:

Relates to pull requests:

Fix

This PR adds the piping to allow a timer that respects /clock when use_sim_time: True node parameter is set. While it is possible to do this manually with rclcpp::create_timer it's much less convenient. An analogous function already exists in rclpy.

Progress

  • Add the create_timer method to Node class.
  • Take care of edge cases in chrono::duration casts.
  • Add unit tests to create_timer, timer_source and timer.
  • Debug TestTimeSource.check_sim_time_updated_in_callback_if_use_clock_thread.
  • UpdateLifecycleNode to also support create_timer.
  • Refactor create_timer to drop raw pointers and have common error checks.

@jacobperron
Copy link
Member

Make sure to also sign-off your commits to satisfy the DCO check.

@jacobperron jacobperron added the enhancement New feature or request label Jul 22, 2022
@asymingt asymingt force-pushed the asymingt/add-create-timer-function-to-node-class branch from b852aa2 to a828be8 Compare July 22, 2022 20:01
@asymingt asymingt marked this pull request as ready for review July 22, 2022 20:01
@asymingt asymingt force-pushed the asymingt/add-create-timer-function-to-node-class branch from a828be8 to cf4d644 Compare July 22, 2022 20:06
Copy link
Member

@jacobperron jacobperron left a comment

Choose a reason for hiding this comment

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

Looks good to me. Please add a test exercising the new method, then I'll trigger CI.

@asymingt
Copy link
Contributor Author

asymingt commented Jul 22, 2022

Looks good to me. Please add a test exercising the new method, then I'll trigger CI.

Done. Please take a look at the unit tests, and particularly the EXPECT_FALSE(timer->is_steady() for the GENERIC_TIMER implementation. To me it seems logical that being driven by /clock might end up making the time source non-monotonic. Does this violate any assumption made by the timer class?

Unit tests pass locally:

83: [==========] Running 16 tests from 1 test suite.
83: [----------] Global test environment set-up.
83: [----------] 16 tests from PerTimerType/TestTimer
83: [ RUN      ] PerTimerType/TestTimer.test_simple_cancel/wall_timer
83: [       OK ] PerTimerType/TestTimer.test_simple_cancel/wall_timer (17 ms)
83: [ RUN      ] PerTimerType/TestTimer.test_simple_cancel/generic_timer
83: [       OK ] PerTimerType/TestTimer.test_simple_cancel/generic_timer (5 ms)
83: [ RUN      ] PerTimerType/TestTimer.test_is_canceled_reset/wall_timer
83: [       OK ] PerTimerType/TestTimer.test_is_canceled_reset/wall_timer (5 ms)
83: [ RUN      ] PerTimerType/TestTimer.test_is_canceled_reset/generic_timer
83: [       OK ] PerTimerType/TestTimer.test_is_canceled_reset/generic_timer (5 ms)
83: [ RUN      ] PerTimerType/TestTimer.test_run_cancel_executor/wall_timer
83: [       OK ] PerTimerType/TestTimer.test_run_cancel_executor/wall_timer (105 ms)
83: [ RUN      ] PerTimerType/TestTimer.test_run_cancel_executor/generic_timer
83: [       OK ] PerTimerType/TestTimer.test_run_cancel_executor/generic_timer (105 ms)
83: [ RUN      ] PerTimerType/TestTimer.test_run_cancel_timer/wall_timer
83: [       OK ] PerTimerType/TestTimer.test_run_cancel_timer/wall_timer (105 ms)
83: [ RUN      ] PerTimerType/TestTimer.test_run_cancel_timer/generic_timer
83: [       OK ] PerTimerType/TestTimer.test_run_cancel_timer/generic_timer (105 ms)
83: [ RUN      ] PerTimerType/TestTimer.test_bad_arguments/wall_timer
83: [ERROR] [1658525415.784172078] []: Failed to fini rcl clock.
83: [       OK ] PerTimerType/TestTimer.test_bad_arguments/wall_timer (5 ms)
83: [ RUN      ] PerTimerType/TestTimer.test_bad_arguments/generic_timer
83: [ERROR] [1658525415.788818007] []: Failed to fini rcl clock.
83: [       OK ] PerTimerType/TestTimer.test_bad_arguments/generic_timer (5 ms)
83: [ RUN      ] PerTimerType/TestTimer.callback_with_timer/wall_timer
83: [       OK ] PerTimerType/TestTimer.callback_with_timer/wall_timer (7 ms)
83: [ RUN      ] PerTimerType/TestTimer.callback_with_timer/generic_timer
83: [       OK ] PerTimerType/TestTimer.callback_with_timer/generic_timer (6 ms)
83: [ RUN      ] PerTimerType/TestTimer.callback_with_period_zero/wall_timer
83: [       OK ] PerTimerType/TestTimer.callback_with_period_zero/wall_timer (5 ms)
83: [ RUN      ] PerTimerType/TestTimer.callback_with_period_zero/generic_timer
83: [       OK ] PerTimerType/TestTimer.callback_with_period_zero/generic_timer (4 ms)
83: [ RUN      ] PerTimerType/TestTimer.test_failures_with_exceptions/wall_timer
83: [ERROR] [1658525415.815430083] [rclcpp]: Failed to clean up rcl timer handle: error not set
83: [       OK ] PerTimerType/TestTimer.test_failures_with_exceptions/wall_timer (4 ms)
83: [ RUN      ] PerTimerType/TestTimer.test_failures_with_exceptions/generic_timer
83: [ERROR] [1658525415.820125821] [rclcpp]: Failed to clean up rcl timer handle: error not set
83: [       OK ] PerTimerType/TestTimer.test_failures_with_exceptions/generic_timer (5 ms)
83: [----------] 16 tests from PerTimerType/TestTimer (493 ms total)
83: 
83: [----------] Global test environment tear-down
83: [==========] 16 tests from 1 test suite ran. (493 ms total)
83: [  PASSED  ] 16 tests.
83: -- run_test.py: return code 0    
83: -- run_test.py: inject classname prefix into gtest result file 
The following tests passed:
        test_timer

...

100% tests passed, 0 tests failed out of 1

Label Time Summary:
gtest    =   0.68 sec*proc (1 test)

Total Test time (real) =   0.68 sec
Finished <<< rclcpp [0.94s]

Summary: 1 package finished [1.76s]

@jacobperron
Copy link
Member

To me it seems logical that being driven by /clock might end up making the time source non-monotonic. Does this violate any assumption made by the timer class?

Correct, if we are using a ROS clock (ie. potentially relying on the /clock topic) then we can't assume time will be be monotonically increasing. I don't think this violates any assumptions of the timer class, but I can double-check.

Copy link
Collaborator

@fujitatomoya fujitatomoya left a comment

Choose a reason for hiding this comment

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

lgtm with one question.

rclcpp/include/rclcpp/create_timer.hpp Outdated Show resolved Hide resolved
@asymingt asymingt changed the title Add a create_timer method to Node class Add a create_timer method to Node and LifecycleNode classes Aug 2, 2022
@Blast545
Copy link
Contributor

Blast545 commented Aug 3, 2022

@ros-pull-request-builder retest this please

@@ -695,7 +694,7 @@ class ClockThreadTestingNode : public rclcpp::Node
this->set_parameter(rclcpp::Parameter("use_sim_time", true));

// Create a 100ms timer
timer_ = this->create_wall_timer(
timer_ = this->create_timer(
Copy link
Contributor Author

@asymingt asymingt Aug 3, 2022

Choose a reason for hiding this comment

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

We should consider reverting this, even though the reversion should be a no-op. I get that this timer sets up the periodic publishing of /clock to drive peer nodes' perception of time (which we call "ROS time"). For this reason a wall timer makes more sense. However, my understanding is that since the parameter use_sim_time is not set on this node, create_timer should simply fall back to a wall timer. Thus, both create_timer and create_wall_timer are equivalent here.

Copy link
Member

Choose a reason for hiding this comment

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

If I understand the tests correctly, we want this to be a wall timer so I would just revert it to be safe.

Copy link
Member

Choose a reason for hiding this comment

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

yes, using create_wall_timer() here makes more sense I think

Copy link
Contributor Author

@asymingt asymingt Aug 12, 2022

Choose a reason for hiding this comment

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

Can you double check this is what you want!

We should consider reverting this, even though the reversion should be a no-op. I get that this timer sets up the periodic publishing of /clock to drive peer nodes' perception of time (which we call "ROS time"). For this reason a wall timer makes more sense. However, my understanding is that since the parameter use_sim_time is not set on this node, create_timer should simply fall back to a wall timer. Thus, both create_timer and create_wall_timer are equivalent here.

The above message I sent was wrong, as I incorrectly thought this change was to the SimClockPublisherNode code, which it is not. If you look at how this code is used in the unit test , we have a SimClockPublisherNode that publishes time on /clock and a ClockThreadTestingNode that consumes this time.

I'm fairly sure that we want a create_timer here to prove that a /clock driven sense of time has a callback within which you can make subsequent calls to this->now(). If we really wanted to test a wall timer, there would be no need to spin up a SimClockPublisherNode instance.

Copy link
Member

Choose a reason for hiding this comment

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

Yes, that seems to be the case.
I'm not sure what was the test doing before as create_wall_timer() never used sim time.

Copy link
Member

Choose a reason for hiding this comment

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

The comments also say that this test should be running with use_clock_thread=true, and that's not the case.

When I modify the test to do what's supposed to do, it's super flaky.
IMO, it's fair to comment out the test and create a new issue for it.
@jacobperron any opinion?

Copy link
Member

Choose a reason for hiding this comment

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

I commented out the test as I think the problem is the test itself, see 0093121

Copy link
Member

@jacobperron jacobperron Aug 29, 2022

Choose a reason for hiding this comment

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

I thought the test was checking that the wall timer and simulation time updates were not interfering with each other. But, I'm not sure. I'm okay with disabling the flaky test. Maybe we can create a GitHub ticket to look into it (maybe it is just not a well-defined test and could be removed).

Copy link
Member

Choose a reason for hiding this comment

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

Based on the comments, the test name, and the code; it seems that the test is supposed to be checking that the clock is updated when use_clock_thread=True even if you're blocked in a callback.
The part that's missing is that use_clock_thread was never actually enabled.
Enabling that doesn't solve the issue, as it seems something is not working well.

@anaelle-sw I think you added this feature, could you take a look at the issue?

@asymingt
Copy link
Contributor Author

asymingt commented Aug 4, 2022

@clalancette and @jacobperron -- I suspect that the nondeterminism in this PR has to do with discovery of the /clock topic periodically failing for some reason. If you consider the /clock topic is produced by some ClockSourceNode for consumption by ClockSinkNode (which has use_sim_time: True set as a local parameter). Internally if ClockSinkNode uses this->create_timer the resulting timer will only be advanced when /clock is received). However, it seems like the DDS discovery mechanism sometimes fails to find /clock and the timer spins indefinitely at ros::Time(0). I'm not sure why this only happens on some machines and not others, but I have seen it happen on my local machine.

@asymingt
Copy link
Contributor Author

asymingt commented Aug 4, 2022

@clalancette and @jacobperron -- I suspect that the nondeterminism in this PR has to do with discovery of the /clock topic periodically failing for some reason. If you consider the /clock topic is produced by some ClockSourceNode for consumption by ClockSinkNode (which has use_sim_time: True set as a local parameter). Internally if ClockSinkNode uses this->create_timer the resulting timer will only be advanced when /clock is received). However, it seems like the DDS discovery mechanism sometimes fails to find /clock and the timer spins indefinitely at ros::Time(0). I'm not sure why this only happens on some machines and not others, but I have seen it happen on my local machine.

Update: the problem is completely fixed locally when I set rclcpp::NodeOptions().use_clock_thread(false) when instantiating my ClockSinkNode. Perhaps there is a race condition with the clock thread implementation.

@jacobperron jacobperron requested a review from ivanpauno August 10, 2022 20:28
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 haven't looked at the tests yet, but code looks good.
I only have a minor comment.

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

ivanpauno commented Aug 11, 2022

Update: the problem is completely fixed locally when I set rclcpp::NodeOptions().use_clock_thread(false) when instantiating my ClockSinkNode. Perhaps there is a race condition with the clock thread implementation.

Could you link what the test that was causing issues is?
I went through the previous CI jobs and I see different tests failing, but I'm not sure what's the one you're referring here.

@asymingt
Copy link
Contributor Author

Update: the problem is completely fixed locally when I set rclcpp::NodeOptions().use_clock_thread(false) when instantiating my ClockSinkNode. Perhaps there is a race condition with the clock thread implementation.

Could you link what the test that was causing issues is? I went through the previous CI jobs and I see different tests failing, but I'm not sure what's the one you're referring here.

The last five commits are all empty, and in theory they should all pass. However, passing happens on only some CI workers (look at the CI build history). Locally, things pass every time. I can occasionally replicate the issue with test TestTimeSource.check_sim_time_updated_in_callback_if_use_clock_thread, but there's no single test I can show you repeatedly fails locally.

@ivanpauno
Copy link
Member

The last five commits are all empty, and in theory they should all pass. However, passing happens on only some CI workers (look at the CI build history). Locally, things pass every time. I can occasionally replicate the issue with test TestTimeSource.check_sim_time_updated_in_callback_if_use_clock_thread, but there's no single test I can show you repeatedly fails locally.

Okay, that's strange.
I will take a look and see if I can reproduce locally.

@ivanpauno
Copy link
Member

I'm taking a look to all the failures in https://build.ros2.org/job/Rpr__rclcpp__ubuntu_jammy_amd64/227/#showFailuresLink and https://build.ros2.org/job/Rpr__rclcpp__ubuntu_jammy_amd64/228/#showFailuresLink, and they don't seem to be related to your changes at all.

It seems that for some reason they're happening in the Rpr job but not in the nightlies.

About test_time_source, the tests are written in a way that can easily fail.
Increasing 1s here to a longer duration may fix the issue.

@asymingt
Copy link
Contributor Author

I'm taking a look to all the failures in https://build.ros2.org/job/Rpr__rclcpp__ubuntu_jammy_amd64/227/#showFailuresLink and https://build.ros2.org/job/Rpr__rclcpp__ubuntu_jammy_amd64/228/#showFailuresLink, and they don't seem to be related to your changes at all.

It seems that for some reason they're happening in the Rpr job but not in the nightlies.

About test_time_source, the tests are written in a way that can easily fail. Increasing 1s here to a longer duration may fix the issue.

I initially tried 10s and that was too large, so I dropped it down to 2s and this seems more stable.

@asymingt asymingt force-pushed the asymingt/add-create-timer-function-to-node-class branch from 329ec52 to 3de6312 Compare August 17, 2022 23:58
@asymingt
Copy link
Contributor Author

@jacobperron and @ivanpauno - Please take a look at the last two commits and let me know if you are happy. I think I addressed all review comments, even though this one was quite tricky. I am of the opinion that this PR is now ready to merge.

@asymingt
Copy link
Contributor Author

@ros-pull-request-builder retest this please

1 similar comment
@asymingt
Copy link
Contributor Author

@ros-pull-request-builder retest this please

@ivanpauno
Copy link
Member

Something I noticed while reading the tests, this line should say >= and not ==:

if (clock->now().nanoseconds() == end_time.count()) {

@asymingt
Copy link
Contributor Author

Something I noticed while reading the tests, this line should say >= and not ==:

if (clock->now().nanoseconds() == end_time.count()) {

Fixed in c7acee7

@ivanpauno ivanpauno force-pushed the asymingt/add-create-timer-function-to-node-class branch from c7acee7 to 43adf6e Compare August 26, 2022 18:53
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.

LGTM!
I will wait for @jacobperron approval as I made some minor changes.

Thanks @asymingt !!

…ble call sequence"

This reverts commit 3de6312.

Signed-off-by: Ivan Santiago Paunovic <[email protected]>
Signed-off-by: Ivan Santiago Paunovic <[email protected]>
Signed-off-by: Ivan Santiago Paunovic <[email protected]>
Signed-off-by: Ivan Santiago Paunovic <[email protected]>
@ivanpauno ivanpauno force-pushed the asymingt/add-create-timer-function-to-node-class branch from 43adf6e to 1c16100 Compare August 26, 2022 19:00
Signed-off-by: Ivan Santiago Paunovic <[email protected]>
@asymingt
Copy link
Contributor Author

LGTM! I will wait for @jacobperron approval as I made some minor changes.

Thanks @asymingt !!

Thanks for getting this one over the line, Ivan 👍

Copy link
Member

@jacobperron jacobperron left a comment

Choose a reason for hiding this comment

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

LGTM, pending CI. One tiny nitpick.

rclcpp/include/rclcpp/node_interfaces/node_topics.hpp Outdated Show resolved Hide resolved
@@ -695,7 +694,7 @@ class ClockThreadTestingNode : public rclcpp::Node
this->set_parameter(rclcpp::Parameter("use_sim_time", true));

// Create a 100ms timer
timer_ = this->create_wall_timer(
timer_ = this->create_timer(
Copy link
Member

@jacobperron jacobperron Aug 29, 2022

Choose a reason for hiding this comment

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

I thought the test was checking that the wall timer and simulation time updates were not interfering with each other. But, I'm not sure. I'm okay with disabling the flaky test. Maybe we can create a GitHub ticket to look into it (maybe it is just not a well-defined test and could be removed).

Signed-off-by: Ivan Santiago Paunovic <[email protected]>
@ivanpauno ivanpauno force-pushed the asymingt/add-create-timer-function-to-node-class branch from 7e2e277 to 7e24c8d Compare August 29, 2022 19:08
@ivanpauno
Copy link
Member

CI:

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

@ivanpauno
Copy link
Member

I forgot to include rclcpp_lifecycle and test_rclcpp, running CI again:

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

@ivanpauno ivanpauno merged commit 6167a57 into ros2:rolling Aug 30, 2022
@sloretz
Copy link
Contributor

sloretz commented Aug 30, 2022

I'm seeing a build failure in building tf2_ros that might be related to this change: https://ci.ros2.org/job/ci_linux-aarch64/11736/console#console-section-12

--- stderr: tf2_ros
09:46:40 In file included from �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/install/rclcpp/include/rclcpp/rclcpp/create_subscription.hpp�[K,
09:46:40                  from �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/install/rclcpp/include/rclcpp/rclcpp/node_impl.hpp�[K,
09:46:40                  from �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/install/rclcpp/include/rclcpp/rclcpp/node.hpp:1�[K,
09:46:40                  from �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/install/rclcpp/include/rclcpp/rclcpp/executors/single_threaded_executor.hpp�[K,
09:46:40                  from �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/install/rclcpp/include/rclcpp/rclcpp/executors.hpp�[K,
09:46:40                  from �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/install/rclcpp/include/rclcpp/rclcpp/rclcpp.hpp:�[K,
09:46:40                  from �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/src/ros2/geometry2/tf2_ros/include/tf2_ros/create_timer_interface.h�[K,
09:46:40                  from �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/src/ros2/geometry2/tf2_ros/include/tf2_ros/create_timer_ros.h�[K,
09:46:40                  from �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/src/ros2/geometry2/tf2_ros/src/create_timer_ros.cpp�[K:
09:46:40 /home/jenkins-agent/workspace/ci_linux-aarch64/ws/install/rclcpp/include/rclcpp/rclcpp/create_timer.hpp: In instantiation of ‘�[Krclcpp::TimerBase::SharedPtr rclcpp::create_timer(std::shared_ptr<rclcpp::node_interfaces::NodeBaseInterface>, std::shared_ptr<rclcpp::node_interfaces::NodeTimersInterface>, rclcpp::Clock::SharedPtr, rclcpp::Duration, CallbackT&&, rclcpp::CallbackGroup::SharedPtr) [with CallbackT = std::function<void()>; rclcpp::TimerBase::SharedPtr = std::shared_ptr<rclcpp::TimerBase>; rclcpp::Clock::SharedPtr = std::shared_ptr<rclcpp::Clock>; rclcpp::CallbackGroup::SharedPtr = std::shared_ptr<rclcpp::CallbackGrou�[K’:
09:46:40 �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/src/ros2/geometry2/tf2_ros/src/create_timer_ros.cpp:61:�[K   required from here
09:46:40 �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/install/rclcpp/include/rclcpp/rclcpp/create_timer.hpp:95:��[Kerro�[Kno matching function for call t�[Kcreate_timer(std::__shared_ptr<rclcpp::node_interfaces::NodeBaseInterface, __gnu_cxx::_S_atomic>::element_type*, std::__shared_ptr<rclcpp::node_interfaces::NodeTimersInterface, __gnu_cxx::_S_atomic>::element_type*, rclcpp::Clock::SharedPtr&, std::chrono::duration<long int, std::ratio<1, 1000000000> >, std::function<void()>, rclcpp::CallbackGroup::SharedPt�[K’
09:46:40    95 |   return �[Kcreate_tim�[K
09:46:40       |          �[K~~~~~~~~~~�[K
09:46:40    96 | �[K    node_base.get�[K
09:46:40       |     �[K~~~~~~~~~~~~~�[K  
09:46:40    97 | �[K    node_timers.get�[K
09:46:40       |     �[K~~~~~~~~~~~~~~~�[K
09:46:40    98 | �[K    clo�[K
09:46:40       |     �[K~~~�[K            
09:46:40    99 | �[K    period.to_chrono<std::chrono::nanoseconds>�[K
09:46:40       |     �[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~�[K
09:46:40   100 | �[K    std::forward<CallbackT>(callbac�[K
09:46:40       |     �[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~�[K
09:46:40   101 | �[K    gro�[K;
09:46:40       |     �[K~~~�[K            
09:46:40 �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/install/rclcpp/include/rclcpp/rclcpp/create_timer.hpp:87��[Knot�[Kcandidate�[Ktemplate<class CallbackT> rclcpp::TimerBase::SharedPtr rclcpp::create_timer(std::shared_ptr<rclcpp::node_interfaces::NodeBaseInterface>, std::shared_ptr<rclcpp::node_interfaces::NodeTimersInterface>, rclcpp::Clock::SharedPtr, rclcpp::Duration, CallbackT&&, rclcpp::CallbackGroup::SharedP�[K’
09:46:40    87 | �[Kcreate_ti�[K(
09:46:40       | �[K^~~~~~~~~�[K
09:46:40 �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/install/rclcpp/include/rclcpp/rclcpp/create_timer.hpp:87��[Knot�[K  template argument deduction/substitution failed:
09:46:40 �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/install/rclcpp/include/rclcpp/rclcpp/create_timer.hpp:96:��[Knot�[K  cannot conver�[Knode_base.std::shared_ptr<rclcpp::node_interfaces::NodeBaseInterface>::<anonymous>.std::__shared_ptr<rclcpp::node_interfaces::NodeBaseInterface, __gnu_cxx::_S_atomic>::ge�[K’ (typ�[Kstd::__shared_ptr<rclcpp::node_interfaces::NodeBaseInterface, __gnu_cxx::_S_atomic>::element_ty�[K’ {ak�[Krclcpp::node_interfaces::NodeBaseInterfa�[K’}) to typ�[Kstd::shared_ptr<rclcpp::node_interfaces::NodeBaseInterfa�[K’
09:46:40    96 |     �[Knode_base.ge�[K,
09:46:40       |     �[K~~~~~~~~~~~~�[K
09:46:40 �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/install/rclcpp/include/rclcpp/rclcpp/create_timer.hpp:141��[Knot�[Kcandidate�[Ktemplate<class DurationRepT, class DurationT, class CallbackT> typename rclcpp::GenericTimer<CallbackT>::SharedPtr rclcpp::create_timer(rclcpp::Clock::SharedPtr, std::chrono::duration<_Rep1, _Period1>, CallbackT, rclcpp::CallbackGroup::SharedPtr, rclcpp::node_interfaces::NodeBaseInterface*, rclcpp::node_interfaces::NodeTimersInterfac�[K’
09:46:40   141 | �[Kcreate_ti�[K(
09:46:40       | �[K^~~~~~~~~�[K
09:46:40 �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/install/rclcpp/include/rclcpp/rclcpp/create_timer.hpp:141��[Knot�[K  template argument deduction/substitution failed:
09:46:40 �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/install/rclcpp/include/rclcpp/rclcpp/create_timer.hpp:95:��[Knot�[K  mismatched type�[Kstd::chrono::duration<_Rep1, _Perio�[K’ an�[Kstd::__shared_ptr<rclcpp::node_interfaces::NodeTimersInterface, __gnu_cxx::_S_atomic>::element_ty�[K’ {ak�[Krclcpp::node_interfaces::NodeTimersInterfa�[K’}
09:46:40    95 |   return �[Kcreate_tim�[K
09:46:40       |          �[K~~~~~~~~~~�[K
09:46:40    96 | �[K    node_base.get�[K
09:46:40       |     �[K~~~~~~~~~~~~~�[K  
09:46:40    97 | �[K    node_timers.get�[K
09:46:40       |     �[K~~~~~~~~~~~~~~~�[K
09:46:40    98 | �[K    clo�[K
09:46:40       |     �[K~~~�[K            
09:46:40    99 | �[K    period.to_chrono<std::chrono::nanoseconds>�[K
09:46:40       |     �[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~�[K
09:46:40   100 | �[K    std::forward<CallbackT>(callbac�[K
09:46:40       |     �[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~�[K
09:46:40   101 | �[K    gro�[K;
09:46:40       |     �[K~~~�[K            
09:46:40 �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/install/rclcpp/include/rclcpp/rclcpp/create_timer.hpp:107��[Knot�[Kcandidate�[Ktemplate<class NodeT, class CallbackT> rclcpp::TimerBase::SharedPtr rclcpp::create_timer(NodeT, rclcpp::Clock::SharedPtr, rclcpp::Duration, CallbackT&&, rclcpp::CallbackGroup::SharedP�[K’
09:46:40   107 | �[Kcreate_ti�[K(
09:46:40       | �[K^~~~~~~~~�[K
09:46:40 �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/install/rclcpp/include/rclcpp/rclcpp/create_timer.hpp:107��[Knot�[K  template argument deduction/substitution failed:
09:46:40 �[K/home/jenkins-agent/workspace/ci_linux-aarch64/ws/install/rclcpp/include/rclcpp/rclcpp/create_timer.hpp:95:��[Knot�[K  candidate expects 5 arguments, 6 provided
09:46:40    95 |   return �[Kcreate_tim�[K
09:46:40       |          �[K~~~~~~~~~~�[K
09:46:40    96 | �[K    node_base.get�[K
09:46:40       |     �[K~~~~~~~~~~~~~�[K  
09:46:40    97 | �[K    node_timers.get�[K
09:46:40       |     �[K~~~~~~~~~~~~~~~�[K
09:46:40    98 | �[K    clo�[K
09:46:40       |     �[K~~~�[K            
09:46:40    99 | �[K    period.to_chrono<std::chrono::nanoseconds>�[K
09:46:40       |     �[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~�[K
09:46:40   100 | �[K    std::forward<CallbackT>(callbac�[K
09:46:40       |     �[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~�[K
09:46:40   101 | �[K    gro�[K;
09:46:40       |     �[K~~~�[K            

@jacobperron
Copy link
Member

We probably should have run with test args --package-above rclcpp rclcpp_lifecycle

@sloretz
Copy link
Contributor

sloretz commented Aug 30, 2022

Checking if it's this PR

build: --packags-up-to tf2_ros, test: --packages-select tf2_ros linux aarch64

With this PR: Build Status

WIthout this PR repos file Build Status

sloretz added a commit that referenced this pull request Aug 30, 2022
…sses (#1975)"

This reverts commit 6167a57.

Signed-off-by: Shane Loretz <[email protected]>
sloretz added a commit that referenced this pull request Aug 30, 2022
…sses (#1975)" (#2009)

This reverts commit 6167a57.

Signed-off-by: Shane Loretz <[email protected]>

Signed-off-by: Shane Loretz <[email protected]>
ivanpauno added a commit that referenced this pull request Aug 30, 2022
ivanpauno added a commit that referenced this pull request Aug 30, 2022
…ode` classes (#1975)" (#2009)"

Signed-off-by: Ivan Santiago Paunovic <[email protected]>

This reverts commit 11b5f8d.
ivanpauno added a commit that referenced this pull request Aug 31, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants