Open christophfroehlich opened 1 month ago
It works with humble+jammy, but not with rolling on jammy or noble.
I was not able to reproduce it any more.
But the termination of the program seems to be faulty in the CI.
3: [INFO] [robot_state_publisher-2]: sending signal 'SIGINT' to process[robot_state_publisher-2]
3: [INFO] [ros2_control_node-1]: sending signal 'SIGINT' to process[ros2_control_node-1]
3: [robot_state_publisher-2] [INFO] [1722025338.199935298] [rclcpp]: signal_handler(signum=2)
3: [ros2_control_node-1] [INFO] [1722025338.200264847] [rclcpp]: signal_handler(signum=2)
3: [ros2_control_node-1] [ERROR] [1722025338.270089265] [joint_state_broadcaster]: Unable to start transition 7 from current state shuttingdown: Could not publish transition: publisher's context is invalid, at ./src/rcl/publisher.c:423, at ./src/rcl_lifecycle.c:368
3: [ros2_control_node-1] [WARN] [1722025338.270111273] [rclcpp_lifecycle]: Shutdown error in destruction of LifecycleNode: final state(active)
3: [ros2_control_node-1] [ERROR] [1722025338.270519875] [forward_velocity_controller]: Unable to start transition 7 from current state shuttingdown: Could not publish transition: publisher's context is invalid, at ./src/rcl/publisher.c:423, at ./src/rcl_lifecycle.c:368
3: [ros2_control_node-1] [WARN] [1722025338.270526578] [rclcpp_lifecycle]: Shutdown error in destruction of LifecycleNode: final state(active)
3: [ros2_control_node-1] terminate called without an active exception
3: [ros2_control_node-1] Stack trace (most recent call last):
3: [ros2_control_node-1] #31 Source "/usr/include/c++/13/bits/shared_ptr.h", line 175, in ~shared_ptr [0x561d1ef4bc0f]
3: [ros2_control_node-1] 172: * pointer see `std::shared_ptr::owner_before` and `std::owner_less`.
3: [ros2_control_node-1] 173: */
3: [ros2_control_node-1] 174: template<typename _Tp>
3: [ros2_control_node-1] > 175: class shared_ptr : public __shared_ptr<_Tp>
3: [ros2_control_node-1] 176: {
3: [ros2_control_node-1] 177: template<typename... _Args>
3: [ros2_control_node-1] 178: using _Constructible = typename enable_if<
3: [ros2_control_node-1] #30 Source "/usr/include/c++/13/bits/shared_ptr_base.h", line 1524, in ~__shared_ptr [0x561d1ef4bbef]
3: [ros2_control_node-1] 1522: __shared_ptr(const __shared_ptr&) noexcept = default;
3: [ros2_control_node-1] 1523: __shared_ptr& operator=(const __shared_ptr&) noexcept = default;
3: [ros2_control_node-1] >1524: ~__shared_ptr() = default;
3: [ros2_control_node-1] 1525:
3: [ros2_control_node-1] 1526: template<typename _Yp, typename = _Compatible<_Yp>>
3: [ros2_control_node-1] 1527: __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept
3: [ros2_control_node-1] #29 Source "/usr/include/c++/13/bits/shared_ptr_base.h", line 1071, in ~__shared_count [0x561d1ef4bf98]
3: [ros2_control_node-1] 1068: ~__shared_count() noexcept
3: [ros2_control_node-1] 1069: {
3: [ros2_control_node-1] 1070: if (_M_pi != nullptr)
3: [ros2_control_node-1] >1071: _M_pi->_M_release();
3: [ros2_control_node-1] 1072: }
3: [ros2_control_node-1] 1073:
3: [ros2_control_node-1] 1074: __shared_count(const __shared_count& __r) noexcept
3: [ros2_control_node-1] #28 Source "/usr/include/c++/13/bits/shared_ptr_base.h", line 353, in _M_release [0x561d1ef4b160]
3: [ros2_control_node-1] 350: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1)
3: [ros2_control_node-1] 351: [[__unlikely__]]
3: [ros2_control_node-1] 352: {
3: [ros2_control_node-1] > 353: _M_release_last_use_cold();
3: [ros2_control_node-1] 354: return;
3: [ros2_control_node-1] 355: }
3: [ros2_control_node-1] 356: }
3: [ros2_control_node-1] #27 Source "/usr/include/c++/13/bits/shared_ptr_base.h", line 199, in _M_release_last_use_cold [0x561d1ef4bd7f]
3: [ros2_control_node-1] 196: __attribute__((__noinline__))
3: [ros2_control_node-1] 197: void
3: [ros2_control_node-1] 198: _M_release_last_use_cold() noexcept
3: [ros2_control_node-1] > 199: { _M_release_last_use(); }
3: [ros2_control_node-1] 200:
3: [ros2_control_node-1] 201: // Increment the weak count.
3: [ros2_control_node-1] 202: void
3: [ros2_control_node-1] #26 Source "/usr/include/c++/13/bits/shared_ptr_base.h", line 175, in _M_release_last_use [0x561d1ef4c890]
3: [ros2_control_node-1] 172: _M_release_last_use() noexcept
3: [ros2_control_node-1] 173: {
3: [ros2_control_node-1] 174: _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_use_count);
3: [ros2_control_node-1] > 175: _M_dispose();
3: [ros2_control_node-1] 176: // There must be a memory barrier between dispose() and destroy()
3: [ros2_control_node-1] 177: // to ensure that the effects of dispose() are observed in the
3: [ros2_control_node-1] 178: // thread that runs destroy().
3: [ros2_control_node-1] #25 | Source "/usr/include/c++/13/bits/shared_ptr_base.h", line 613, in destroy<controller_manager::ControllerManager>
3: [ros2_control_node-1] | 611: _M_dispose() noexcept
3: [ros2_control_node-1] | 612: {
3: [ros2_control_node-1] | > 613: allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr());
3: [ros2_control_node-1] | 614: }
3: [ros2_control_node-1] Source "/usr/include/c++/13/bits/alloc_traits.h", line 675, in _M_dispose [0x561d1ef4ef77]
3: [ros2_control_node-1] 672: static _GLIBCXX20_CONSTEXPR void
3: [ros2_control_node-1] 673: destroy(allocator_type&, _Up* __p)
3: [ros2_control_node-1] 674: noexcept(is_nothrow_destructible<_Up>::value)
3: [ros2_control_node-1] > 675: { std::_Destroy(__p); }
3: [ros2_control_node-1] 676:
3: [ros2_control_node-1] 677: /// max_size is ill-formed for allocator<void>
3: [ros2_control_node-1] 678: static size_type
3: [ros2_control_node-1] #24 Source "/usr/include/c++/13/bits/stl_construct.h", line 151, in _Destroy<controller_manager::ControllerManager> [0x561d1ef4f286]
3: [ros2_control_node-1] 148: #if __cplusplus > 201703L
3: [ros2_control_node-1] 149: std::destroy_at(__pointer);
3: [ros2_control_node-1] 150: #else
3: [ros2_control_node-1] > 151: __pointer->~_Tp();
3: [ros2_control_node-1] 152: #endif
3: [ros2_control_node-1] 153: }
3: [INFO] [robot_state_publisher-2]: process has finished cleanly [pid 217606]
3: [ros2_control_node-1] #23 Source "/workspaces/ros2_rolling_ws/src/ros2_control/controller_manager/include/controller_manager/controller_manager.hpp", line 87, in ~ControllerManager [0x7f91bfbc8e03]
3: [ros2_control_node-1] 84: const rclcpp::NodeOptions & options = get_cm_node_options());
3: [ros2_control_node-1] 85:
3: [ros2_control_node-1] 86: CONTROLLER_MANAGER_PUBLIC
3: [ros2_control_node-1] > 87: virtual ~ControllerManager() = default;
3: [ros2_control_node-1] 88:
3: [ros2_control_node-1] 89: CONTROLLER_MANAGER_PUBLIC
3: [ros2_control_node-1] 90: void robot_description_callback(const std_msgs::msg::String & msg);
3: [ros2_control_node-1] #22 Source "/usr/include/c++/13/bits/unique_ptr.h", line 404, in ~unique_ptr [0x7f91bfaa25d3]
3: [ros2_control_node-1] 401: "unique_ptr's deleter must be invocable with a pointer");
3: [ros2_control_node-1] 402: auto& __ptr = _M_t._M_ptr();
3: [ros2_control_node-1] 403: if (__ptr != nullptr)
3: [ros2_control_node-1] > 404: get_deleter()(std::move(__ptr));
3: [ros2_control_node-1] 405: __ptr = pointer();
3: [ros2_control_node-1] 406: }
3: [ros2_control_node-1] #21 Source "/usr/include/c++/13/bits/unique_ptr.h", line 99, in operator() [0x7f91bfab2c45]
3: [ros2_control_node-1] 96: "can't delete pointer to incomplete type");
3: [ros2_control_node-1] 97: static_assert(sizeof(_Tp)>0,
3: [ros2_control_node-1] 98: "can't delete pointer to incomplete type");
3: [ros2_control_node-1] > 99: delete __ptr;
3: [ros2_control_node-1] 100: }
3: [ros2_control_node-1] 101: };
3: [ros2_control_node-1] #20 Source "/workspaces/ros2_rolling_ws/src/ros2_control/hardware_interface/src/resource_manager.cpp", line 1043, in ~ResourceManager [0x7f91be9ed661]
3: [ros2_control_node-1] 1040: {
3: [ros2_control_node-1] 1041: }
3: [ros2_control_node-1] 1042:
3: [ros2_control_node-1] >1043: ResourceManager::~ResourceManager() = default;
3: [ros2_control_node-1] 1044:
3: [ros2_control_node-1] 1045: ResourceManager::ResourceManager(
3: [ros2_control_node-1] 1046: const std::string & urdf, rclcpp::node_interfaces::NodeClockInterface::SharedPtr clock_interface,
3: [ros2_control_node-1] #19 Source "/workspaces/ros2_rolling_ws/src/ros2_control/hardware_interface/src/resource_manager.cpp", line 1043, in ~ResourceManager [0x7f91be9ed62f]
3: [ros2_control_node-1] 1040: {
3: [ros2_control_node-1] 1041: }
3: [ros2_control_node-1] 1042:
3: [ros2_control_node-1] >1043: ResourceManager::~ResourceManager() = default;
3: [ros2_control_node-1] 1044:
3: [ros2_control_node-1] 1045: ResourceManager::ResourceManager(
3: [ros2_control_node-1] 1046: const std::string & urdf, rclcpp::node_interfaces::NodeClockInterface::SharedPtr clock_interface,
3: [ros2_control_node-1] #18 Source "/usr/include/c++/13/bits/unique_ptr.h", line 404, in ~unique_ptr [0x7f91bea0c30d]
3: [ros2_control_node-1] 401: "unique_ptr's deleter must be invocable with a pointer");
3: [ros2_control_node-1] 402: auto& __ptr = _M_t._M_ptr();
3: [ros2_control_node-1] 403: if (__ptr != nullptr)
3: [ros2_control_node-1] > 404: get_deleter()(std::move(__ptr));
3: [ros2_control_node-1] 405: __ptr = pointer();
3: [ros2_control_node-1] 406: }
3: [ros2_control_node-1] #17 Source "/usr/include/c++/13/bits/unique_ptr.h", line 99, in operator() [0x7f91bea190c7]
3: [ros2_control_node-1] 96: "can't delete pointer to incomplete type");
3: [ros2_control_node-1] 97: static_assert(sizeof(_Tp)>0,
3: [ros2_control_node-1] 98: "can't delete pointer to incomplete type");
3: [ros2_control_node-1] > 99: delete __ptr;
3: [ros2_control_node-1] 100: }
3: [ros2_control_node-1] 101: };
3: [ros2_control_node-1] #16 Source "/workspaces/ros2_rolling_ws/src/ros2_control/hardware_interface/src/resource_manager.cpp", line 90, in ~ResourceStorage [0x7f91bea19025]
3: [ros2_control_node-1] 87: return ss.str();
3: [ros2_control_node-1] 88: };
3: [ros2_control_node-1] 89:
3: [ros2_control_node-1] > 90: class ResourceStorage
3: [ros2_control_node-1] 91: {
3: [ros2_control_node-1] 92: static constexpr const char * pkg_name = "hardware_interface";
3: [ros2_control_node-1] #15 | Source "/usr/include/c++/13/bits/stl_vector.h", line 735, in _Destroy<hardware_interface::Sensor*, hardware_interface::Sensor>
3: [ros2_control_node-1] | 733: ~vector() _GLIBCXX_NOEXCEPT
3: [ros2_control_node-1] | 734: {
3: [ros2_control_node-1] | > 735: std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
3: [ros2_control_node-1] | 736: _M_get_Tp_allocator());
3: [ros2_control_node-1] | 737: _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC;
3: [ros2_control_node-1] Source "/usr/include/c++/13/bits/alloc_traits.h", line 948, in ~vector [0x7f91bea03dc1]
3: [ros2_control_node-1] 945: _Destroy(_ForwardIterator __first, _ForwardIterator __last,
3: [ros2_control_node-1] 946: allocator<_Tp>&)
3: [ros2_control_node-1] 947: {
3: [ros2_control_node-1] > 948: std::_Destroy(__first, __last);
3: [ros2_control_node-1] 949: }
3: [ros2_control_node-1] 950: #endif
3: [ros2_control_node-1] 951: /// @endcond
3: [ros2_control_node-1] #14 Source "/usr/include/c++/13/bits/stl_construct.h", line 196, in _Destroy<hardware_interface::Sensor*> [0x7f91bea28724]
3: [ros2_control_node-1] 193: return std::_Destroy_aux<false>::__destroy(__first, __last);
3: [ros2_control_node-1] 194: #endif
3: [ros2_control_node-1] 195: std::_Destroy_aux<__has_trivial_destructor(_Value_type)>::
3: [ros2_control_node-1] > 196: __destroy(__first, __last);
3: [ros2_control_node-1] 197: }
3: [ros2_control_node-1] 198:
3: [ros2_control_node-1] 199: template<bool>
3: [ros2_control_node-1] #13 Source "/usr/include/c++/13/bits/stl_construct.h", line 163, in __destroy<hardware_interface::Sensor*> [0x7f91bea30406]
3: [ros2_control_node-1] 160: __destroy(_ForwardIterator __first, _ForwardIterator __last)
3: [ros2_control_node-1] 161: {
3: [ros2_control_node-1] 162: for (; __first != __last; ++__first)
3: [ros2_control_node-1] > 163: std::_Destroy(std::__addressof(*__first));
3: [ros2_control_node-1] 164: }
3: [ros2_control_node-1] 165: };
3: [ros2_control_node-1] #12 Source "/usr/include/c++/13/bits/stl_construct.h", line 151, in _Destroy<hardware_interface::Sensor> [0x7f91bea3b034]
3: [ros2_control_node-1] 148: #if __cplusplus > 201703L
3: [ros2_control_node-1] 149: std::destroy_at(__pointer);
3: [ros2_control_node-1] 150: #else
3: [ros2_control_node-1] > 151: __pointer->~_Tp();
3: [ros2_control_node-1] 152: #endif
3: [ros2_control_node-1] 153: }
3: [ros2_control_node-1] #11 Source "/workspaces/ros2_rolling_ws/src/ros2_control/hardware_interface/include/hardware_interface/sensor.hpp", line 47, in ~Sensor [0x7f91be9ff893]
3: [ros2_control_node-1] 45: Sensor(Sensor && other) = default;
3: [ros2_control_node-1] 46:
3: [ros2_control_node-1] > 47: ~Sensor() = default;
3: [ros2_control_node-1] 48:
3: [ros2_control_node-1] 49: HARDWARE_INTERFACE_PUBLIC
3: [ros2_control_node-1] 50: const rclcpp_lifecycle::State & initialize(
3: [ros2_control_node-1] #10 Source "/usr/include/c++/13/bits/unique_ptr.h", line 404, in ~unique_ptr [0x7f91bea0bcd1]
3: [ros2_control_node-1] 401: "unique_ptr's deleter must be invocable with a pointer");
3: [ros2_control_node-1] 402: auto& __ptr = _M_t._M_ptr();
3: [ros2_control_node-1] 403: if (__ptr != nullptr)
3: [ros2_control_node-1] > 404: get_deleter()(std::move(__ptr));
3: [ros2_control_node-1] 405: __ptr = pointer();
3: [ros2_control_node-1] 406: }
3: [ros2_control_node-1] #9 Source "/usr/include/c++/13/bits/unique_ptr.h", line 99, in operator() [0x7f91bea18669]
3: [ros2_control_node-1] 96: "can't delete pointer to incomplete type");
3: [ros2_control_node-1] 97: static_assert(sizeof(_Tp)>0,
3: [ros2_control_node-1] 98: "can't delete pointer to incomplete type");
3: [ros2_control_node-1] > 99: delete __ptr;
3: [ros2_control_node-1] 100: }
3: [ros2_control_node-1] 101: };
3: [ros2_control_node-1] #8 Source "/workspaces/ros2_rolling_ws/src/ros2_control_demos/example_14/hardware/include/ros2_control_demo_example_14/rrbot_sensor_for_position_feedback.hpp", line 42, in ~RRBotSensorPositionFeedback [0x7f91b46023bf]
3: [ros2_control_node-1] 39: namespace ros2_control_demo_example_14
3: [ros2_control_node-1] 40: {
3: [ros2_control_node-1] 41: class RRBotSensorPositionFeedback : public hardware_interface::SensorInterface
3: [ros2_control_node-1] > 42: {
3: [ros2_control_node-1] 43: public:
3: [ros2_control_node-1] 44: RCLCPP_SHARED_PTR_DEFINITIONS(RRBotSensorPositionFeedback);
3: [ros2_control_node-1] #7 Source "/workspaces/ros2_rolling_ws/src/ros2_control_demos/example_14/hardware/include/ros2_control_demo_example_14/rrbot_sensor_for_position_feedback.hpp", line 42, in ~RRBotSensorPositionFeedback [0x7f91b460234b]
3: [ros2_control_node-1] 39: namespace ros2_control_demo_example_14
3: [ros2_control_node-1] 40: {
3: [ros2_control_node-1] 41: class RRBotSensorPositionFeedback : public hardware_interface::SensorInterface
3: [ros2_control_node-1] > 42: {
3: [ros2_control_node-1] 43: public:
3: [ros2_control_node-1] 44: RCLCPP_SHARED_PTR_DEFINITIONS(RRBotSensorPositionFeedback);
3: [ros2_control_node-1] #6 | Source "/usr/include/c++/13/bits/std_thread.h", line 173, in __terminate
3: [ros2_control_node-1] | 171: {
3: [ros2_control_node-1] | 172: if (joinable())
3: [ros2_control_node-1] | > 173: std::__terminate();
3: [ros2_control_node-1] | 174: }
3: [ros2_control_node-1] Source "/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h", line 322, in ~thread [0x561d1ef4b1f6]
3: [ros2_control_node-1] 319: inline void __terminate() _GLIBCXX_USE_NOEXCEPT
3: [ros2_control_node-1] 320: {
3: [ros2_control_node-1] 321: void terminate() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__noreturn__));
3: [ros2_control_node-1] > 322: terminate();
3: [ros2_control_node-1] 323: }
3: [ros2_control_node-1] 324: #pragma GCC visibility pop
3: [ros2_control_node-1] 325: }
3: [ros2_control_node-1] #5 Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33", at 0x7f91bef68a48, in std::terminate()
3: [ros2_control_node-1] #4 Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33", at 0x7f91bef7de9b, in
3: [ros2_control_node-1] #3 Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33", at 0x7f91bef68ffd, in
3: [ros2_control_node-1] #2 Object "/usr/lib/x86_64-linux-gnu/libc.so.6", at 0x7f91becac8fe, in abort
3: [ros2_control_node-1] #1 Object "/usr/lib/x86_64-linux-gnu/libc.so.6", at 0x7f91becc926d, in raise
3: [ros2_control_node-1] #0 Object "/usr/lib/x86_64-linux-gnu/libc.so.6", at 0x7f91bed22b1c, in pthread_kill
3: [ros2_control_node-1] Aborted (Signal sent by tkill() 217594 1001)
$ ros2 launch ros2_control_demo_example_14 rrbot_modular_actuators_without_feedback_sensors_for_position_feedback.launch.py
givesEnvironment: