ros-controls / ros2_control_demos

This repository aims at providing examples to illustrate ros2_control and ros2_controllers
https://control.ros.org
Apache License 2.0
392 stars 185 forks source link

Example_14 is broken #542

Open christophfroehlich opened 1 month ago

christophfroehlich commented 1 month ago

$ ros2 launch ros2_control_demo_example_14 rrbot_modular_actuators_without_feedback_sensors_for_position_feedback.launch.py gives

[ros2_control_node-1] [WARN] [1721667354.774305495] [controller_manager.resource_manager]: Actuator hardware component 'RRBotModularJoint1' from plugin 'ros2_control_demo_example_14/RRBotActuatorWithoutFeedback' failed to initialize.
[ros2_control_node-1] terminate called without an active exception
[ros2_control_node-1] Stack trace (most recent call last) in thread 136275:
[ros2_control_node-1] [INFO] [1721667354.776150110] [RRBotSensorPositionFeedback]: Listening for connection on port 23287.
[ros2_control_node-1] [INFO] [1721667354.777724058] [RRBotSensorPositionFeedback]: Listening for connection on port 23286.
[ros2_control_node-1] #31   Source "/usr/include/c++/13/bits/invoke.h", line 96, in __invoke<rclcpp::AnySubscriptionCallback<std_msgs::msg::String_<std::allocator<void> >, std::allocator<void> >::dispatch<>(std::shared_ptr<std_msgs::msg::String_<std::allocator<void> > >, const rclcpp::MessageInfo&)::<lambda(auto:29&&)>, std::function<void(const std_msgs::msg::String_<std::allocator<void> >&)>&> [0x7fea54a8ca1b]
[ros2_control_node-1]          93:       using __result = __invoke_result<_Callable, _Args...>;
[ros2_control_node-1]          94:       using __type = typename __result::type;
[ros2_control_node-1]          95:       using __tag = typename __result::__invoke_type;
[ros2_control_node-1]       >  96:       return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn),
[ros2_control_node-1]          97:                                      std::forward<_Args>(__args)...);
[ros2_control_node-1]          98:     }
[ros2_control_node-1] #30   Source "/usr/include/c++/13/bits/invoke.h", line 61, in __invoke_impl<void, rclcpp::AnySubscriptionCallback<std_msgs::msg::String_<std::allocator<void> >, std::allocator<void> >::dispatch<>(std::shared_ptr<std_msgs::msg::String_<std::allocator<void> > >, const rclcpp::MessageInfo&)::<lambda(auto:29&&)>, std::function<void(const std_msgs::msg::String_<std::allocator<void> >&)>&> [0x7fea54a91a1e]
[ros2_control_node-1]          58:   template<typename _Res, typename _Fn, typename... _Args>
[ros2_control_node-1]          59:     constexpr _Res
[ros2_control_node-1]          60:     __invoke_impl(__invoke_other, _Fn&& __f, _Args&&... __args)
[ros2_control_node-1]       >  61:     { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); }
[ros2_control_node-1]          62: 
[ros2_control_node-1]          63:   template<typename _Res, typename _MemFun, typename _Tp, typename... _Args>
[ros2_control_node-1]          64:     constexpr _Res
[ros2_control_node-1] #29   Source "/opt/ros/rolling/include/rclcpp/rclcpp/any_subscription_callback.hpp", line 521, in dispatch<> [0x7fea54a74db4]
[ros2_control_node-1]         518:         }
[ros2_control_node-1]         519:         // conditions for output is ros message
[ros2_control_node-1]         520:         else if constexpr (std::is_same_v<T, ConstRefROSMessageCallback>) {  // NOLINT
[ros2_control_node-1]       > 521:           callback(*message);
[ros2_control_node-1]         522:         } else if constexpr (std::is_same_v<T, ConstRefWithInfoROSMessageCallback>) {
[ros2_control_node-1]         523:           callback(*message, message_info);
[ros2_control_node-1]         524:         } else if constexpr (std::is_same_v<T, UniquePtrROSMessageCallback>) {
[ros2_control_node-1] #28   Source "/usr/include/c++/13/bits/std_function.h", line 591, in operator() [0x7fea54a7ff28]
[ros2_control_node-1]         588:       {
[ros2_control_node-1]         589:      if (_M_empty())
[ros2_control_node-1]         590:        __throw_bad_function_call();
[ros2_control_node-1]       > 591:      return _M_invoker(_M_functor, std::forward<_ArgTypes>(__args)...);
[ros2_control_node-1]         592:       }
[ros2_control_node-1]         593: 
[ros2_control_node-1]         594: #if __cpp_rtti
[ros2_control_node-1] #27   Source "/usr/include/c++/13/bits/std_function.h", line 290, in _M_invoke [0x7fea549aad1c]
[ros2_control_node-1]         287:       static _Res
[ros2_control_node-1]         288:       _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args)
[ros2_control_node-1]         289:       {
[ros2_control_node-1]       > 290:      return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor),
[ros2_control_node-1]         291:                                   std::forward<_ArgTypes>(__args)...);
[ros2_control_node-1]         292:       }
[ros2_control_node-1] #26   Source "/usr/include/c++/13/bits/invoke.h", line 111, in __invoke_r<void, std::_Bind<void (controller_manager::ControllerManager::*(controller_manager::ControllerManager*, std::_Placeholder<1>))(const std_msgs::msg::String_<std::allocator<void> >&)>&, const std_msgs::msg::String_<std::allocator<void> >&> [0x7fea549bb4b0]
[ros2_control_node-1]         108:       using __type = typename __result::type;
[ros2_control_node-1]         109:       using __tag = typename __result::__invoke_type;
[ros2_control_node-1]         110:       if constexpr (is_void_v<_Res>)
[ros2_control_node-1]       > 111:      std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn),
[ros2_control_node-1]         112:                                      std::forward<_Args>(__args)...);
[ros2_control_node-1]         113:       else
[ros2_control_node-1]         114:      return std::__invoke_impl<__type>(__tag{},
[ros2_control_node-1] #25   Source "/usr/include/c++/13/bits/invoke.h", line 61, in __invoke_impl<void, std::_Bind<void (controller_manager::ControllerManager::*(controller_manager::ControllerManager*, std::_Placeholder<1>))(const std_msgs::msg::String_<std::allocator<void> >&)>&, const std_msgs::msg::String_<std::allocator<void> >&> [0x7fea549d1194]
[ros2_control_node-1]          58:   template<typename _Res, typename _Fn, typename... _Args>
[ros2_control_node-1]          59:     constexpr _Res
[ros2_control_node-1]          60:     __invoke_impl(__invoke_other, _Fn&& __f, _Args&&... __args)
[ros2_control_node-1]       >  61:     { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); }
[ros2_control_node-1]          62: 
[ros2_control_node-1]          63:   template<typename _Res, typename _MemFun, typename _Tp, typename... _Args>
[ros2_control_node-1]          64:     constexpr _Res
[ros2_control_node-1] #24   Source "/usr/include/c++/13/functional", line 591, in operator()<const std_msgs::msg::String_<std::allocator<void> >&> [0x7fea549e5f1d]
[ros2_control_node-1]         588:      _Result
[ros2_control_node-1]         589:      operator()(_Args&&... __args)
[ros2_control_node-1]         590:      {
[ros2_control_node-1]       > 591:        return this->__call<_Result>(
[ros2_control_node-1]         592:            std::forward_as_tuple(std::forward<_Args>(__args)...),
[ros2_control_node-1]         593:            _Bound_indexes());
[ros2_control_node-1]         594:      }
[ros2_control_node-1] #23   Source "/usr/include/c++/13/functional", line 506, in __call<void, const std_msgs::msg::String_<std::allocator<void> >&, 0, 1> [0x7fea549f7901]
[ros2_control_node-1]         503:      _Result
[ros2_control_node-1]         504:      __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>)
[ros2_control_node-1]         505:      {
[ros2_control_node-1]       > 506:        return std::__invoke(_M_f,
[ros2_control_node-1]         507:            _Mu<_Bound_args>()(std::get<_Indexes>(_M_bound_args), __args)...
[ros2_control_node-1]         508:            );
[ros2_control_node-1]         509:      }
[ros2_control_node-1] #22   Source "/usr/include/c++/13/bits/invoke.h", line 96, in __invoke<void (controller_manager::ControllerManager::*&)(const std_msgs::msg::String_<std::allocator<void> >&), controller_manager::ControllerManager*&, const std_msgs::msg::String_<std::allocator<void> >&> [0x7fea54a03d3e]
[ros2_control_node-1]          93:       using __result = __invoke_result<_Callable, _Args...>;
[ros2_control_node-1]          94:       using __type = typename __result::type;
[ros2_control_node-1]          95:       using __tag = typename __result::__invoke_type;
[ros2_control_node-1]       >  96:       return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn),
[ros2_control_node-1]          97:                                      std::forward<_Args>(__args)...);
[ros2_control_node-1]          98:     }
[ros2_control_node-1] #21   Source "/usr/include/c++/13/bits/invoke.h", line 74, in __invoke_impl<void, void (controller_manager::ControllerManager::*&)(const std_msgs::msg::String_<std::allocator<void> >&), controller_manager::ControllerManager*&, const std_msgs::msg::String_<std::allocator<void> >&> [0x7fea54a10f12]
[ros2_control_node-1]          71:     __invoke_impl(__invoke_memfun_deref, _MemFun&& __f, _Tp&& __t,
[ros2_control_node-1]          72:                _Args&&... __args)
[ros2_control_node-1]          73:     {
[ros2_control_node-1]       >  74:       return ((*std::forward<_Tp>(__t)).*__f)(std::forward<_Args>(__args)...);
[ros2_control_node-1]          75:     }
[ros2_control_node-1]          76: 
[ros2_control_node-1]          77:   template<typename _Res, typename _MemPtr, typename _Tp>
[ros2_control_node-1] #20   Source "/workspaces/ros2_rolling_ws/src/ros2_control/controller_manager/src/controller_manager.cpp", line 293, in robot_description_callback [0x7fea54900988]
[ros2_control_node-1]         290:       "ResourceManager has already loaded a urdf. Ignoring attempt to reload a robot description.");
[ros2_control_node-1]         291:     return;
[ros2_control_node-1]         292:   }
[ros2_control_node-1]       > 293:   init_resource_manager(robot_description_);
[ros2_control_node-1]         294:   if (is_resource_manager_initialized())
[ros2_control_node-1]         295:   {
[ros2_control_node-1]         296:     RCLCPP_INFO(
[ros2_control_node-1] #19   Source "/workspaces/ros2_rolling_ws/src/ros2_control/controller_manager/src/controller_manager.cpp", line 306, in init_resource_manager [0x7fea5490153e]
[ros2_control_node-1]         304: void ControllerManager::init_resource_manager(const std::string & robot_description)
[ros2_control_node-1]         305: {
[ros2_control_node-1]       > 306:   if (!resource_manager_->load_and_initialize_components(robot_description, update_rate_))
[ros2_control_node-1]         307:   {
[ros2_control_node-1]         308:     RCLCPP_WARN(
[ros2_control_node-1]         309:       get_logger(),
[ros2_control_node-1] #18   Source "/workspaces/ros2_rolling_ws/src/ros2_control/hardware_interface/src/resource_manager.cpp", line 1133, in load_and_initialize_components [0x7fea538870fe]
[ros2_control_node-1]        1130:   else
[ros2_control_node-1]        1131:   {
[ros2_control_node-1]        1132:     std::scoped_lock guard(resource_interfaces_lock_, claimed_command_interfaces_lock_);
[ros2_control_node-1]       >1133:     resource_storage_->clear();
[ros2_control_node-1]        1134:     // cleanup everything
[ros2_control_node-1]        1135:     components_are_loaded_and_initialized_ = false;
[ros2_control_node-1]        1136:   }
[ros2_control_node-1] #17   Source "/workspaces/ros2_rolling_ws/src/ros2_control/hardware_interface/src/resource_manager.cpp", line 936, in clear [0x7fea53898dd3]
[ros2_control_node-1]         933:   void clear()
[ros2_control_node-1]         934:   {
[ros2_control_node-1]         935:     actuators_.clear();
[ros2_control_node-1]       > 936:     sensors_.clear();
[ros2_control_node-1]         937:     systems_.clear();
[ros2_control_node-1]         938: 
[ros2_control_node-1]         939:     async_actuators_.clear();
[ros2_control_node-1] #16   Source "/usr/include/c++/13/bits/stl_vector.h", line 1606, in clear [0x7fea538a5049]
[ros2_control_node-1]        1603:       _GLIBCXX20_CONSTEXPR
[ros2_control_node-1]        1604:       void
[ros2_control_node-1]        1605:       clear() _GLIBCXX_NOEXCEPT
[ros2_control_node-1]       >1606:       { _M_erase_at_end(this->_M_impl._M_start); }
[ros2_control_node-1]        1607: 
[ros2_control_node-1]        1608:     protected:
[ros2_control_node-1]        1609:       /**
[ros2_control_node-1] #15 | Source "/usr/include/c++/13/bits/stl_vector.h", line 1937, in _Destroy<hardware_interface::Sensor*, hardware_interface::Sensor>
[ros2_control_node-1]     |  1935:      if (size_type __n = this->_M_impl._M_finish - __pos)
[ros2_control_node-1]     |  1936:        {
[ros2_control_node-1]     | >1937:          std::_Destroy(__pos, this->_M_impl._M_finish,
[ros2_control_node-1]     |  1938:                        _M_get_Tp_allocator());
[ros2_control_node-1]     |  1939:          this->_M_impl._M_finish = __pos;
[ros2_control_node-1]       Source "/usr/include/c++/13/bits/alloc_traits.h", line 948, in _M_erase_at_end [0x7fea538b1c99]
[ros2_control_node-1]         945:     _Destroy(_ForwardIterator __first, _ForwardIterator __last,
[ros2_control_node-1]         946:           allocator<_Tp>&)
[ros2_control_node-1]         947:     {
[ros2_control_node-1]       > 948:       std::_Destroy(__first, __last);
[ros2_control_node-1]         949:     }
[ros2_control_node-1]         950: #endif
[ros2_control_node-1]         951:   /// @endcond
[ros2_control_node-1] #14   Source "/usr/include/c++/13/bits/stl_construct.h", line 196, in _Destroy<hardware_interface::Sensor*> [0x7fea538c1724]
[ros2_control_node-1]         193:      return std::_Destroy_aux<false>::__destroy(__first, __last);
[ros2_control_node-1]         194: #endif
[ros2_control_node-1]         195:       std::_Destroy_aux<__has_trivial_destructor(_Value_type)>::
[ros2_control_node-1]       > 196:      __destroy(__first, __last);
[ros2_control_node-1]         197:     }
[ros2_control_node-1]         198: 
[ros2_control_node-1]         199:   template<bool>
[ros2_control_node-1] #13   Source "/usr/include/c++/13/bits/stl_construct.h", line 163, in __destroy<hardware_interface::Sensor*> [0x7fea538c9406]
[ros2_control_node-1]         160:      __destroy(_ForwardIterator __first, _ForwardIterator __last)
[ros2_control_node-1]         161:      {
[ros2_control_node-1]         162:        for (; __first != __last; ++__first)
[ros2_control_node-1]       > 163:          std::_Destroy(std::__addressof(*__first));
[ros2_control_node-1]         164:      }
[ros2_control_node-1]         165:     };
[ros2_control_node-1] #12   Source "/usr/include/c++/13/bits/stl_construct.h", line 151, in _Destroy<hardware_interface::Sensor> [0x7fea538d4034]
[ros2_control_node-1]         148: #if __cplusplus > 201703L
[ros2_control_node-1]         149:       std::destroy_at(__pointer);
[ros2_control_node-1]         150: #else
[ros2_control_node-1]       > 151:       __pointer->~_Tp();
[ros2_control_node-1]         152: #endif
[ros2_control_node-1]         153:     }
[ros2_control_node-1] #11   Source "/workspaces/ros2_rolling_ws/src/ros2_control/hardware_interface/include/hardware_interface/sensor.hpp", line 47, in ~Sensor [0x7fea53898893]
[ros2_control_node-1]          45:   Sensor(Sensor && other) = default;
[ros2_control_node-1]          46: 
[ros2_control_node-1]       >  47:   ~Sensor() = default;
[ros2_control_node-1]          48: 
[ros2_control_node-1]          49:   HARDWARE_INTERFACE_PUBLIC
[ros2_control_node-1]          50:   const rclcpp_lifecycle::State & initialize(
[ros2_control_node-1] #10   Source "/usr/include/c++/13/bits/unique_ptr.h", line 404, in ~unique_ptr [0x7fea538a4cd1]
[ros2_control_node-1]         401:                    "unique_ptr's deleter must be invocable with a pointer");
[ros2_control_node-1]         402:      auto& __ptr = _M_t._M_ptr();
[ros2_control_node-1]         403:      if (__ptr != nullptr)
[ros2_control_node-1]       > 404:        get_deleter()(std::move(__ptr));
[ros2_control_node-1]         405:      __ptr = pointer();
[ros2_control_node-1]         406:       }
[ros2_control_node-1] #9    Source "/usr/include/c++/13/bits/unique_ptr.h", line 99, in operator() [0x7fea538b1669]
[ros2_control_node-1]          96:                    "can't delete pointer to incomplete type");
[ros2_control_node-1]          97:      static_assert(sizeof(_Tp)>0,
[ros2_control_node-1]          98:                    "can't delete pointer to incomplete type");
[ros2_control_node-1]       >  99:      delete __ptr;
[ros2_control_node-1]         100:       }
[ros2_control_node-1]         101:     };
[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 [0x7fea485203bf]
[ros2_control_node-1]          40: namespace ros2_control_demo_example_14
[ros2_control_node-1]          41: {
[ros2_control_node-1]       >  42: class RRBotSensorPositionFeedback : public hardware_interface::SensorInterface
[ros2_control_node-1]          43: {
[ros2_control_node-1]          44: public:
[ros2_control_node-1]          45:   RCLCPP_SHARED_PTR_DEFINITIONS(RRBotSensorPositionFeedback);
[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 [0x7fea4852034b]
[ros2_control_node-1]          40: namespace ros2_control_demo_example_14
[ros2_control_node-1]          41: {
[ros2_control_node-1]       >  42: class RRBotSensorPositionFeedback : public hardware_interface::SensorInterface
[ros2_control_node-1]          43: {
[ros2_control_node-1]          44: public:
[ros2_control_node-1]          45:   RCLCPP_SHARED_PTR_DEFINITIONS(RRBotSensorPositionFeedback);
[ros2_control_node-1] #6  | Source "/usr/include/c++/13/bits/std_thread.h", line 173, in __terminate
[ros2_control_node-1]     |   171:     {
[ros2_control_node-1]     |   172:       if (joinable())
[ros2_control_node-1]     | > 173:      std::__terminate();
[ros2_control_node-1]     |   174:     }
[ros2_control_node-1]       Source "/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h", line 322, in ~thread [0x560004abe1f6]
[ros2_control_node-1]         319:   inline void __terminate() _GLIBCXX_USE_NOEXCEPT
[ros2_control_node-1]         320:   {
[ros2_control_node-1]         321:     void terminate() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__noreturn__));
[ros2_control_node-1]       > 322:     terminate();
[ros2_control_node-1]         323:   }
[ros2_control_node-1]         324: #pragma GCC visibility pop
[ros2_control_node-1]         325: }
[ros2_control_node-1] #5    Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33", at 0x7fea53e01a48, in std::terminate()
[ros2_control_node-1] #4    Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33", at 0x7fea53e16e9b, in 
[ros2_control_node-1] #3    Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33", at 0x7fea53e01ffd, in 
[ros2_control_node-1] #2    Object "/usr/lib/x86_64-linux-gnu/libc.so.6", at 0x7fea53b458fe, in abort
[ros2_control_node-1] #1    Object "/usr/lib/x86_64-linux-gnu/libc.so.6", at 0x7fea53b6226d, in raise
[ros2_control_node-1] #0    Object "/usr/lib/x86_64-linux-gnu/libc.so.6", at 0x7fea53bbbb1c, in pthread_kill
[ros2_control_node-1] Aborted (Signal sent by tkill() 136241 1001)
[ERROR] [ros2_control_node-1]: process has died [pid 136241, exit code -6, cmd '/workspaces/ros2_rolling_ws/install/controller_manager/lib/controller_manager/ros2_control_node --ros-args --params-file /workspaces/ros2_rolling_ws/install/ros2_control_demo_example_14/share/ros2_control_demo_example_14/config/rrbot_modular_actuators_without_feedback_sensors_for_position_feedback.yaml'].
^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT)
[robot_state_publisher-2] [INFO] [1721667356.779936554] [rclcpp]: signal_handler(signum=2)
[spawner-3] Traceback (most recent call last):
[spawner-3]   File "/workspaces/ros2_rolling_ws/install/controller_manager/lib/controller_manager/spawner", line 33, in <module>
[spawner-3]     sys.exit(load_entry_point('controller-manager==4.13.0', 'console_scripts', 'spawner')())
[spawner-3]              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[spawner-3]   File "/workspaces/ros2_rolling_ws/install/controller_manager/lib/python3.12/site-packages/controller_manager/spawner.py", line 251, in main
[spawner-3]     if not wait_for_controller_manager(
[spawner-3]            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[spawner-3]   File "/workspaces/ros2_rolling_ws/install/controller_manager/lib/python3.12/site-packages/controller_manager/spawner.py", line 123, in wait_for_controller_manager
[spawner-3]     return wait_for_value_or(
[spawner-3]            ^^^^^^^^^^^^^^^^^^
[spawner-3]   File "/workspaces/ros2_rolling_ws/install/controller_manager/lib/python3.12/site-packages/controller_manager/spawner.py", line 72, in wait_for_value_or
[spawner-3]     time.sleep(0.2)

Environment:

christophfroehlich commented 1 month ago

It works with humble+jammy, but not with rolling on jammy or noble.

christophfroehlich commented 1 month ago

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)