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