Robotics StackExchange | Archived questions

using hybrid planning in foxy

I wanted to use moveit2's hybrid planning in foxy, but this feature is only available in humble. So I used the foxy version of moveit and humble's hybrid planning package. After ’colcon build‘, this package reported errors such as no match for 'operator=', no type named 'type' in 'struct std::enableif, 'stringview' in namespace 'std' does not name a type, etc. I supposed it seems to be a c++ version problem. I modified the c++ standard in the cmakelist of this package but it doesn't work. How to fix it?

My gcc is 9. Ubuntu 20.04.Kernel is 5.13.0-52. The command is colcon build --event-handlers desktop_notification- status- --cmake-args -DCMAKE_BUILD_TYPE=Release --packages-select moveit_hybrid_planning

The following is the error output.

  /home/sucro/ws_moveit2/src/moveit2/moveit_ros/hybrid_planning/hybrid_planning_manager/hybrid_planning_manager_component/src/hybrid_planning_manager.cpp: In member function ‘bool moveit::hybrid_planning::HybridPlanningManager::sendGlobalPlannerAction()’:
  /home/sucro/ws_moveit2/src/moveit2/moveit_ros/hybrid_planning/hybrid_planning_manager/hybrid_planning_manager_component/src/hybrid_planning_manager.cpp:246:7: error: no match for ‘operator=’ (operand types are ‘rclcpp_action::Client<moveit_msgs::action::GlobalPlanner>::GoalResponseCallback’ {aka ‘std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner> > >)>’} and ‘moveit::hybrid_planning::HybridPlanningManager::sendGlobalPlannerAction()::<lambda(rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner>::SharedPtr)>’)
  246 |       };
        |       ^
  In file included from /usr/include/c++/9/future:48,
              from /opt/ros/foxy/include/rclcpp/executors.hpp:18,
              from /opt/ros/foxy/include/rclcpp/rclcpp.hpp:146,
              from /home/sucro/ws_moveit2/src/moveit2/moveit_ros/hybrid_planning/hybrid_planning_manager/hybrid_planning_manager_component/include/moveit/hybrid_planning_manager/hybrid_planning_manager.h:41,
              from /home/sucro/ws_moveit2/src/moveit2/moveit_ros/hybrid_planning/hybrid_planning_manager/hybrid_planning_manager_component/src/hybrid_planning_manager.cpp:35:
  /usr/include/c++/9/bits/std_function.h:462:7: note: candidate: ‘std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(const std::function<_Res(_ArgTypes ...)>&) [with _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner> > >}]’
  462 |       operator=(const function& __x)
        |       ^~~~~~~~
  /usr/include/c++/9/bits/std_function.h:462:33: note:   no known conversion for argument 1 from ‘moveit::hybrid_planning::HybridPlanningManager::sendGlobalPlannerAction()::<lambda(rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner>::SharedPtr)>’ to ‘const std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner> > >)>&’
  462 |       operator=(const function& __x)
        |                 ~~~~~~~~~~~~~~~~^~~
  /usr/include/c++/9/bits/std_function.h:480:7: note: candidate: ‘std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::function<_Res(_ArgTypes ...)>&&) [with _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner> > >}]’
  480 |       operator=(function&& __x) noexcept
        |       ^~~~~~~~
  /usr/include/c++/9/bits/std_function.h:480:28: note:   no known conversion for argument 1 from ‘moveit::hybrid_planning::HybridPlanningManager::sendGlobalPlannerAction()::<lambda(rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner>::SharedPtr)>’ to ‘std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner> > >)>&&’
  480 |       operator=(function&& __x) noexcept
        |                 ~~~~~~~~~~~^~~
  /usr/include/c++/9/bits/std_function.h:494:7: note: candidate: ‘std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::nullptr_t) [with _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner> > >}; std::nullptr_t = std::nullptr_t]’
  494 |       operator=(nullptr_t) noexcept
        |       ^~~~~~~~
  /usr/include/c++/9/bits/std_function.h:494:17: note:   no known conversion for argument 1 from ‘moveit::hybrid_planning::HybridPlanningManager::sendGlobalPlannerAction()::<lambda(rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner>::SharedPtr)>’ to ‘std::nullptr_t’
  494 |       operator=(nullptr_t) noexcept
        |                 ^~~~~~~~~
  /usr/include/c++/9/bits/std_function.h:523:2: note: candidate: ‘template<class _Functor> std::function<_Res(_ArgTypes ...)>::_Requires<std::function<_Res(_ArgTypes ...)>::_Callable<typename std::decay<_Functor>::type>, std::function<_Res(_ArgTypes ...)>&> std::function<_Res(_ArgTypes ...)>::operator=(_Functor&&) [with _Functor = _Functor; _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner> > >}]’
  523 |  operator=(_Functor&& __f)
        |  ^~~~~~~~
  /usr/include/c++/9/bits/std_function.h:523:2: note:   template argument deduction/substitution failed:
  /usr/include/c++/9/bits/std_function.h: In substitution of ‘template<class _Res, class ... _ArgTypes> template<class _Cond, class _Tp> using _Requires = typename std::enable_if<_Cond::value, _Tp>::type [with _Cond = std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner> > >)>::_Callable<moveit::hybrid_planning::HybridPlanningManager::sendGlobalPlannerAction()::<lambda(rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner>::SharedPtr)>, std::__invoke_result<moveit::hybrid_planning::HybridPlanningManager::sendGlobalPlannerAction()::<lambda(rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner>::SharedPtr)>&, std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner> > > > >; _Tp = std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner> > >)>&; _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner> > >}]’:
  /usr/include/c++/9/bits/std_function.h:523:2:   required by substitution of ‘template<class _Functor> std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner> > >)>::_Requires<std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner> > >)>::_Callable<typename std::decay<_Tp>::type, std::__invoke_result<typename std::decay<_Tp>::type&, std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner> > > > >, std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner> > >)>&> std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner> > >)>::operator=<_Functor>(_Functor&&) [with _Functor = moveit::hybrid_planning::HybridPlanningManager::sendGlobalPlannerAction()::<lambda(rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner>::SharedPtr)>]’
  /home/sucro/ws_moveit2/src/moveit2/moveit_ros/hybrid_planning/hybrid_planning_manager/hybrid_planning_manager_component/src/hybrid_planning_manager.cpp:246:7:   required from here
  /usr/include/c++/9/bits/std_function.h:385:8: error: no type named ‘type’ in ‘struct std::enable_if<false, std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner> > >)>&>’
  385 |  using _Requires = typename enable_if<_Cond::value, _Tp>::type;
        |        ^~~~~~~~~
  /usr/include/c++/9/bits/std_function.h:532:2: note: candidate: ‘template<class _Functor> std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::reference_wrapper<_Functor>) [with _Functor = _Functor; _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner> > >}]’
  532 |  operator=(reference_wrapper<_Functor> __f) noexcept
        |  ^~~~~~~~
  /usr/include/c++/9/bits/std_function.h:532:2: note:   template argument deduction/substitution failed:
  /home/sucro/ws_moveit2/src/moveit2/moveit_ros/hybrid_planning/hybrid_planning_manager/hybrid_planning_manager_component/src/hybrid_planning_manager.cpp:246:7: note:   ‘moveit::hybrid_planning::HybridPlanningManager::sendGlobalPlannerAction()::<lambda(rclcpp_action::ClientGoalHandle<moveit_msgs::action::GlobalPlanner>::SharedPtr)>’ is not derived from ‘std::reference_wrapper<_Tp>’
  246 |       };
        |       ^
  /home/sucro/ws_moveit2/src/moveit2/moveit_ros/hybrid_planning/hybrid_planning_manager/hybrid_planning_manager_component/src/hybrid_planning_manager.cpp: In member function ‘bool moveit::hybrid_planning::HybridPlanningManager::sendLocalPlannerAction()’:
  /home/sucro/ws_moveit2/src/moveit2/moveit_ros/hybrid_planning/hybrid_planning_manager/hybrid_planning_manager_component/src/hybrid_planning_manager.cpp:316:7: error: no match for ‘operator=’ (operand types are ‘rclcpp_action::Client<moveit_msgs::action::LocalPlanner>::GoalResponseCallback’ {aka ‘std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner> > >)>’} and ‘moveit::hybrid_planning::HybridPlanningManager::sendLocalPlannerAction()::<lambda(rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner>::SharedPtr)>’)
  316 |       };
        |       ^
  In file included from /usr/include/c++/9/future:48,
              from /opt/ros/foxy/include/rclcpp/executors.hpp:18,
              from /opt/ros/foxy/include/rclcpp/rclcpp.hpp:146,
              from /home/sucro/ws_moveit2/src/moveit2/moveit_ros/hybrid_planning/hybrid_planning_manager/hybrid_planning_manager_component/include/moveit/hybrid_planning_manager/hybrid_planning_manager.h:41,
              from /home/sucro/ws_moveit2/src/moveit2/moveit_ros/hybrid_planning/hybrid_planning_manager/hybrid_planning_manager_component/src/hybrid_planning_manager.cpp:35:
  /usr/include/c++/9/bits/std_function.h:462:7: note: candidate: ‘std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(const std::function<_Res(_ArgTypes ...)>&) [with _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner> > >}]’
  462 |       operator=(const function& __x)
        |       ^~~~~~~~
  /usr/include/c++/9/bits/std_function.h:462:33: note:   no known conversion for argument 1 from ‘moveit::hybrid_planning::HybridPlanningManager::sendLocalPlannerAction()::<lambda(rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner>::SharedPtr)>’ to ‘const std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner> > >)>&’
  462 |       operator=(const function& __x)
        |                 ~~~~~~~~~~~~~~~~^~~
  /usr/include/c++/9/bits/std_function.h:480:7: note: candidate: ‘std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::function<_Res(_ArgTypes ...)>&&) [with _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner> > >}]’
  480 |       operator=(function&& __x) noexcept
        |       ^~~~~~~~
  /usr/include/c++/9/bits/std_function.h:480:28: note:   no known conversion for argument 1 from ‘moveit::hybrid_planning::HybridPlanningManager::sendLocalPlannerAction()::<lambda(rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner>::SharedPtr)>’ to ‘std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner> > >)>&&’
  480 |       operator=(function&& __x) noexcept
        |                 ~~~~~~~~~~~^~~
  /usr/include/c++/9/bits/std_function.h:494:7: note: candidate: ‘std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::nullptr_t) [with _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner> > >}; std::nullptr_t = std::nullptr_t]’
  494 |       operator=(nullptr_t) noexcept
        |       ^~~~~~~~
  /usr/include/c++/9/bits/std_function.h:494:17: note:   no known conversion for argument 1 from ‘moveit::hybrid_planning::HybridPlanningManager::sendLocalPlannerAction()::<lambda(rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner>::SharedPtr)>’ to ‘std::nullptr_t’
  494 |       operator=(nullptr_t) noexcept
        |                 ^~~~~~~~~
  /usr/include/c++/9/bits/std_function.h:523:2: note: candidate: ‘template<class _Functor> std::function<_Res(_ArgTypes ...)>::_Requires<std::function<_Res(_ArgTypes ...)>::_Callable<typename std::decay<_Functor>::type>, std::function<_Res(_ArgTypes ...)>&> std::function<_Res(_ArgTypes ...)>::operator=(_Functor&&) [with _Functor = _Functor; _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner> > >}]’
  523 |  operator=(_Functor&& __f)
        |  ^~~~~~~~
  /usr/include/c++/9/bits/std_function.h:523:2: note:   template argument deduction/substitution failed:
  /usr/include/c++/9/bits/std_function.h: In substitution of ‘template<class _Res, class ... _ArgTypes> template<class _Cond, class _Tp> using _Requires = typename std::enable_if<_Cond::value, _Tp>::type [with _Cond = std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner> > >)>::_Callable<moveit::hybrid_planning::HybridPlanningManager::sendLocalPlannerAction()::<lambda(rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner>::SharedPtr)>, std::__invoke_result<moveit::hybrid_planning::HybridPlanningManager::sendLocalPlannerAction()::<lambda(rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner>::SharedPtr)>&, std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner> > > > >; _Tp = std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner> > >)>&; _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner> > >}]’:
  /usr/include/c++/9/bits/std_function.h:523:2:   required by substitution of ‘template<class _Functor> std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner> > >)>::_Requires<std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner> > >)>::_Callable<typename std::decay<_Tp>::type, std::__invoke_result<typename std::decay<_Tp>::type&, std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner> > > > >, std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner> > >)>&> std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner> > >)>::operator=<_Functor>(_Functor&&) [with _Functor = moveit::hybrid_planning::HybridPlanningManager::sendLocalPlannerAction()::<lambda(rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner>::SharedPtr)>]’
  /home/sucro/ws_moveit2/src/moveit2/moveit_ros/hybrid_planning/hybrid_planning_manager/hybrid_planning_manager_component/src/hybrid_planning_manager.cpp:316:7:   required from here
  /usr/include/c++/9/bits/std_function.h:385:8: error: no type named ‘type’ in ‘struct std::enable_if<false, std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner> > >)>&>’
  385 |  using _Requires = typename enable_if<_Cond::value, _Tp>::type;
        |        ^~~~~~~~~
  /usr/include/c++/9/bits/std_function.h:532:2: note: candidate: ‘template<class _Functor> std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::reference_wrapper<_Functor>) [with _Functor = _Functor; _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner> > >}]’
  532 |  operator=(reference_wrapper<_Functor> __f) noexcept
        |  ^~~~~~~~
  /usr/include/c++/9/bits/std_function.h:532:2: note:   template argument deduction/substitution failed:
  /home/sucro/ws_moveit2/src/moveit2/moveit_ros/hybrid_planning/hybrid_planning_manager/hybrid_planning_manager_component/src/hybrid_planning_manager.cpp:316:7: note:   ‘moveit::hybrid_planning::HybridPlanningManager::sendLocalPlannerAction()::<lambda(rclcpp_action::ClientGoalHandle<moveit_msgs::action::LocalPlanner>::SharedPtr)>’ is not derived from ‘std::reference_wrapper<_Tp>’
  316 |       };
        |       ^
  make[2]: *** [hybrid_planning_manager/hybrid_planning_manager_component/CMakeFiles/moveit_hybrid_planning_manager.dir/build.make:63:hybrid_planning_manager/hybrid_planning_manager_component/CMakeFiles/moveit_hybrid_planning_manager.dir/src/hybrid_planning_manager.cpp.o] error 1
  make[1]: *** [CMakeFiles/Makefile2:355:hybrid_planning_manager/hybrid_planning_manager_component/CMakeFiles/moveit_hybrid_planning_manager.dir/all] error 2
  make[1]: *** 正在等待未完成的任务....
  In file included from /home/sucro/ws_moveit2/src/moveit2/moveit_ros/hybrid_planning/local_planner/local_constraint_solver_plugins/src/forward_trajectory.cpp:36:
  /home/sucro/ws_moveit2/src/moveit2/moveit_ros/hybrid_planning/local_planner/local_planner_component/include/moveit/local_planner/feedback_types.h:57:30: error: ‘string_view’ in namespace ‘std’ does not name a type
  57 | [[nodiscard]] constexpr std::string_view toString(const LocalFeedbackEnum& code)
        |                              ^~~~~~~~~~~
  /home/sucro/ws_moveit2/src/moveit2/moveit_ros/hybrid_planning/local_planner/local_planner_component/include/moveit/local_planner/feedback_types.h:57:25: note: ‘std::string_view’ is only available from C++17 onwards
  57 | [[nodiscard]] constexpr std::string_view toString(const LocalFeedbackEnum& code)
        |                         ^~~
  /home/sucro/ws_moveit2/src/moveit2/moveit_ros/hybrid_planning/local_planner/local_constraint_solver_plugins/src/forward_trajectory.cpp: In member function ‘virtual moveit_msgs::action::LocalPlanner::Feedback moveit::hybrid_planning::ForwardTrajectory::solve(const robot_trajectory::RobotTrajectory&, std::shared_ptr<const moveit_msgs::action::LocalPlanner_Goal_<std::allocator<void> > >, trajectory_msgs::msg::JointTrajectory&)’:
  /home/sucro/ws_moveit2/src/moveit2/moveit_ros/hybrid_planning/local_planner/local_constraint_solver_plugins/src/forward_trajectory.cpp:121:36: error: ‘toString’ was not declared in this scope
  121 |         feedback_result.feedback = toString(LocalFeedbackEnum::COLLISION_AHEAD);
        |                                    ^~~~~~~~
  /home/sucro/ws_moveit2/src/moveit2/moveit_ros/hybrid_planning/local_planner/local_constraint_solver_plugins/src/forward_trajectory.cpp:154:38: error: ‘toString’ was not declared in this scope
  154 |           feedback_result.feedback = toString(LocalFeedbackEnum::LOCAL_PLANNER_STUCK);
        |                                      ^~~~~~~~
  make[2]: *** [local_planner/local_constraint_solver_plugins/CMakeFiles/forward_trajectory_plugin.dir/build.make:63:local_planner/local_constraint_solver_plugins/CMakeFiles/forward_trajectory_plugin.dir/src/forward_trajectory.cpp.o] error 1
  make[1]: *** [CMakeFiles/Makefile2:545:local_planner/local_constraint_solver_plugins/CMakeFiles/forward_trajectory_plugin.dir/all] error 2
  make: *** [Makefile:141:all] error 2

Asked by changcong on 2022-07-07 01:41:11 UTC

Comments

Answers