Giter Club home page Giter Club logo

actionlib's People

Contributors

1r0b1n0 avatar ahcorde avatar bmagyar avatar bulwahn avatar dirk-thomas avatar esteve avatar fujitatomoya avatar jbohren avatar jonbinney avatar jschleicher avatar kyrofa avatar mgrrx avatar miguelsdc avatar mikaelarguedas avatar mikeferguson avatar mjcarroll avatar mmoerdijk avatar nican avatar nlamprian avatar paulbovbel avatar pbeeson avatar piyushk avatar rayman avatar rhaschke avatar seanyen avatar sloretz avatar tfoote avatar tobias-fischer avatar vrabaud avatar wjwwood avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

actionlib's Issues

Race condition: Goal state is SUCCEEDED before result is available.

SimpleActionClient seems to have a race condition. Calling get_state() can give the SUCCEEDED state before a result is available.

This is a package showing the problem. It uses a SimpleActionClient to make a request and then checks client.get_state() at a high frequency to check for SUCCEEDED state and then checks if client.get_result() returns a result. An error is printed if the result is missing. It makes a maximum of 1000 requests to try to trigger this error. Run roslaunch action_client_breaker action_client_breaker.test and wait for a ERROR message in the console.
action_client_breaker.zip

BufferClient in tf2_ros was previously affected by this issue. See ros/geometry2#178.

Simple action client/server warnings with Wextra

If you compile a ROS node including the simple action client/server include with gcc -Wextra flags you will get a lot of compiler warnings.

How to reproduce

mkdir -p catkin_workspace/src
cd catkin_workspace/src
git clone https://github.com/frog0705/actionlib_tutorials
cd ..
catkin_make -DCMAKE_CXX_FLAGS="-Wall -Wextra"
[ 91%] Building CXX object actionlib_tutorials/CMakeFiles/fibonacci_client.dir/src/fibonacci_client.cpp.o
In file included from /opt/ros/kinetic/include/actionlib/client/client_helpers.h:47:0,
                 from /opt/ros/kinetic/include/actionlib/client/action_client.h:42,
                 from /opt/ros/kinetic/include/actionlib/client/simple_action_client.h:45,
                 from /home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_class_client.cpp:2:
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h: In instantiation of ‘void actionlib::EnclosureDeleter<Enclosure>::operator()(Member*) [with Member = const actionlib_tutorials::FibonacciResult_<std::allocator<void> >; Enclosure = const actionlib_tutorials::FibonacciActionResult_<std::allocator<void> >]’:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:171:14:   required from ‘boost::detail::shared_count::shared_count(P, D) [with P = const actionlib_tutorials::FibonacciResult_<std::allocator<void> >*; D = actionlib::EnclosureDeleter<const actionlib_tutorials::FibonacciActionResult_<std::allocator<void> > >]’
/usr/include/boost/smart_ptr/shared_ptr.hpp:358:76:   required from ‘boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = const actionlib_tutorials::FibonacciResult_<std::allocator<void> >; D = actionlib::EnclosureDeleter<const actionlib_tutorials::FibonacciActionResult_<std::allocator<void> > >; T = const actionlib_tutorials::FibonacciResult_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/comm_state_machine_imp.h:79:14:   required from ‘actionlib::CommStateMachine<ActionSpec>::ResultConstPtr actionlib::CommStateMachine<ActionSpec>::getResult() const [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::CommStateMachine<ActionSpec>::ResultConstPtr = boost::shared_ptr<const actionlib_tutorials::FibonacciResult_<std::allocator<void> > >; typename ActionSpec::_action_result_type::_result_type = actionlib_tutorials::FibonacciResult_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/client_goal_handle_imp.h:175:44:   required from ‘actionlib::ClientGoalHandle<ActionSpec>::ResultConstPtr actionlib::ClientGoalHandle<ActionSpec>::getResult() const [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::ClientGoalHandle<ActionSpec>::ResultConstPtr = boost::shared_ptr<const actionlib_tutorials::FibonacciResult_<std::allocator<void> > >; typename ActionSpec::_action_result_type::_result_type = actionlib_tutorials::FibonacciResult_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:524:13:   required from ‘void actionlib::SimpleActionClient<ActionSpec>::handleTransition(actionlib::SimpleActionClient<ActionSpec>::GoalHandleT) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::GoalHandleT = actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:332:41:   required from ‘void actionlib::SimpleActionClient<ActionSpec>::sendGoal(const Goal&, actionlib::SimpleActionClient<ActionSpec>::SimpleDoneCallback, actionlib::SimpleActionClient<ActionSpec>::SimpleActiveCallback, actionlib::SimpleActionClient<ActionSpec>::SimpleFeedbackCallback) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::Goal = actionlib_tutorials::FibonacciGoal_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::SimpleDoneCallback = boost::function<void(const actionlib::SimpleClientGoalState&, const boost::shared_ptr<const actionlib_tutorials::FibonacciResult_<std::allocator<void> > >&)>; typename ActionSpec::_action_result_type::_result_type = actionlib_tutorials::FibonacciResult_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::SimpleActiveCallback = boost::function<void()>; actionlib::SimpleActionClient<ActionSpec>::SimpleFeedbackCallback = boost::function<void(const boost::shared_ptr<const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> > >&)>; typename ActionSpec::_action_feedback_type::_feedback_type = actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >]’
/home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_class_client.cpp:27:49:   required from here
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h:60:52: warning: unused parameter ‘member_ptr’ [-Wunused-parameter]
     template<class Member> void operator()(Member* member_ptr){
                                                    ^~~~~~~~~~
In file included from /opt/ros/kinetic/include/actionlib/client/client_helpers.h:46:0,
                 from /opt/ros/kinetic/include/actionlib/client/action_client.h:42,
                 from /opt/ros/kinetic/include/actionlib/client/simple_action_client.h:45,
                 from /home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_class_client.cpp:2:
/opt/ros/kinetic/include/actionlib/managed_list.h: In instantiation of ‘void actionlib::ManagedList<T>::ElemDeleter::operator()(void*) [with T = boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::FibonacciAction_<std::allocator<void> > > >]’:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:171:14:   required from ‘boost::detail::shared_count::shared_count(P, D) [with P = void*; D = actionlib::ManagedList<boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::FibonacciAction_<std::allocator<void> > > > >::ElemDeleter]’
/usr/include/boost/smart_ptr/shared_ptr.hpp:358:76:   required from ‘boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = void; D = actionlib::ManagedList<boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::FibonacciAction_<std::allocator<void> > > > >::ElemDeleter; T = void]’
/opt/ros/kinetic/include/actionlib/managed_list.h:214:58:   required from ‘actionlib::ManagedList<T>::Handle actionlib::ManagedList<T>::add(const T&, actionlib::ManagedList<T>::CustomDeleter, const boost::shared_ptr<actionlib::DestructionGuard>&) [with T = boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::FibonacciAction_<std::allocator<void> > > >; actionlib::ManagedList<T>::CustomDeleter = boost::function<void(actionlib::ManagedList<boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::FibonacciAction_<std::allocator<void> > > > >::iterator)>]’
/opt/ros/kinetic/include/actionlib/client/goal_manager_imp.h:74:138:   required from ‘actionlib::ClientGoalHandle<ActionSpec> actionlib::GoalManager<ActionSpec>::initGoal(const Goal&, actionlib::GoalManager<ActionSpec>::TransitionCallback, actionlib::GoalManager<ActionSpec>::FeedbackCallback) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::GoalManager<ActionSpec>::Goal = actionlib_tutorials::FibonacciGoal_<std::allocator<void> >; actionlib::GoalManager<ActionSpec>::TransitionCallback = boost::function<void(actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >)>; actionlib::GoalManager<ActionSpec>::FeedbackCallback = boost::function<void(actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >, const boost::shared_ptr<const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> > >&)>; typename ActionSpec::_action_feedback_type::_feedback_type = actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/action_client.h:120:71:   required from ‘actionlib::ActionClient<ActionSpec>::GoalHandle actionlib::ActionClient<ActionSpec>::sendGoal(const Goal&, actionlib::ActionClient<ActionSpec>::TransitionCallback, actionlib::ActionClient<ActionSpec>::FeedbackCallback) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::ActionClient<ActionSpec>::GoalHandle = actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >; actionlib::ActionClient<ActionSpec>::Goal = actionlib_tutorials::FibonacciGoal_<std::allocator<void> >; actionlib::ActionClient<ActionSpec>::TransitionCallback = boost::function<void(actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >)>; actionlib::ActionClient<ActionSpec>::FeedbackCallback = boost::function<void(actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >, const boost::shared_ptr<const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> > >&)>; typename ActionSpec::_action_feedback_type::_feedback_type = actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:332:7:   required from ‘void actionlib::SimpleActionClient<ActionSpec>::sendGoal(const Goal&, actionlib::SimpleActionClient<ActionSpec>::SimpleDoneCallback, actionlib::SimpleActionClient<ActionSpec>::SimpleActiveCallback, actionlib::SimpleActionClient<ActionSpec>::SimpleFeedbackCallback) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::Goal = actionlib_tutorials::FibonacciGoal_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::SimpleDoneCallback = boost::function<void(const actionlib::SimpleClientGoalState&, const boost::shared_ptr<const actionlib_tutorials::FibonacciResult_<std::allocator<void> > >&)>; typename ActionSpec::_action_result_type::_result_type = actionlib_tutorials::FibonacciResult_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::SimpleActiveCallback = boost::function<void()>; actionlib::SimpleActionClient<ActionSpec>::SimpleFeedbackCallback = boost::function<void(const boost::shared_ptr<const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> > >&)>; typename ActionSpec::_action_feedback_type::_feedback_type = actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >]’
/home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_class_client.cpp:27:49:   required from here
/opt/ros/kinetic/include/actionlib/managed_list.h:94:30: warning: unused parameter ‘ptr’ [-Wunused-parameter]
       void operator() (void* ptr)
                              ^~~
In file included from /opt/ros/kinetic/include/actionlib/client/client_helpers.h:47:0,
                 from /opt/ros/kinetic/include/actionlib/client/action_client.h:42,
                 from /opt/ros/kinetic/include/actionlib/client/simple_action_client.h:45,
                 from /home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_class_client.cpp:2:
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h: In instantiation of ‘void actionlib::EnclosureDeleter<Enclosure>::operator()(Member*) [with Member = const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >; Enclosure = const actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> >]’:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:171:14:   required from ‘boost::detail::shared_count::shared_count(P, D) [with P = const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >*; D = actionlib::EnclosureDeleter<const actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> > >]’
/usr/include/boost/smart_ptr/shared_ptr.hpp:358:76:   required from ‘boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >; D = actionlib::EnclosureDeleter<const actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> > >; T = const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/comm_state_machine_imp.h:117:62:   required from ‘void actionlib::CommStateMachine<ActionSpec>::updateFeedback(actionlib::CommStateMachine<ActionSpec>::GoalHandleT&, const ActionFeedbackConstPtr&) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::CommStateMachine<ActionSpec>::GoalHandleT = actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >; actionlib::CommStateMachine<ActionSpec>::ActionFeedbackConstPtr = boost::shared_ptr<const actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> > >; typename ActionSpec::_action_feedback_type = actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/goal_manager_imp.h:119:5:   required from ‘void actionlib::GoalManager<ActionSpec>::updateFeedbacks(const ActionFeedbackConstPtr&) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::GoalManager<ActionSpec>::ActionFeedbackConstPtr = boost::shared_ptr<const actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> > >; typename ActionSpec::_action_feedback_type = actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/action_client.h:272:5:   required from ‘void actionlib::ActionClient<ActionSpec>::feedbackCb(const ros::MessageEvent<const typename ActionSpec::_action_feedback_type>&) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; typename ActionSpec::_action_feedback_type = actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/action_client.h:211:52:   required from ‘void actionlib::ActionClient<ActionSpec>::initClient(ros::CallbackQueueInterface*) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/action_client.h:99:15:   required from ‘actionlib::ActionClient<ActionSpec>::ActionClient(const ros::NodeHandle&, const string&, ros::CallbackQueueInterface*) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:261:15:   required from ‘void actionlib::SimpleActionClient<ActionSpec>::initSimpleClient(ros::NodeHandle&, const string&, bool) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:92:21:   required from ‘actionlib::SimpleActionClient<ActionSpec>::SimpleActionClient(const string&, bool) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_class_client.cpp:11:34:   required from here
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h:60:52: warning: unused parameter ‘member_ptr’ [-Wunused-parameter]
     template<class Member> void operator()(Member* member_ptr){
                                                    ^~~~~~~~~~
[ 92%] Building CXX object actionlib_tutorials/CMakeFiles/fibonacci_callback_client.dir/src/fibonacci_callback_client.cpp.o
In file included from /opt/ros/kinetic/include/actionlib/client/client_helpers.h:47:0,
                 from /opt/ros/kinetic/include/actionlib/client/action_client.h:42,
                 from /opt/ros/kinetic/include/actionlib/client/simple_action_client.h:45,
                 from /home/victor/catkin_test/src/actionlib_tutorials/src/averaging_client.cpp:2:
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h: In instantiation of ‘void actionlib::EnclosureDeleter<Enclosure>::operator()(Member*) [with Member = const actionlib_tutorials::AveragingResult_<std::allocator<void> >; Enclosure = const actionlib_tutorials::AveragingActionResult_<std::allocator<void> >]’:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:171:14:   required from ‘boost::detail::shared_count::shared_count(P, D) [with P = const actionlib_tutorials::AveragingResult_<std::allocator<void> >*; D = actionlib::EnclosureDeleter<const actionlib_tutorials::AveragingActionResult_<std::allocator<void> > >]’
/usr/include/boost/smart_ptr/shared_ptr.hpp:358:76:   required from ‘boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = const actionlib_tutorials::AveragingResult_<std::allocator<void> >; D = actionlib::EnclosureDeleter<const actionlib_tutorials::AveragingActionResult_<std::allocator<void> > >; T = const actionlib_tutorials::AveragingResult_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/comm_state_machine_imp.h:79:14:   required from ‘actionlib::CommStateMachine<ActionSpec>::ResultConstPtr actionlib::CommStateMachine<ActionSpec>::getResult() const [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; actionlib::CommStateMachine<ActionSpec>::ResultConstPtr = boost::shared_ptr<const actionlib_tutorials::AveragingResult_<std::allocator<void> > >; typename ActionSpec::_action_result_type::_result_type = actionlib_tutorials::AveragingResult_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/client_goal_handle_imp.h:175:44:   required from ‘actionlib::ClientGoalHandle<ActionSpec>::ResultConstPtr actionlib::ClientGoalHandle<ActionSpec>::getResult() const [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; actionlib::ClientGoalHandle<ActionSpec>::ResultConstPtr = boost::shared_ptr<const actionlib_tutorials::AveragingResult_<std::allocator<void> > >; typename ActionSpec::_action_result_type::_result_type = actionlib_tutorials::AveragingResult_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:524:13:   required from ‘void actionlib::SimpleActionClient<ActionSpec>::handleTransition(actionlib::SimpleActionClient<ActionSpec>::GoalHandleT) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::GoalHandleT = actionlib::ClientGoalHandle<actionlib_tutorials::AveragingAction_<std::allocator<void> > >]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:332:41:   required from ‘void actionlib::SimpleActionClient<ActionSpec>::sendGoal(const Goal&, actionlib::SimpleActionClient<ActionSpec>::SimpleDoneCallback, actionlib::SimpleActionClient<ActionSpec>::SimpleActiveCallback, actionlib::SimpleActionClient<ActionSpec>::SimpleFeedbackCallback) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::Goal = actionlib_tutorials::AveragingGoal_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::SimpleDoneCallback = boost::function<void(const actionlib::SimpleClientGoalState&, const boost::shared_ptr<const actionlib_tutorials::AveragingResult_<std::allocator<void> > >&)>; typename ActionSpec::_action_result_type::_result_type = actionlib_tutorials::AveragingResult_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::SimpleActiveCallback = boost::function<void()>; actionlib::SimpleActionClient<ActionSpec>::SimpleFeedbackCallback = boost::function<void(const boost::shared_ptr<const actionlib_tutorials::AveragingFeedback_<std::allocator<void> > >&)>; typename ActionSpec::_action_feedback_type::_feedback_type = actionlib_tutorials::AveragingFeedback_<std::allocator<void> >]’
/home/victor/catkin_test/src/actionlib_tutorials/src/averaging_client.cpp:28:19:   required from here
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h:60:52: warning: unused parameter ‘member_ptr’ [-Wunused-parameter]
     template<class Member> void operator()(Member* member_ptr){
                                                    ^~~~~~~~~~
In file included from /opt/ros/kinetic/include/actionlib/client/client_helpers.h:46:0,
                 from /opt/ros/kinetic/include/actionlib/client/action_client.h:42,
                 from /opt/ros/kinetic/include/actionlib/client/simple_action_client.h:45,
                 from /home/victor/catkin_test/src/actionlib_tutorials/src/averaging_client.cpp:2:
/opt/ros/kinetic/include/actionlib/managed_list.h: In instantiation of ‘void actionlib::ManagedList<T>::ElemDeleter::operator()(void*) [with T = boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::AveragingAction_<std::allocator<void> > > >]’:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:171:14:   required from ‘boost::detail::shared_count::shared_count(P, D) [with P = void*; D = actionlib::ManagedList<boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::AveragingAction_<std::allocator<void> > > > >::ElemDeleter]’
/usr/include/boost/smart_ptr/shared_ptr.hpp:358:76:   required from ‘boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = void; D = actionlib::ManagedList<boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::AveragingAction_<std::allocator<void> > > > >::ElemDeleter; T = void]’
/opt/ros/kinetic/include/actionlib/managed_list.h:214:58:   required from ‘actionlib::ManagedList<T>::Handle actionlib::ManagedList<T>::add(const T&, actionlib::ManagedList<T>::CustomDeleter, const boost::shared_ptr<actionlib::DestructionGuard>&) [with T = boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::AveragingAction_<std::allocator<void> > > >; actionlib::ManagedList<T>::CustomDeleter = boost::function<void(actionlib::ManagedList<boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::AveragingAction_<std::allocator<void> > > > >::iterator)>]’
/opt/ros/kinetic/include/actionlib/client/goal_manager_imp.h:74:138:   required from ‘actionlib::ClientGoalHandle<ActionSpec> actionlib::GoalManager<ActionSpec>::initGoal(const Goal&, actionlib::GoalManager<ActionSpec>::TransitionCallback, actionlib::GoalManager<ActionSpec>::FeedbackCallback) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; actionlib::GoalManager<ActionSpec>::Goal = actionlib_tutorials::AveragingGoal_<std::allocator<void> >; actionlib::GoalManager<ActionSpec>::TransitionCallback = boost::function<void(actionlib::ClientGoalHandle<actionlib_tutorials::AveragingAction_<std::allocator<void> > >)>; actionlib::GoalManager<ActionSpec>::FeedbackCallback = boost::function<void(actionlib::ClientGoalHandle<actionlib_tutorials::AveragingAction_<std::allocator<void> > >, const boost::shared_ptr<const actionlib_tutorials::AveragingFeedback_<std::allocator<void> > >&)>; typename ActionSpec::_action_feedback_type::_feedback_type = actionlib_tutorials::AveragingFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/action_client.h:120:71:   required from ‘actionlib::ActionClient<ActionSpec>::GoalHandle actionlib::ActionClient<ActionSpec>::sendGoal(const Goal&, actionlib::ActionClient<ActionSpec>::TransitionCallback, actionlib::ActionClient<ActionSpec>::FeedbackCallback) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; actionlib::ActionClient<ActionSpec>::GoalHandle = actionlib::ClientGoalHandle<actionlib_tutorials::AveragingAction_<std::allocator<void> > >; actionlib::ActionClient<ActionSpec>::Goal = actionlib_tutorials::AveragingGoal_<std::allocator<void> >; actionlib::ActionClient<ActionSpec>::TransitionCallback = boost::function<void(actionlib::ClientGoalHandle<actionlib_tutorials::AveragingAction_<std::allocator<void> > >)>; actionlib::ActionClient<ActionSpec>::FeedbackCallback = boost::function<void(actionlib::ClientGoalHandle<actionlib_tutorials::AveragingAction_<std::allocator<void> > >, const boost::shared_ptr<const actionlib_tutorials::AveragingFeedback_<std::allocator<void> > >&)>; typename ActionSpec::_action_feedback_type::_feedback_type = actionlib_tutorials::AveragingFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:332:7:   required from ‘void actionlib::SimpleActionClient<ActionSpec>::sendGoal(const Goal&, actionlib::SimpleActionClient<ActionSpec>::SimpleDoneCallback, actionlib::SimpleActionClient<ActionSpec>::SimpleActiveCallback, actionlib::SimpleActionClient<ActionSpec>::SimpleFeedbackCallback) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::Goal = actionlib_tutorials::AveragingGoal_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::SimpleDoneCallback = boost::function<void(const actionlib::SimpleClientGoalState&, const boost::shared_ptr<const actionlib_tutorials::AveragingResult_<std::allocator<void> > >&)>; typename ActionSpec::_action_result_type::_result_type = actionlib_tutorials::AveragingResult_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::SimpleActiveCallback = boost::function<void()>; actionlib::SimpleActionClient<ActionSpec>::SimpleFeedbackCallback = boost::function<void(const boost::shared_ptr<const actionlib_tutorials::AveragingFeedback_<std::allocator<void> > >&)>; typename ActionSpec::_action_feedback_type::_feedback_type = actionlib_tutorials::AveragingFeedback_<std::allocator<void> >]’
/home/victor/catkin_test/src/actionlib_tutorials/src/averaging_client.cpp:28:19:   required from here
/opt/ros/kinetic/include/actionlib/managed_list.h:94:30: warning: unused parameter ‘ptr’ [-Wunused-parameter]
       void operator() (void* ptr)
                              ^~~
In file included from /In file included from /opt/ros/kinetic/include/actionlib/client/client_helpers.h:47:0,
                 from /opt/ros/kinetic/include/actionlib/client/action_client.h:42,
                 from /opt/ros/kinetic/include/actionlib/client/simple_action_client.h:45,
                 from /home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_client.cpp:2:
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h: In instantiation of ‘void actionlib::EnclosureDeleter<Enclosure>::operator()(Member*) [with Member = const actionlib_tutorials::FibonacciResult_<std::allocator<void> >; Enclosure = const actionlib_tutorials::FibonacciActionResult_<std::allocator<void> >]’:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:171:14:   required from ‘boost::detail::shared_count::shared_count(P, D) [with P = const actionlib_tutorials::FibonacciResult_<std::allocator<void> >*; D = actionlib::EnclosureDeleter<const actionlib_tutorials::FibonacciActionResult_<std::allocator<void> > >]’
/usr/include/boost/smart_ptr/shared_ptr.hpp:358:76:   required from ‘boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = const actionlib_tutorials::FibonacciResult_<std::allocator<void> >; D = actionlib::EnclosureDeleter<const actionlib_tutorials::FibonacciActionResult_<std::allocator<void> > >; T = const actionlib_tutorials::FibonacciResult_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/comm_state_machine_imp.h:79:14:   required from ‘actionlib::CommStateMachine<ActionSpec>::ResultConstPtr actionlib::CommStateMachine<ActionSpec>::getResult() const [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::CommStateMachine<ActionSpec>::ResultConstPtr = boost::shared_ptr<const actionlib_tutorials::FibonacciResult_<std::allocator<void> > >; typename ActionSpec::_action_result_type::_result_type = actionlib_tutorials::FibonacciResult_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/client_goal_handle_imp.h:175:44:   required from ‘actionlib::ClientGoalHandle<ActionSpec>::ResultConstPtr actionlib::ClientGoalHandle<ActionSpec>::getResult() const [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::ClientGoalHandle<ActionSpec>::ResultConstPtr = boost::shared_ptr<const actionlib_tutorials::FibonacciResult_<std::allocator<void> > >; typename ActionSpec::_action_result_type::_result_type = actionlib_tutorials::FibonacciResult_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:524:13:   required from ‘void actionlib::SimpleActionClient<ActionSpec>::handleTransition(actionlib::SimpleActionClient<ActionSpec>::GoalHandleT) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::GoalHandleT = actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:332:41:   required from ‘void actionlib::SimpleActionClient<ActionSpec>::sendGoal(const Goal&, actionlib::SimpleActionClient<ActionSpec>::SimpleDoneCallback, actionlib::SimpleActionClient<ActionSpec>::SimpleActiveCallback, actionlib::SimpleActionClient<ActionSpec>::SimpleFeedbackCallback) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::Goal = actionlib_tutorials::FibonacciGoal_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::SimpleDoneCallback = boost::function<void(const actionlib::SimpleClientGoalState&, const boost::shared_ptr<const actionlib_tutorials::FibonacciResult_<std::allocator<void> > >&)>; typename ActionSpec::_action_result_type::_result_type = actionlib_tutorials::FibonacciResult_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::SimpleActiveCallback = boost::function<void()>; actionlib::SimpleActionClient<ActionSpec>::SimpleFeedbackCallback = boost::function<void(const boost::shared_ptr<const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> > >&)>; typename ActionSpec::_action_feedback_type::_feedback_type = actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >]’
/home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_client.cpp:22:19:   required from here
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h:60:52: warning: unused parameter ‘member_ptr’ [-Wunused-parameter]
     template<class Member> void operator()(Member* member_ptr){
                                                    ^~~~~~~~~~
In file included from /opt/ros/kinetic/include/actionlib/client/client_helpers.h:46:0,
                 from /opt/ros/kinetic/include/actionlib/client/action_client.h:42,
                 from /opt/ros/kinetic/include/actionlib/client/simple_action_client.h:45,
                 from /home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_client.cpp:2:
/opt/ros/kinetic/include/actionlib/managed_list.h: In instantiation of ‘void actionlib::ManagedList<T>::ElemDeleter::operator()(void*) [with T = boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::FibonacciAction_<std::allocator<void> > > >]’:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:171:14:   required from ‘boost::detail::shared_count::shared_count(P, D) [with P = void*; D = actionlib::ManagedList<boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::FibonacciAction_<std::allocator<void> > > > >::ElemDeleter]’
/usr/include/boost/smart_ptr/shared_ptr.hpp:358:76:   required from ‘boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = void; D = actionlib::ManagedList<boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::FibonacciAction_<std::allocator<void> > > > >::ElemDeleter; T = void]’
/opt/ros/kinetic/include/actionlib/managed_list.h:214:58:   required from ‘actionlib::ManagedList<T>::Handle actionlib::ManagedList<T>::add(const T&, actionlib::ManagedList<T>::CustomDeleter, const boost::shared_ptr<actionlib::DestructionGuard>&) [with T = boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::FibonacciAction_<std::allocator<void> > > >; actionlib::ManagedList<T>::CustomDeleter = boost::function<void(actionlib::ManagedList<boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::FibonacciAction_<std::allocator<void> > > > >::iterator)>]’
/opt/ros/kinetic/include/actionlib/client/goal_manager_imp.h:74:138:   required from ‘actionlib::ClientGoalHandle<ActionSpec> actionlib::GoalManager<ActionSpec>::initGoal(const Goal&, actionlib::GoalManager<ActionSpec>::TransitionCallback, actionlib::GoalManager<ActionSpec>::FeedbackCallback) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::GoalManager<ActionSpec>::Goal = actionlib_tutorials::FibonacciGoal_<std::allocator<void> >; actionlib::GoalManager<ActionSpec>::TransitionCallback = boost::function<void(actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >)>; actionlib::GoalManager<ActionSpec>::FeedbackCallback = boost::function<void(actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >, const boost::shared_ptr<const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> > >&)>; typename ActionSpec::_action_feedback_type::_feedback_type = actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/action_client.h:120:71:   required from ‘actionlib::ActionClient<ActionSpec>::GoalHandle actionlib::ActionClient<ActionSpec>::sendGoal(const Goal&, actionlib::ActionClient<ActionSpec>::TransitionCallback, actionlib::ActionClient<ActionSpec>::FeedbackCallback) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::ActionClient<ActionSpec>::GoalHandle = actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >; actionlib::ActionClient<ActionSpec>::Goal = actionlib_tutorials::FibonacciGoal_<std::allocator<void> >; actionlib::ActionClient<ActionSpec>::TransitionCallback = boost::function<void(actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >)>; actionlib::ActionClient<ActionSpec>::FeedbackCallback = boost::function<void(actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >, const boost::shared_ptr<const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> > >&)>; typename ActionSpec::_action_feedback_type::_feedback_type = actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:332:7:   required from ‘void actionlib::SimpleActionClient<ActionSpec>::sendGoal(const Goal&, actionlib::SimpleActionClient<ActionSpec>::SimpleDoneCallback, actionlib::SimpleActionClient<ActionSpec>::SimpleActiveCallback, actionlib::SimpleActionClient<ActionSpec>::SimpleFeedbackCallback) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::Goal = actionlib_tutorials::FibonacciGoal_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::SimpleDoneCallback = boost::function<void(const actionlib::SimpleClientGoalState&, const boost::shared_ptr<const actionlib_tutorials::FibonacciResult_<std::allocator<void> > >&)>; typename ActionSpec::_action_result_type::_result_type = actionlib_tutorials::FibonacciResult_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::SimpleActiveCallback = boost::function<void()>; actionlib::SimpleActionClient<ActionSpec>::SimpleFeedbackCallback = boost::function<void(const boost::shared_ptr<const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> > >&)>; typename ActionSpec::_action_feedback_type::_feedback_type = actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >]’
/home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_client.cpp:22:19:   required from here
/opt/ros/kinetic/include/actionlib/managed_list.h:94:30: warning: unused parameter ‘ptr’ [-Wunused-parameter]
       void operator() (void* ptr)
                              ^~~
In file included from /In file included from /opt/ros/kinetic/include/actionlib/server/action_server.h:174:0,
                 from /opt/ros/kinetic/include/actionlib/server/simple_action_server.h:42,
                 from /home/victor/catkin_test/src/actionlib_tutorials/src/averaging_server.cpp:3:
/opt/ros/kinetic/include/actionlib/server/action_server_imp.h: In instantiation of ‘void actionlib::ActionServer<ActionSpec>::publishStatus(const ros::TimerEvent&) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >]’:
/opt/ros/kinetic/include/actionlib/server/action_server_imp.h:145:22:   required from ‘void actionlib::ActionServer<ActionSpec>::initialize() [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/server/action_server_imp.h:78:17:   required from ‘actionlib::ActionServer<ActionSpec>::ActionServer(ros::NodeHandle, std::__cxx11::string, boost::function<void(actionlib::ServerGoalHandle<ActionSpec>)>, boost::function<void(actionlib::ServerGoalHandle<ActionSpec>)>, bool) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/opt/ros/kinetic/include/actionlib/server/simple_action_server_imp.h:111:56:   required from ‘actionlib::SimpleActionServer<ActionSpec>::SimpleActionServer(ros::NodeHandle, std::__cxx11::string, bool) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/home/victor/catkin_test/src/actionlib_tutorials/src/averaging_server.cpp:12:22:   required from here
/opt/ros/kinetic/include/actionlib/server/action_server_imp.h:184:71: warning: unused parameter ‘e’ [-Wunused-parameter]
   void ActionServer<ActionSpec>::publishStatus(const ros::TimerEvent& e)
                                                                       ^
In file included from /opt/ros/kinetic/include/actionlib/server/action_server.h:46:0,
                 from /opt/ros/kinetic/include/actionlib/server/simple_action_server.h:42,
                 from /home/victor/catkin_test/src/actionlib_tutorials/src/averaging_server.cpp:3:
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h: In instantiation of ‘void actionlib::EnclosureDeleter<Enclosure>::operator()(Member*) [with Member = const actionlib_tutorials::AveragingGoal_<std::allocator<void> >; Enclosure = const actionlib_tutorials::AveragingActionGoal_<std::allocator<void> >]’:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:171:14:   required from ‘boost::detail::shared_count::shared_count(P, D) [with P = const actionlib_tutorials::AveragingGoal_<std::allocator<void> >*; D = actionlib::EnclosureDeleter<const actionlib_tutorials::AveragingActionGoal_<std::allocator<void> > >]’
/usr/include/boost/smart_ptr/shared_ptr.hpp:358:76:   required from ‘boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = const actionlib_tutorials::AveragingGoal_<std::allocator<void> >; D = actionlib::EnclosureDeleter<const actionlib_tutorials::AveragingActionGoal_<std::allocator<void> > >; T = const actionlib_tutorials::AveragingGoal_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/server/server_goal_handle_imp.h:249:21:   required from ‘boost::shared_ptr<const typename ActionSpec::_action_goal_type::_goal_type> actionlib::ServerGoalHandle<ActionSpec>::getGoal() const [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; typename ActionSpec::_action_goal_type::_goal_type = actionlib_tutorials::AveragingGoal_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/server/simple_action_server_imp.h:166:22:   required from ‘boost::shared_ptr<const typename ActionSpec::_action_goal_type::_goal_type> actionlib::SimpleActionServer<ActionSpec>::acceptNewGoal() [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; typename ActionSpec::_action_goal_type::_goal_type = actionlib_tutorials::AveragingGoal_<std::allocator<void> >]’
/home/victor/catkin_test/src/actionlib_tutorials/src/averaging_server.cpp:34:31:   required from here
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h:60:52: warning: unused parameter ‘member_ptr’ [-Wunused-parameter]
     template<class Member> void operator()(Member* member_ptr){
                                                    ^~~~~~~~~~
In file included from /opt/ros/kinetic/include/actionlib/server/handle_tracker_deleter.h:69:0,
                 from /opt/ros/kinetic/include/actionlib/server/action_server.h:50,
                 from /opt/ros/kinetic/include/actionlib/server/simple_action_server.h:42,
                 from /home/victor/catkin_test/src/actionlib_tutorials/src/averaging_server.cpp:3:
/opt/ros/kinetic/include/actionlib/server/handle_tracker_deleter_imp.h: In instantiation of ‘void actionlib::HandleTrackerDeleter<ActionSpec>::operator()(void*) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >]’:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:171:14:   required from ‘boost::detail::shared_count::shared_count(P, D) [with P = void*; D = actionlib::HandleTrackerDeleter<actionlib_tutorials::AveragingAction_<std::allocator<void> > >]’
/usr/include/boost/smart_ptr/shared_ptr.hpp:358:76:   required from ‘boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = void; D = actionlib::HandleTrackerDeleter<actionlib_tutorials::AveragingAction_<std::allocator<void> > >; T = void]’
/opt/ros/kinetic/include/actionlib/server/action_server_base.h:236:58:   required from ‘void actionlib::ActionServerBase<ActionSpec>::goalCallback(const boost::shared_ptr<const typename ActionSpec::_action_goal_type>&) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; typename ActionSpec::_action_goal_type = actionlib_tutorials::AveragingActionGoal_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/server/action_server_imp.h:149:21:   required from ‘void actionlib::ActionServer<ActionSpec>::initialize() [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/server/action_server_imp.h:78:17:   required from ‘actionlib::ActionServer<ActionSpec>::ActionServer(ros::NodeHandle, std::__cxx11::string, boost::function<void(actionlib::ServerGoalHandle<ActionSpec>)>, boost::function<void(actionlib::ServerGoalHandle<ActionSpec>)>, bool) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/opt/ros/kinetic/include/actionlib/server/simple_action_server_imp.h:111:56:   required from ‘actionlib::SimpleActionServer<ActionSpec>::SimpleActionServer(ros::NodeHandle, std::__cxx11::string, bool) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/home/victor/catkin_test/src/actionlib_tutorials/src/averaging_server.cpp:12:22:   required from here
/opt/ros/kinetic/include/actionlib/server/handle_tracker_deleter_imp.h:46:59: warning: unused parameter ‘ptr’ [-Wunused-parameter]
   void HandleTrackerDeleter<ActionSpec>::operator()(void* ptr){
                                                           ^~~
In file included from /opt/ros/kinetic/include/actionlib/server/action_server.h:174:0,
                 from /opt/ros/kinetic/include/actionlib/server/simple_action_server.h:42,
                 from /home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_server.cpp:2:
/opt/ros/kinetic/include/actionlib/server/action_server_imp.h: In instantiation of ‘void actionlib::ActionServer<ActionSpec>::publishStatus(const ros::TimerEvent&) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >]’:
/opt/ros/kinetic/include/actionlib/server/action_server_imp.h:145:22:   required from ‘void actionlib::ActionServer<ActionSpec>::initialize() [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/server/action_server_imp.h:78:17:   required from ‘actionlib::ActionServer<ActionSpec>::ActionServer(ros::NodeHandle, std::__cxx11::string, boost::function<void(actionlib::ServerGoalHandle<ActionSpec>)>, boost::function<void(actionlib::ServerGoalHandle<ActionSpec>)>, bool) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/opt/ros/kinetic/include/actionlib/server/simple_action_server_imp.h:95:56:   required from ‘actionlib::SimpleActionServer<ActionSpec>::SimpleActionServer(ros::NodeHandle, std::__cxx11::string, actionlib::SimpleActionServer<ActionSpec>::ExecuteCallback, bool) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>; actionlib::SimpleActionServer<ActionSpec>::ExecuteCallback = boost::function<void(const boost::shared_ptr<const actionlib_tutorials::FibonacciGoal_<std::allocator<void> > >&)>; typename ActionSpec::_action_goal_type::_goal_type = actionlib_tutorials::FibonacciGoal_<std::allocator<void> >]’
/home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_server.cpp:20:22:   required from here
/opt/ros/kinetic/include/actionlib/server/action_server_imp.h:184:71: warning: unused parameter ‘e’ [-Wunused-parameter]
   void ActionServer<ActionSpec>::publishStatus(const ros::TimerEvent& e)
                                                                       ^
In file included from /opt/ros/kinetic/include/actionlib/server/action_server.h:46:0,
                 from /opt/ros/kinetic/include/actionlib/server/simple_action_server.h:42,
                 from /home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_server.cpp:2:
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h: In instantiation of ‘void actionlib::EnclosureDeleter<Enclosure>::operator()(Member*) [with Member = const actionlib_tutorials::FibonacciGoal_<std::allocator<void> >; Enclosure = const actionlib_tutorials::FibonacciActionGoal_<std::allocator<void> >]’:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:171:14:   required from ‘boost::detail::shared_count::shared_count(P, D) [with P = const actionlib_tutorials::FibonacciGoal_<std::allocator<void> >*; D = actionlib::EnclosureDeleter<const actionlib_tutorials::FibonacciActionGoal_<std::allocator<void> > >]’
/usr/include/boost/smart_ptr/shared_ptr.hpp:358:76:   required from ‘boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = const actionlib_tutorials::FibonacciGoal_<std::allocator<void> >; D = actionlib::EnclosureDeleter<const actionlib_tutorials::FibonacciActionGoal_<std::allocator<void> > >; T = const actionlib_tutorials::FibonacciGoal_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/server/server_goal_handle_imp.h:249:21:   required from ‘boost::shared_ptr<const typename ActionSpec::_action_goal_type::_goal_type> actionlib::ServerGoalHandle<ActionSpec>::getGoal() const [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; typename ActionSpec::_action_goal_type::_goal_type = actionlib_tutorials::FibonacciGoal_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/server/simple_action_server_imp.h:266:9:   required from ‘void actionlib::SimpleActionServer<ActionSpec>::goalCallback(actionlib::SimpleActionServer<ActionSpec>::GoalHandle) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::SimpleActionServer<ActionSpec>::GoalHandle = actionlib::ServerGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >]’
/opt/ros/kinetic/include/actionlib/server/simple_action_server_imp.h:96:23:   required from ‘actionlib::SimpleActionServer<ActionSpec>::SimpleActionServer(ros::NodeHandle, std::__cxx11::string, actionlib::SimpleActionServer<ActionSpec>::ExecuteCallback, bool) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>; actionlib::SimpleActionServer<ActionSpec>::ExecuteCallback = boost::function<void(const boost::shared_ptr<const actionlib_tutorials::FibonacciGoal_<std::allocator<void> > >&)>; typename ActionSpec::_action_goal_type::_goal_type = actionlib_tutorials::FibonacciGoal_<std::allocator<void> >]’
/home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_server.cpp:20:22:   required from here
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h:60:52: warning: unused parameter ‘member_ptr’ [-Wunused-parameter]
     template<class Member> void operator()(Member* member_ptr){
                                                    ^~~~~~~~~~
In file included from /opt/ros/kinetic/include/actionlib/server/handle_tracker_deleter.h:69:0,
                 from /opt/ros/kinetic/include/actionlib/server/action_server.h:50,
                 from /opt/ros/kinetic/include/actionlib/server/simple_action_server.h:42,
                 from /home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_server.cpp:2:
/opt/ros/kinetic/include/actionlib/server/handle_tracker_deleter_imp.h: In instantiation of ‘void actionlib::HandleTrackerDeleter<ActionSpec>::operator()(void*) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >]’:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:171:14:   required from ‘boost::detail::shared_count::shared_count(P, D) [with P = void*; D = actionlib::HandleTrackerDeleter<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >]’
/usr/include/boost/smart_ptr/shared_ptr.hpp:358:76:   required from ‘boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = void; D = actionlib::HandleTrackerDeleter<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >; T = void]’
/opt/ros/kinetic/include/actionlib/server/action_server_base.h:236:58:   required from ‘void actionlib::ActionServerBase<ActionSpec>::goalCallback(const boost::shared_ptr<const typename ActionSpec::_action_goal_type>&) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; typename ActionSpec::_action_goal_type = actionlib_tutorials::FibonacciActionGoal_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/server/action_server_imp.h:149:21:   required from ‘void actionlib::ActionServer<ActionSpec>::initialize() [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/server/action_server_imp.h:78:17:   required from ‘actionlib::ActionServer<ActionSpec>::ActionServer(ros::NodeHandle, std::__cxx11::string, boost::function<void(actionlib::ServerGoalHandle<ActionSpec>)>, boost::function<void(actionlib::ServerGoalHandle<ActionSpec>)>, bool) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/opt/ros/kinetic/include/actionlib/server/simple_action_server_imp.h:95:56:   required from ‘actionlib::SimpleActionServer<ActionSpec>::SimpleActionServer(ros::NodeHandle, std::__cxx11::string, actionlib::SimpleActionServer<ActionSpec>::ExecuteCallback, bool) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>; actionlib::SimpleActionServer<ActionSpec>::ExecuteCallback = boost::function<void(const boost::shared_ptr<const actionlib_tutorials::FibonacciGoal_<std::allocator<void> > >&)>; typename ActionSpec::_action_goal_type::_goal_type = actionlib_tutorials::FibonacciGoal_<std::allocator<void> >]’
/home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_server.cpp:20:22:   required from here
/opt/ros/kinetic/include/actionlib/server/handle_tracker_deleter_imp.h:46:59: warning: unused parameter ‘ptr’ [-Wunused-parameter]
   void HandleTrackerDeleter<ActionSpec>::operator()(void* ptr){
                                                           ^~~
[ 94%] Linking CXX executable /home/victor/catkin_test/devel/lib/actionlib_tutorials/fibonacci_class_client
opt/ros/kinetic/include/actionlib/client/client_helpers.h:47:0,
                 from /opt/ros/kinetic/include/actionlib/client/action_client.h:42,
                 from /opt/ros/kinetic/include/actionlib/client/simple_action_client.h:45,
                 from /home/victor/catkin_test/src/actionlib_tutorials/src/averaging_client.cpp:2:
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h: In instantiation of ‘void actionlib::EnclosureDeleter<Enclosure>::operator()(Member*) [with Member = const actionlib_tutorials::AveragingFeedback_<std::allocator<void> >; Enclosure = const actionlib_tutorials::AveragingActionFeedback_<std::allocator<void> >]’:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:171:14:   required from ‘boost::detail::shared_count::shared_count(P, D) [with P = const actionlib_tutorials::AveragingFeedback_<std::allocator<void> >*; D = actionlib::EnclosureDeleter<const actionlib_tutorials::AveragingActionFeedback_<std::allocator<void> > >]’
/usr/include/boost/smart_ptr/shared_ptr.hpp:358:76:   required from ‘boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = const actionlib_tutorials::AveragingFeedback_<std::allocator<void> >; D = actionlib::EnclosureDeleter<const actionlib_tutorials::AveragingActionFeedback_<std::allocator<void> > >; T = const actionlib_tutorials::AveragingFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/comm_state_machine_imp.h:117:62:   required from ‘void actionlib::CommStateMachine<ActionSpec>::updateFeedback(actionlib::CommStateMachine<ActionSpec>::GoalHandleT&, const ActionFeedbackConstPtr&) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; actionlib::CommStateMachine<ActionSpec>::GoalHandleT = actionlib::ClientGoalHandle<actionlib_tutorials::AveragingAction_<std::allocator<void> > >; actionlib::CommStateMachine<ActionSpec>::ActionFeedbackConstPtr = boost::shared_ptr<const actionlib_tutorials::AveragingActionFeedback_<std::allocator<void> > >; typename ActionSpec::_action_feedback_type = actionlib_tutorials::AveragingActionFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/goal_manager_imp.h:119:5:   required from ‘void actionlib::GoalManager<ActionSpec>::updateFeedbacks(const ActionFeedbackConstPtr&) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; actionlib::GoalManager<ActionSpec>::ActionFeedbackConstPtr = boost::shared_ptr<const actionlib_tutorials::AveragingActionFeedback_<std::allocator<void> > >; typename ActionSpec::_action_feedback_type = actionlib_tutorials::AveragingActionFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/action_client.h:272:5:   required from ‘void actionlib::ActionClient<ActionSpec>::feedbackCb(const ros::MessageEvent<const typename ActionSpec::_action_feedback_type>&) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; typename ActionSpec::_action_feedback_type = actionlib_tutorials::AveragingActionFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/action_client.h:211:52:   required from ‘void actionlib::ActionClient<ActionSpec>::initClient(ros::CallbackQueueInterface*) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/action_client.h:99:15:   required from ‘actionlib::ActionClient<ActionSpec>::ActionClient(const ros::NodeHandle&, const string&, ros::CallbackQueueInterface*) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:261:15:   required from ‘void actionlib::SimpleActionClient<ActionSpec>::initSimpleClient(ros::NodeHandle&, const string&, bool) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:92:21:   required from ‘actionlib::SimpleActionClient<ActionSpec>::SimpleActionClient(const string&, bool) [with ActionSpec = actionlib_tutorials::AveragingAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/home/victor/catkin_test/src/actionlib_tutorials/src/averaging_client.cpp:18:85:   required from here
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h:60:52: warning: unused parameter ‘member_ptr’ [-Wunused-parameter]
     template<class Member> void operator()(Member* member_ptr){
                                                    ^~~~~~~~~~
opt/ros/kinetic/include/actionlib/client/client_helpers.h:47:0,
                 from /opt/ros/kinetic/include/actionlib/client/action_client.h:42,
                 from /opt/ros/kinetic/include/actionlib/client/simple_action_client.h:45,
                 from /home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_client.cpp:2:
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h: In instantiation of ‘void actionlib::EnclosureDeleter<Enclosure>::operator()(Member*) [with Member = const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >; Enclosure = const actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> >]’:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:171:14:   required from ‘boost::detail::shared_count::shared_count(P, D) [with P = const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >*; D = actionlib::EnclosureDeleter<const actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> > >]’
/usr/include/boost/smart_ptr/shared_ptr.hpp:358:76:   required from ‘boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >; D = actionlib::EnclosureDeleter<const actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> > >; T = const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/comm_state_machine_imp.h:117:62:   required from ‘void actionlib::CommStateMachine<ActionSpec>::updateFeedback(actionlib::CommStateMachine<ActionSpec>::GoalHandleT&, const ActionFeedbackConstPtr&) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::CommStateMachine<ActionSpec>::GoalHandleT = actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >; actionlib::CommStateMachine<ActionSpec>::ActionFeedbackConstPtr = boost::shared_ptr<const actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> > >; typename ActionSpec::_action_feedback_type = actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/goal_manager_imp.h:119:5:   required from ‘void actionlib::GoalManager<ActionSpec>::updateFeedbacks(const ActionFeedbackConstPtr&) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::GoalManager<ActionSpec>::ActionFeedbackConstPtr = boost::shared_ptr<const actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> > >; typename ActionSpec::_action_feedback_type = actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/action_client.h:272:5:   required from ‘void actionlib::ActionClient<ActionSpec>::feedbackCb(const ros::MessageEvent<const typename ActionSpec::_action_feedback_type>&) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; typename ActionSpec::_action_feedback_type = actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/action_client.h:211:52:   required from ‘void actionlib::ActionClient<ActionSpec>::initClient(ros::CallbackQueueInterface*) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/action_client.h:99:15:   required from ‘actionlib::ActionClient<ActionSpec>::ActionClient(const ros::NodeHandle&, const string&, ros::CallbackQueueInterface*) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:261:15:   required from ‘void actionlib::SimpleActionClient<ActionSpec>::initSimpleClient(ros::NodeHandle&, const string&, bool) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:92:21:   required from ‘actionlib::SimpleActionClient<ActionSpec>::SimpleActionClient(const string&, bool) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_client.cpp:12:91:   required from here
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h:60:52: warning: unused parameter ‘member_ptr’ [-Wunused-parameter]
     template<class Member> void operator()(Member* member_ptr){
                                                    ^~~~~~~~~~
In file included from /opt/ros/kinetic/include/actionlib/client/client_helpers.h:47:0,
                 from /opt/ros/kinetic/include/actionlib/client/action_client.h:42,
                 from /opt/ros/kinetic/include/actionlib/client/simple_action_client.h:45,
                 from /home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_callback_client.cpp:2:
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h: In instantiation of ‘void actionlib::EnclosureDeleter<Enclosure>::operator()(Member*) [with Member = const actionlib_tutorials::FibonacciResult_<std::allocator<void> >; Enclosure = const actionlib_tutorials::FibonacciActionResult_<std::allocator<void> >]’:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:171:14:   required from ‘boost::detail::shared_count::shared_count(P, D) [with P = const actionlib_tutorials::FibonacciResult_<std::allocator<void> >*; D = actionlib::EnclosureDeleter<const actionlib_tutorials::FibonacciActionResult_<std::allocator<void> > >]’
/usr/include/boost/smart_ptr/shared_ptr.hpp:358:76:   required from ‘boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = const actionlib_tutorials::FibonacciResult_<std::allocator<void> >; D = actionlib::EnclosureDeleter<const actionlib_tutorials::FibonacciActionResult_<std::allocator<void> > >; T = const actionlib_tutorials::FibonacciResult_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/comm_state_machine_imp.h:79:14:   required from ‘actionlib::CommStateMachine<ActionSpec>::ResultConstPtr actionlib::CommStateMachine<ActionSpec>::getResult() const [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::CommStateMachine<ActionSpec>::ResultConstPtr = boost::shared_ptr<const actionlib_tutorials::FibonacciResult_<std::allocator<void> > >; typename ActionSpec::_action_result_type::_result_type = actionlib_tutorials::FibonacciResult_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/client_goal_handle_imp.h:175:44:   required from ‘actionlib::ClientGoalHandle<ActionSpec>::ResultConstPtr actionlib::ClientGoalHandle<ActionSpec>::getResult() const [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::ClientGoalHandle<ActionSpec>::ResultConstPtr = boost::shared_ptr<const actionlib_tutorials::FibonacciResult_<std::allocator<void> > >; typename ActionSpec::_action_result_type::_result_type = actionlib_tutorials::FibonacciResult_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:524:13:   required from ‘void actionlib::SimpleActionClient<ActionSpec>::handleTransition(actionlib::SimpleActionClient<ActionSpec>::GoalHandleT) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::GoalHandleT = actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:332:41:   required from ‘void actionlib::SimpleActionClient<ActionSpec>::sendGoal(const Goal&, actionlib::SimpleActionClient<ActionSpec>::SimpleDoneCallback, actionlib::SimpleActionClient<ActionSpec>::SimpleActiveCallback, actionlib::SimpleActionClient<ActionSpec>::SimpleFeedbackCallback) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::Goal = actionlib_tutorials::FibonacciGoal_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::SimpleDoneCallback = boost::function<void(const actionlib::SimpleClientGoalState&, const boost::shared_ptr<const actionlib_tutorials::FibonacciResult_<std::allocator<void> > >&)>; typename ActionSpec::_action_result_type::_result_type = actionlib_tutorials::FibonacciResult_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::SimpleActiveCallback = boost::function<void()>; actionlib::SimpleActionClient<ActionSpec>::SimpleFeedbackCallback = boost::function<void(const boost::shared_ptr<const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> > >&)>; typename ActionSpec::_action_feedback_type::_feedback_type = actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >]’
/home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_callback_client.cpp:43:52:   required from here
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h:60:52: warning: unused parameter ‘member_ptr’ [-Wunused-parameter]
     template<class Member> void operator()(Member* member_ptr){
                                                    ^~~~~~~~~~
In file included from /opt/ros/kinetic/include/actionlib/client/client_helpers.h:46:0,
                 from /opt/ros/kinetic/include/actionlib/client/action_client.h:42,
                 from /opt/ros/kinetic/include/actionlib/client/simple_action_client.h:45,
                 from /home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_callback_client.cpp:2:
/opt/ros/kinetic/include/actionlib/managed_list.h: In instantiation of ‘void actionlib::ManagedList<T>::ElemDeleter::operator()(void*) [with T = boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::FibonacciAction_<std::allocator<void> > > >]’:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:171:14:   required from ‘boost::detail::shared_count::shared_count(P, D) [with P = void*; D = actionlib::ManagedList<boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::FibonacciAction_<std::allocator<void> > > > >::ElemDeleter]’
/usr/include/boost/smart_ptr/shared_ptr.hpp:358:76:   required from ‘boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = void; D = actionlib::ManagedList<boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::FibonacciAction_<std::allocator<void> > > > >::ElemDeleter; T = void]’
/opt/ros/kinetic/include/actionlib/managed_list.h:214:58:   required from ‘actionlib::ManagedList<T>::Handle actionlib::ManagedList<T>::add(const T&, actionlib::ManagedList<T>::CustomDeleter, const boost::shared_ptr<actionlib::DestructionGuard>&) [with T = boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::FibonacciAction_<std::allocator<void> > > >; actionlib::ManagedList<T>::CustomDeleter = boost::function<void(actionlib::ManagedList<boost::shared_ptr<actionlib::CommStateMachine<actionlib_tutorials::FibonacciAction_<std::allocator<void> > > > >::iterator)>]’
/opt/ros/kinetic/include/actionlib/client/goal_manager_imp.h:74:138:   required from ‘actionlib::ClientGoalHandle<ActionSpec> actionlib::GoalManager<ActionSpec>::initGoal(const Goal&, actionlib::GoalManager<ActionSpec>::TransitionCallback, actionlib::GoalManager<ActionSpec>::FeedbackCallback) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::GoalManager<ActionSpec>::Goal = actionlib_tutorials::FibonacciGoal_<std::allocator<void> >; actionlib::GoalManager<ActionSpec>::TransitionCallback = boost::function<void(actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >)>; actionlib::GoalManager<ActionSpec>::FeedbackCallback = boost::function<void(actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >, const boost::shared_ptr<const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> > >&)>; typename ActionSpec::_action_feedback_type::_feedback_type = actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/action_client.h:120:71:   required from ‘actionlib::ActionClient<ActionSpec>::GoalHandle actionlib::ActionClient<ActionSpec>::sendGoal(const Goal&, actionlib::ActionClient<ActionSpec>::TransitionCallback, actionlib::ActionClient<ActionSpec>::FeedbackCallback) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::ActionClient<ActionSpec>::GoalHandle = actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >; actionlib::ActionClient<ActionSpec>::Goal = actionlib_tutorials::FibonacciGoal_<std::allocator<void> >; actionlib::ActionClient<ActionSpec>::TransitionCallback = boost::function<void(actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >)>; actionlib::ActionClient<ActionSpec>::FeedbackCallback = boost::function<void(actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >, const boost::shared_ptr<const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> > >&)>; typename ActionSpec::_action_feedback_type::_feedback_type = actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:332:7:   required from ‘void actionlib::SimpleActionClient<ActionSpec>::sendGoal(const Goal&, actionlib::SimpleActionClient<ActionSpec>::SimpleDoneCallback, actionlib::SimpleActionClient<ActionSpec>::SimpleActiveCallback, actionlib::SimpleActionClient<ActionSpec>::SimpleFeedbackCallback) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::Goal = actionlib_tutorials::FibonacciGoal_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::SimpleDoneCallback = boost::function<void(const actionlib::SimpleClientGoalState&, const boost::shared_ptr<const actionlib_tutorials::FibonacciResult_<std::allocator<void> > >&)>; typename ActionSpec::_action_result_type::_result_type = actionlib_tutorials::FibonacciResult_<std::allocator<void> >; actionlib::SimpleActionClient<ActionSpec>::SimpleActiveCallback = boost::function<void()>; actionlib::SimpleActionClient<ActionSpec>::SimpleFeedbackCallback = boost::function<void(const boost::shared_ptr<const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> > >&)>; typename ActionSpec::_action_feedback_type::_feedback_type = actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >]’
/home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_callback_client.cpp:43:52:   required from here
/opt/ros/kinetic/include/actionlib/managed_list.h:94:30: warning: unused parameter ‘ptr’ [-Wunused-parameter]
       void operator() (void* ptr)
                     [ 95%] Linking CXX executable /home/victor/catkin_test/devel/lib/actionlib_tutorials/averaging_server
         ^~~
In file included from /opt/ros/kinetic/include/actionlib/client/client_helpers.h:47:0,
                 from /opt/ros/kinetic/include/actionlib/client/action_client.h:42,
                 from /opt/ros/kinetic/include/actionlib/client/simple_action_client.h:45,
                 from /home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_callback_client.cpp:2:
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h: In instantiation of ‘void actionlib::EnclosureDeleter<Enclosure>::operator()(Member*) [with Member = const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >; Enclosure = const actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> >]’:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:171:14:   required from ‘boost::detail::shared_count::shared_count(P, D) [with P = const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >*; D = actionlib::EnclosureDeleter<const actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> > >]’
/usr/include/boost/smart_ptr/shared_ptr.hpp:358:76:   required from ‘boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >; D = actionlib::EnclosureDeleter<const actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> > >; T = const actionlib_tutorials::FibonacciFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/comm_state_machine_imp.h:117:62:   required from ‘void actionlib::CommStateMachine<ActionSpec>::updateFeedback(actionlib::CommStateMachine<ActionSpec>::GoalHandleT&, const ActionFeedbackConstPtr&) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::CommStateMachine<ActionSpec>::GoalHandleT = actionlib::ClientGoalHandle<actionlib_tutorials::FibonacciAction_<std::allocator<void> > >; actionlib::CommStateMachine<ActionSpec>::ActionFeedbackConstPtr = boost::shared_ptr<const actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> > >; typename ActionSpec::_action_feedback_type = actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/goal_manager_imp.h:119:5:   required from ‘void actionlib::GoalManager<ActionSpec>::updateFeedbacks(const ActionFeedbackConstPtr&) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; actionlib::GoalManager<ActionSpec>::ActionFeedbackConstPtr = boost::shared_ptr<const actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> > >; typename ActionSpec::_action_feedback_type = actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/action_client.h:272:5:   required from ‘void actionlib::ActionClient<ActionSpec>::feedbackCb(const ros::MessageEvent<const typename ActionSpec::_action_feedback_type>&) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; typename ActionSpec::_action_feedback_type = actionlib_tutorials::FibonacciActionFeedback_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/action_client.h:211:52:   required from ‘void actionlib::ActionClient<ActionSpec>::initClient(ros::CallbackQueueInterface*) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >]’
/opt/ros/kinetic/include/actionlib/client/action_client.h:99:15:   required from ‘actionlib::ActionClient<ActionSpec>::ActionClient(const ros::NodeHandle&, const string&, ros::CallbackQueueInterface*) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:261:15:   required from ‘void actionlib::SimpleActionClient<ActionSpec>::initSimpleClient(ros::NodeHandle&, const string&, bool) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/opt/ros/kinetic/include/actionlib/client/simple_action_client.h:92:21:   required from ‘actionlib::SimpleActionClient<ActionSpec>::SimpleActionClient(const string&, bool) [with ActionSpec = actionlib_tutorials::FibonacciAction_<std::allocator<void> >; std::__cxx11::string = std::__cxx11::basic_string<char>]’
/home/victor/catkin_test/src/actionlib_tutorials/src/fibonacci_callback_client.cpp:34:30:   required from here
/opt/ros/kinetic/include/actionlib/enclosure_deleter.h:60:52: warning: unused parameter ‘member_ptr’ [-Wunused-parameter]
     template<class Member> void operator()(Member* member_ptr){
                                                    ^~~~~~~~~~

Not beautiful 😭

actionlib 1.11.1 has threading issues not present in earlier versions

Occurs with both 1.11.0 and 1.11.0 -- I presume this is part of the removal of __connection_header, but I haven't fully tracked it down. Opening a ticket in the hopes that someone might just have the answer, otherwise I'll keep digging:

Usage:

  • Create a SimpleActionClient with spin_thread=True.
  • Call waitForServer with no timeout

Expected Result:

  • Connection will be made, and program will continue. This works under hydro, with the same exact code.

What happens:

  • We sit forever, queue fills up, but nothing is processed:
  • isServerConnected messages continue forever.
[DEBUG] [1399620430.065839543]: Spinning up a thread for the SimpleActionClient
[DEBUG] [1399620430.070667607]: Publisher update for [/arm_controller/follow_joint_trajectory/status]: http://ubr1:40107/,  already have these connections: 
[DEBUG] [1399620430.070875230]: Began asynchronous xmlrpc connection to [ubr1:40107]
[DEBUG] [1399620430.075727524]: Publisher update for [/arm_controller/follow_joint_trajectory/feedback]: http://ubr1:40107/,  already have these connections: 
[DEBUG] [1399620430.075954797]: Began asynchronous xmlrpc connection to [ubr1:40107]
[DEBUG] [1399620430.080663252]: Publisher update for [/arm_controller/follow_joint_trajectory/result]: http://ubr1:40107/,  already have these connections: 
[DEBUG] [1399620430.081235731]: Began asynchronous xmlrpc connection to [ubr1:40107]
[DEBUG] [1399620430.398686998]: Incoming queue full for topic "/arm_controller/follow_joint_trajectory/status".  Discarding oldest message (current queue size [0])
[DEBUG] [1399620430.833689019]: isServerConnected: Didn't receive status yet, so not connected yet
[DEBUG] [1399620431.333864630]: isServerConnected: Didn't receive status yet, so not connected yet

Now the interesting part:

  • If I start an AsyncSpinner, everything works perfectly.

My theory, untested, is that the change to using ros::MessageEvent has moved the messages outside of the callback_queue processed by the simple action client's thread. @dirk-thomas Does this sound remotely possible?

wait_for_service(): Race at startup; use wall time

Hi,

wait_for_service() uses the following check for its timeout feature:

timeout_time = rospy.get_rostime() + timeout

This fails miserably when time is zero (because simulation is being used and it hasn't been initialized yet). It'd probably make more sense to use wall time here.

SimpleActionServer<>::shutdown() deletes execute_thread_ twice

Hi,

This code seems to have some duplication:

template<class ActionSpec>
void SimpleActionServer<ActionSpec>::shutdown()
{
  if (execute_callback_) {
    {
      {
        boost::mutex::scoped_lock terminate_lock(terminate_mutex_);
        need_to_terminate_ = true;
      }

      assert(execute_thread_);
      if (execute_thread_) {
        execute_thread_->join();
        delete execute_thread_;
        execute_thread_ = NULL;
      }
    }

    assert(execute_thread_);
    execute_thread_->join();
    delete execute_thread_;
    execute_thread_ = NULL;
  }
}

In debug builds the second assertion fails always.

It looks like it was introduced in commit bac04a3?

Lukas

wait_for_server: is it necessary to require node to be initialised?

When I try to call wait_for_server from script not node or from python interpreter the following error is raised:

ROSInitException: time is not initialized. Have you called init_node()?

The problem is that the wait_for_service uses rospy.get_rostime(). Is it necessary, The wait_for_service uses time and it works perfectly fine?

SimpleActionClient is tracking goal

I have reached a point in my application in which I would like to have a SimpleActionClient member which allows me to know if the server is currently pursuing a goal. Something like action_server.isTrackingGoal().

I guess is possible (I haven't checked in detail the SimpleActionClient implementation). Is there any reason not to do this? I think I could try out an implementation in case it is possible.

20-60 second delays in actionlib.SimpleActionClient.wait_for_server()

(Submitted here based on a suggestion to my ROS answers question).

I am sporadically seeing actionlib’s wait_for_server() take tens of seconds to return when starting a new client node, even when the server node is already up, running, and responding to goals from other nodes.

It’s disconcerting to have this sometimes return instantly, and sometimes require up to a minute.

Is this expected? Has anybody seen this before? Does it reflect some error in how we’ve configured the system or how we're using actionlib?


We are running Indigo on Ubuntu 14.04, using the python implementation of SimpleActionClient/SimpleActionServer, and a single node implements multiple servers.

Unfortunately, I have been unable to reproduce this delay in simulation or on the bench. So far, it has only (sporadically) shown up when testing in the field. I don’t have enough samples to say for sure, but the delays might get longer the longer we’re operating. Additionally, I have not seen this the first time a client connects to the server; it seems to happen on subsequent connections.

Based on the SimpleActionClient’s and SimpleActionServer’s log files, I think the issue is that the /cancel and /goal topics aren’t connecting immediately: note the 20 second delay between 13:51:55 -> 13:52:15.

If I understand the logs, the problem was that rosmaster needed to push out updates regarding who was publishing/subscribing in order for the SimpleActionServer to properly set up inbound connections.

I’m only seeing it in this particular node, and only for inbound. (While waiting for the client to start, we used rostopic echo to create new connections on other topics.)


Here are what I think are the relevant bits of the logs:

  • Server (/motions)
  • Client (/planner) (Note that there was already another client node connected to the server at this time, on the same topics.
  • master.log (I removed +PUB, +SUB, publisherUpdate notifications for other topics, but left in all errors)

Python action servers cannot be stopped, so...

...they keep publishing action status until destroyed:
http://docs.ros.org/diamondback/api/actionlib/html/action__server_8py_source.html#L00326

This is not a big drama, but some of my rostests require fake action servers that keep publishing on status topic once the client is shutdown, throwing this exception:

Exception in thread Thread-9:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 763, in run
self._target(*self.args, **self._kwargs)
File "/opt/ros/indigo/lib/python2.7/dist-packages/actionlib/action_server.py", line 57, in ros_timer
callable()
File "/opt/ros/indigo/lib/python2.7/dist-packages/actionlib/action_server.py", line 303, in publish_status_async
self.publish_status();
File "/opt/ros/indigo/lib/python2.7/dist-packages/actionlib/action_server.py", line 329, in publish_status
self.status_pub.publish(status_array)
File "/opt/ros/indigo/lib/python2.7/dist-packages/rospy/topics.py", line 852, in publish
self.impl.publish(data)
File "/opt/ros/indigo/lib/python2.7/dist-packages/rospy/topics.py", line 1011, in publish
raise ROSException("publish() to a closed topic")
ROSException: publish() to a closed topic

An ugly hack is to set action_server.started = False, but I don't think this is the intended way to shutdown an action server.

boost::posix_time::milliseconds does not allow float point value initialization

With recent release of the Boost Library, boost::posix_time no longer permit initialize a milliseconds/microseconds with a float point value. This broke some of the packages of ROS, and 'actionlib' is one that's been affected. Other packages being affected include 'rostime' and 'laser_assembler'.

I'm opening this issue here hoping someone could fix it for the good of all people.

I encountered this issue when compiling ROS on my macOS box, which has Boost-1.67.0. And I've fixed them manually, but found it tedious to fork & pull request those fixes. If there is indeed a need to do so, I might do it in the future.

actionlib fails compilation with stricter GCC options

It looks like some of the actionlib uses unnecessary ";" which GCC correctly points out with stricter options. For example,

/opt/ros/indigo/include/actionlib/action_definition.h:58:2: error: extra ‘;’ [-Werror=pedantic]
/opt/ros/indigo/include/actionlib/destruction_guard.h:126:2: error: extra ‘;’ [-Werror=pedantic]
/opt/ros/indigo/include/actionlib_msgs/GoalID.h:177:36: error: extra ‘;’ [-Werror=pedantic]
/opt/ros/indigo/include/std_msgs/Header.h:188:36: error: extra ‘;’ [-Werror=pedantic]
/opt/ros/indigo/include/actionlib_msgs/GoalStatus.h:240:36: error: extra ‘;’ [-Werror=pedantic]

To reproduce these errors turn on checks in GCC using following line in CMakeLists.txt:

set(CMAKE_CXX_FLAGS "-std=c++11 -Wall -Wextra -Wstrict-aliasing -pedantic -fmax-errors=5 -Werror -Wunreachable-code ${CMAKE_CXX_FLAGS}")

Action client/server block unexpectedly

I don't know if I am able to let you reproduce this problem but I try to explain in a detailed fashion.

I am using a default position_controllers/JointTrajectoryController with a default actionlib::SimpleActionClient<control_msgs::FollowJointTrajectoryAction> action_client_ on a physical device with just one motor, i.e. one actuator/joint.

I have a control node which exploit a ros::WallTimer control_timer_ (based on a fixed ros::WallDuration control_duration_, e.g. 0.001s) to call the control loop method periodically and forever:

void deviceControl::update(const ros::WallTime& time, const ros::WallDuration& period) {
  // read the state from the hardware
  device_->read(ros::Time(time.toSec()), ros::Duration(period.toSec()));

  // update the controllers (set the new control actions)
  controller_manager_.update(ros::Time(time.toSec()), ros::Duration(period.toSec()));

  // write the commands to the hardware
  device_->write(ros::Time(time.toSec()), ros::Duration(period.toSec()));
}

I also use a simple method to send a new goal to the action server:

void deviceControl::move(const trajectory_msgs::JointTrajectory &joint_trajectory) {
  control_msgs::FollowJointTrajectoryAction control_action;
  control_action.action_goal.goal.trajectory = joint_trajectory;
  control_action.action_goal.header.stamp = ros::Time(0);
  action_client_.sendGoal(control_action.action_goal.goal,
                          std::bind(&deviceControl::actionDoneCallback, this, std::placeholders::_1, std::placeholders::_2),
                          std::bind(&deviceControl::actionActiveCallback, this),
                          std::bind(&deviceControl::actionFeedbackCallback, this, std::placeholders::_1));
}

And I'd like to loop the trajectory forever, e.g. if the trajectory is a period of a sine wave, I'd like to repeat it as soon as one period is finished. To do so, I've simply implemented the actionDoneCallback like this:

void deviceControl::actionDoneCallback(const actionlib::SimpleClientGoalState &state, const control_msgs::FollowJointTrajectoryResultConstPtr &result) {
  ... // debug info

  // automatically loop the waypoint trajectory
  if (waypoint_joint_trajectory_.points.size()) {
    move(waypoint_joint_trajectory_);
  }
}

where the waypoint_joint_trajectory_ is initialized in the constructor of the control node and it is never touched any longer.

This mechanism almost works well, and the motor moves for hours without problems. However it eventually blocks (like it is waiting on a mutex) after a new goal is sent to the server. The scheme is always the same:

...
actionFeedbackCallback prompt on screen feeback info
actionDoneCallback prompt that current goal ends in state SUCCEED
new goal is sent
actionActiveCallback is called (and do nothing)
then nothing more happens...

The control node continues to run, but nothing is moving any longer since the reference (usually ~0) is close to the current motor position.

I've also investigate a bit when the fault happens and it seems that the list of tracked goals advertised in position_trajectory_controller/follow_joint_trajectory/status which contained several entries, becomes suddenly of two only elements, and does not change anymore.

The strange thing is that the action server is not really stuck. Indeed, if I call manually the move method to send a new goal, it starts to move again (apparently without problems) till the next unexpected block.

As a workaround I started to send new goals with another timer, properly set, instead of using the actionDoneCallback. However, this is not the best option, since it can lead to discontinuity in the motion if there is a delay in the previous goal reference pursuit, i.e. if the goal is not ending on time.

This behavior seems to happen more frequently and sooner if the control loop period becomes shorter, or there are several nodes running. Indeed it seems to be a race condition which happens very rarely.

Can you suggest me what to investigate to understand better this problem?
Thank you very much!

Actionlib Handle assertion killed program

I have a pretty intensive robotic application that we are running through reliability tests before software goes into production in June. After about a week of running fine, one our actionlib clients died due to a low-level assertion in the Handle class.

affordance_template_server_node: /home/pbeeson/ros/vehtek/src/actionlib/include/actionlib/managed_list.h:171: bool actionlib::ManagedList<T>::Handle::operator==(const actionlib::ManagedList<T>::Handle&) const [with T = boost::shared_ptr<actionlib::CommStateMachine<affordance_template_msgs::PlanAction_<std::allocator<void> > > >]: Assertion `valid_' failed.

Fix the silent fail when the robot stops short of a move goal

I've been using actionlib to issue MoveBaseGoals to my robot for a while now. I've noticed that there are several instances where the robot gets close to the goal and stops, but doesn't properly transition to goal state 1 (SUCCEEDED).

When this happens, there is effectively a silent fail because the robot refuses to move any further and actionlib doesn't report if it reached the goal or not. To resolve this I'd like to suggest adding the following few lines of code to the isGoalReached function in goal_functions.cpp to warn the user if actionlib has stopped short of a move goal.

//Current code______________________________________________________________
double goal_x = goal_pose.getOrigin().getX();
double goal_y = goal_pose.getOrigin().getY();
double goal_th = tf::getYaw(goal_pose.getRotation());

//check to see if we've reached the goal position
if(getGoalPositionDistance(global_pose, goal_x, goal_y) <= xy_goal_tolerance) {
    //check to see if the goal orientation has been reached
    if(fabs(getGoalOrientationAngleDifference(global_pose, goal_th)) <= yaw_goal_tolerance) {
        //make sure that we're actually stopped before returning success
        if(stopped(base_odom, rot_stopped_vel, trans_stopped_vel)) 
           return true;
    }
}  

//Suggested code______________________________________________________________
double goal_x = goal_pose.getOrigin().getX();
double goal_y = goal_pose.getOrigin().getY();
double goal_th = tf::getYaw(goal_pose.getRotation());

double distance_to_goal = getGoalPositionDistance(global_pose, goal_x, goal_y);
double angle_to_goal = fabs(getGoalOrientationAngleDifference(global_pose, goal_th))

//check to see if we've reached the goal position
if(distance_to_goal <= xy_goal_tolerance) {
    //check to see if the goal orientation has been reached
    if(angle_to_goal <= yaw_goal_tolerance) {
        //make sure that we're actually stopped before returning success
        if(stopped(base_odom, rot_stopped_vel, trans_stopped_vel)) {
           return true;
        }
    }
}

//If we have stopped moving but didn't reach the goal, we need to report this failure to the user 
if(stopped(base_odom, rot_stopped_vel, trans_stopped_vel)) {
    //check to see if we failed to reach the goal position
    if(distance_to_goal > xy_goal_tolerance) {
        ROS_WARN("Robot stopped %d meters short of the goal position", fabs(distance_to_goal - xy_goal_tolerance)
    }
    //check to see if we failed to reach the goal orientation
    if(angle_to_goal > yaw_goal_tolerance) {
        ROS_WARN("Robot stopped %d radians short of the goal angle", fabs(angle_to_goal - yaw_goal_tolerance)
    }
}

I've read through a bit of the actionlib source code, but there may already be something like this that I haven't found yet, hence why this is just a suggestion. Or my problem may be totally unrelated, so I wanted to open this issue for discussion. I'm also new to Github so I don't know how to use pull requests or go about making changes like this on my own.

Any advice or constructive criticism would be appreciated.

Extending ActionServer with Pausing capabilities

I have a doubt that hopefully you can help me with 😄

Use case: I have an action_1 running (e.g. DoDishes) and, while performing, I want to perform another action_2 (e.g. pick up the phone).

As far as I can think about it, a way of implementing this with the SimpleActionServer it would be to create two of these. When the second option wants to be executed, I cancel action_1, execute action_2 and, when done, I start action_1 again. This would do the trick for most of the cases.

However, there are some cases where the action_1 might has critical information that we don't want to loose (e.g. number of plates cleaned) and here is might problem. I could store this critical information in the client but it would be sort of a patch to the root problem. So far, the state machine imposed by action_server.h does not contemplate a "Paused" state. Thus it does not provide client-side methods like setPaused, setActive.

If this makes sense, I was wondering what would be the necessary steps to make this happen and I foresee this as:

  • Extend common_msgs/actionlib_msgs to have a Paused state
  • Extend action_sever.h to have a two new subscribers as "pause" and "resume" to handle the new interactions with the Active state.
  • Extend both python and cpp client implementation to add the setPaused and setActive methods that easy the job.

In some sense, it tackles a design problem of actionlib which is a bi-directional interaction of the process, but for a very simple (and generic) application which is pausing and resuming the action. I think this might be a useful feature for some applications like contextual navigation (imagine a cleaning robot that while cleaning comes across with a dirty spot, cleans it, and resumes the previous job), but maybe this can be achieved in a simpler way that I cannot see 😛

Thanks for the help!

waitForServer hangs when server name is incorrect

Hello,

When a SimpleActionClient is constructed with the wrong action name, wait_for_server() hangs forever and there is no error message:

client = actionlib.SimpleActionClient('wrong_action_name', DoDishesAction)
client.wait_for_server()

I think there should be a check with an error message raised when the name is not found, as:

  • I am not the only one facing this problem, see e.g. this question on ROS answers
  • it is common that the name declared in the SimpleActionServer() is not the same as that in the SimpleActionClient(), e.g. when the .launch file contains a of the topic name.

SimpleActionClient sometimes not subscribe result topic

I posted this issue in ROS Answers, but I have not got a clear answer. I think that it is a new bug in ROS, so raising an issue here. The original post is here.

Reproduction procedure

I have a simple reproduction code here, it tries action communication in the loop. In my environment, waitForResult() will time out as a result of miss subscribe result by approximately 500 - 10000 tries. I'm running ROS Kinetic, actionlib 1.11.13, ros-comm 1.12.14, and Ubuntu 16.04.5 LTS AMD64, with kernel 4.15.0.

Possible Sources of Error

To investigate further, I checked result_pub_.getNumSubscribes() in action_server_impl.h publishResult(). The number of subscribers is one in the first execution, and the become two. When a timeout occurred, the number of subscribers on the resulting topic was decreasing. Perhaps when running in the loop, one of the subscribers is the previous subscriber and the other is the current subscriber.
I suppose it is a bug that sometimes fails to register subscriber, so maybe it will be occur not only the loop but also first execution.

Result of rostest: catkin_make run_tests

[ INFO] [1541405691.737194538]: getNumSubscribers() = 1
[ INFO] [1541405691.737274368]: setSucceeded [1]
[ INFO] [1541405692.039136920]: getNumSubscribers() = 2
[ INFO] [1541405692.039179377]: setSucceeded [2]
[ INFO] [1541405692.339483435]: getNumSubscribers() = 2
[ INFO] [1541405692.339545305]: setSucceeded [3]
...
[ INFO] [1541405847.010855785]: getNumSubscribers() = 2
[ INFO] [1541405847.010914241]: setSucceeded [511]
[ INFO] [1541405847.311017810]: getNumSubscribers() = 2
[ INFO] [1541405847.311081457]: setSucceeded [512]
[ INFO] [1541405847.611815542]: getNumSubscribers() = 1
[ INFO] [1541405847.611892230]: setSucceeded [513]
testSimpleClient ... ok

Regression introduced with 1.11.8

@dirk-thomas, @mikaelarguedas

The following snippet was released in action_client.py as part of the latest Kinetic sync, and results in a regression in python based actionlib servers. sub_queue_size defaults to None, which is immediately compared with an integer.

https://github.com/ros/actionlib/blame/indigo-devel/src/actionlib/action_client.py#L531

self.sub_queue_size = rospy.get_param('actionlib_client_sub_queue_size', None)
if self.sub_queue_size < 0:
    self.sub_queue_size = None

Results in:

    client = actionlib.SimpleActionClient('move_base_wrapper', MoveBaseAction)
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/actionlib/simple_action_client.py", line 54, in __init__
    self.action_client = ActionClient(ns, ActionSpec)
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/actionlib/action_client.py", line 532, in __init__
    if self.sub_queue_size < 0:
TypeError: unorderable types: NoneType() < int()

Datarace in SimpleActionClient if /use_sim_time is used

Hello,

I stumbled on a datarace bug in the ActionClient class when using actionlib in a Gazebo simulation (thus having /use_sim_time=true, and an external node that publishes the /clock topic).

To be able to reproduce the bug I created two simple roslaunch files here : https://github.com/1r0b1n0/actionlib_sim_time_datarace_test
On my system, more or less 1 out of 5 times starting the fibonacci_client node will fail and return immediately.

I uploaded the log of fibonacci_client here : https://github.com/1r0b1n0/actionlib_sim_time_datarace_test/blob/master/fibonacci_client_bug.log

This is what happened :

  1. fibonacci_client calls ros::init(...), /use_sim_time is true so ros will subscribe to /clock (in its internal thread)
  2. One second later fibonacci_client calls ac.waitForResult(ros::Duration(30.0))
    In SimpleActionClient::waitForResult(ros::Duration &) , we have the instruction :
    ros::Time timeout_time = ros::Time::now() + timeout; (simple_action_client:551)
    Sometimes this instruction is called when ros has not yet received the /clock topic from Gazebo, so ros::Time::isValid() is false, and ros::Time::now() will return ros::Time(0,0)
  3. some milliseconds later, ros has received its first /clock from Gazebo ( in this case /clock is at 1271.800000000), so ros::Time::now() will return ros::Time(127.8) -> SimpleActionClient will timeout and return immediately

A solution would be to call ros::Time::waitForValid() in ActionClient::waitForActionServerToStart()

Thanks,
Robin

simple action client freezes dring client object declaration.

`#include <ros/ros.h>
#include <actionlib/client/simple_action_client.h>
#include <actionlib/client/terminal_state.h>
#include <roadmap_global_planner_msgs/DoPatrolAction.h>

int main (int argc, char **argv)
{
ros::init(argc, argv, "fakee");
std::cout<<"fakee"<<std::endl;
// create the action client
// true causes the client to spin its own thread
actionlib::SimpleActionClient<roadmap_global_planner_msgs::DoPatrolAction> ac("patrol_controller", true);
std::cout<<"fakee"<<std::endl;
while(!ac.waitForServer(ros::Duration(5.0))){
ROS_INFO("Waiting for the move_base action server to come up");
}

ROS_INFO("Action server started, sending goal.");
// send a goal to the action
roadmap_global_planner_msgs::DoPatrolGoal goal;

ac.sendGoal(goal);

//wait for the action to return
bool finished_before_timeout = ac.waitForResult(ros::Duration(1.0));

if (finished_before_timeout)
{
actionlib::SimpleClientGoalState state = ac.getState();
ROS_INFO("Action finished: %s",state.toString().c_str());
}
else
ROS_INFO("Action did not finish before the time out.");

//exit
return 0;
}`

The program freezes at actionlib::SimpleActionClient<roadmap_global_planner_msgs::DoPatrolAction> ac("patrol_controller", true);

Same case for whichever client i create.

How do i solve this problem?

Actionlib reconnect problem (c++ , with test case)

(See this ROS Answers post [1]).

I'm unable to get my action clients to reconnect to their servers for more than a single request when the connection is temporarily lost (e.g. when the server node is restarted). I've tried both regular action servers/clients and the simple versions.

I've written a small test case [2] to illustrate the problem. The client checks isServerConnected every second, and if it is, it sends a goal to the server. The server rejects every goal it receives. Leave the client up, and bring the server up and down several times. After the first server restart and the first goal is sent, isServerConnected always returns false, despite both nodes being up.

I believe this is a bug in the actionlib code. If anyone can suggest a simpler test case, or any additional methods to help debug the problem, that would be great. I suppose it could also be a bug in roscpp.

I'm using ROS Groovy on Ubuntu Precise 12.04 (64-bit) with actionlib version 1.9.11-0precise-20130325-2034-+0000.

[1] http://answers.ros.org/question/70012/actionlib-reconnect-problem-c-with-test-case/
[2] http://dellin.net/box/actionlib_cpp_disconnect.tar

returned PREEMPTED or RECALLED if the system time is rolled back with NTP

[Overview]
if the system time is jumped back with NTP or other time synchronization service, actionlib client setgoal will be returned with Action finished: RECALLED. im not sure this is the design or specification for actioblib, but it should use monotonic SteadyTime.

[Reproduction Procedure]
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.5 LTS"

$ rosrun ros_tutorials_action action_server

$ rosrun ros_tutorials_action action_client
[ INFO] [1539944880.186250023]: Waiting for action server to start.
[ INFO] [1539944880.531150139]: Action server started, sending goal.
[ INFO] [1539944900.532582221]: Action finished: SUCCEEDED

[Status]
$ rostopic echo /ros_tutorial_action/result
header:
seq: 4
stamp:
secs: 1539944544
nsecs: 16475587
frame_id: ''
status:
goal_id:
stamp:
secs: 1539944544
nsecs: 16340872
id: "/action_client-1-1539944544.16340872"
status: 8
text: "This goal was canceled because another goal was recieved by the simple action server"
result:
sequence: []

ActionClient send_goal and cancel retries

I am investigating the work require to implement support for retrying send_goal and cancel requests within ActionClient. This effort is driven by the fact that the ActionServers are on separate machines using a WiFi network. The separate machines may be turned off, or the network may be interrupted and be down for a while. In both cases, when a goal or cancel request is sent from the Client to a previously-connected Server, the message is effectively "lost", but ActionClient is not aware of the loss.

At present I have a couple of options I am considering:

  1. Implement an ActionClient wrapper in which the resend logic will be implemented. The wrapper will be used by the application instead of ActionClient directly. The primary intention of the wrapper is to minimize changes to ActionLib itself.
  2. Implement the resend logic within the ActionClient itself, primarily the CommStateMachine. This path minimizes changes to the application.

In either case, the resend logic would effectively be the same, implementing a timer or event-scheduler for all ActionClients within the node to use.

I found that the C++ ActionClient offers a ClientGoalHandle resend() method, which is not offered in the Python implementation. What was this to push logic for goal resends to the application?

Any thoughts in implementing retry logic for ActionClients?

SimpleActionServer destructor uses uninitialised variable

While running valgrind on my node that involves a SimpleActionServer I got the following:

==10202== Conditional jump or move depends on uninitialised value(s)
==10202==    at 0x444B8F: actionlib::SimpleActionServer<robotcontrol::FadeTorqueAction_<std::allocator<void> > >::~SimpleActionServer() (simple_action_server_imp.h:141)
==10202==    by 0x4372A8: robotcontrol::RobotControl::~RobotControl() (robotcontrol.cpp:122)
==10202==    by 0x43025C: main (robotcontrol.cpp:679)

Even though I wasn't experiencing any problems per se I had a look into this. Indeed, execute_thread_ is not necessarily initialised in the class constructors (if no execute callback is passed) yet the destructor goes ahead and uses it:

template <class ActionSpec>
SimpleActionServer<ActionSpec>::~SimpleActionServer()
{
  if(execute_thread_)
    shutdown();
}

Changing that to if(execute_callback_ && execute_thread_) may suffice to resolve the issue.

Better introspection for goals

I am just coming across the need to be able to introspect the current state of a (simple) actionlib server. The status topic is published periodically and gives some information. Additionally I can see feedback, if provided by the server. What I am unable to introspect is what the goal message contained. I can see which goal id is served but not what the goal contained. If the actionlib clients published the goals on a latched topic one could rostopic echo at least the last goal that has been sent to the server. This might not always be the one that is currently processed by the server (e.g. when it is not a "SimpleActionServer" and processes multiple goals simultaneously), but could help in my case.
Of course I could put the goal information I need in the feedback message but I was thinking if latching the goal topic would be a more general solution. I am happy to provide a pull-request for that change if it is of interest for the community.

Action client not receiving result when server publishes too quickly

I've made a post of this in the ROS community and have not received any answers so I think this may be a bug in ROS. Here is my original post. For convenience, I have copied it here.

Important Info

  • Client hangs randomly in a call to waitForResult() (no guarantee that it will happen)

  • Hanging is influenced by placement of calls to sleep()

  • Recording the topics indicated that the hanging happens when waitForResult() is called before the
    result is published.

  • I am using Ubuntu 14.04 and ROS Indigo.

  • Inside the call to waitForResult() the client's state is active. I.e. (cur_simple_state_ == SimpleGoalState::Active)

I am debugging a problem where an action client will hang while waiting for a result from the action server. After a lot of experimenting, I've narrowed it down to some sort of synchronization issue. One, which is influenced by placing sleep statements in different locations.

In the node which sends the goal, I have the following code:

      action_client_.sendGoal(goal);
      // ros::Duration(0.5).sleep();  // Enabling this line increases the probability to hang. Though, it is random.
      ROS_INFO("Waiting for result");
      action_client_.waitForResult();
      ROS_INFO("Result received");

In the action server node, I have the following code:

      // ros::Duration(0.001).sleep();  // Enabling this line significantly decreases the likelyhood of hanging
      ROS_INFO("Sending result");
      action_server_.setSucceeded(result_);
      ROS_INFO("Result sent");

Possible Sources of Error

  • OS scheduling - The OS could be putting the client thread to sleep after (or inside) the call to sendGoal() and then the action server is able to finish before the client thread can call waitForResult()

  • Bad time stamp - The time stamp for the result message could be incorrectly set. It appears as though the time stamp is evaluated while determining if a result was received.

  • Resource deadlock - The backtrace from GDB shows that the client is waiting on a mutex. Perhaps a race condition has created a deadlock.

GDB Backtrace in Client when hanging

    #0  pthread_cond_timedwait@@GLIBC_2.3.2 ()
        at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:238
    #1  0x00007ffff71fc0e9 in bool boost::condition_variable_any::do_wait_until<boost::unique_lock<boost::mutex> >(boost::unique_lock<boost::mutex>&, timespec const&) ()
       from /home/avidbots/Dev/avidbots/ros_indigo/devel/lib/libavidbots_intra_sector_planner.so
    #2  0x00007ffff71f4403 in bool boost::condition_variable_any::timed_wait<boost::unique_lock<boost::mutex> >(boost::unique_lock<boost::mutex>&, boost::posix_time::ptime const&) ()
       from /home/avidbots/Dev/avidbots/ros_indigo/devel/lib/libavidbots_intra_sector_planner.so
    #3  0x00007ffff71e9090 in bool boost::condition_variable_any::timed_wait<boost::unique_lock<boost::mutex>, boost::date_time::subsecond_duration<boost::posix_time::time_duration, 1000l> >(boost::unique_lock<boost::mutex>&, boost::date_time::subsecond_duration<boost::posix_time::time_duration, 1000l> const&) ()
       from /home/avidbots/Dev/avidbots/ros_indigo/devel/lib/libavidbots_intra_sector_planner.so
    #4  0x00007ffff7259ddb in actionlib::SimpleActionClient<avidbots_connection_planner::ConnectionPlannerAction_<std::allocator<void> > >::waitForResult(ros::Duration const&) ()
       from /home/avidbots/Dev/avidbots/ros_indigo/devel/lib/libavidbots_intra_sector_planner.so
    ---Type <return> to continue, or q <return> to quit---

Is this a bug in ROS, or am I doing something wrong?

Can't send MoveBaseActionGoal using actionlib

Hi all,
I'm working on autonomous driving and ROS.
A high level server will send me waypoints (an array of Pose between the starting pose of the car and the desired destination), meaning that I will need to only deal with path planning between two consecutive waypoints.
I wanted to used the Action API of move base to do so, but I can't make it work. I want to use MoveBaseActionGoal, rather than MoveBaseGoal, to have the ID information, which is very relevant to my case.

Here is my code

#include <stdio.h>  
#include <stdlib.h>
#include <ros/ros.h>
#include <actionlib/client/simple_action_client.h>
#include <move_base_msgs/MoveBaseAction.h>
#include <geometry_msgs/PoseArray.h>

//Client definition
typedef actionlib::SimpleActionClient<move_base_msgs::MoveBaseAction> MoveBaseClient;

//Action Feedback and Result
typedef boost::shared_ptr< ::move_base_msgs::MoveBaseActionFeedback const > MoveBaseActionFeedbackConstPtr;
typedef boost::shared_ptr< ::move_base_msgs::MoveBaseActionResult const > MoveBaseActionResultConstPtr;

//Node Feedback and Result
typedef boost::shared_ptr< ::move_base_msgs::MoveBaseResult const > MoveBaseResultConstPtr;
typedef boost::shared_ptr< ::move_base_msgs::MoveBaseFeedback const > MoveBaseFeedbackConstPtr;


class GoalSender
{
    private:
        //Subscriber
        ros::Subscriber goals_sub_;

        //Params
        std::string goals_topic_; 
        std::string node_name;

        //Client
        MoveBaseClient MB_client;
        
        //Goal sent to Move Base
        move_base_msgs::MoveBaseActionGoal action_goal;
        move_base_msgs::MoveBaseGoal goal;

        //Goals Array received from AVCH
        geometry_msgs::PoseArray waypoints; 
        
        //Number of current goal in the waypoints array
        int index; 

        //Waypoints array size
        int max_index;

    public:
        //ROS Handle
        ros::NodeHandle nh;

        GoalSender():
        MB_client("move_base", true)
        {
            //Get Node name
            node_name = ros::this_node::getName();
            
            //Wait for server to be online
            while(!MB_client.waitForServer(ros::Duration(5.0))){
                ROS_INFO("%s: Waiting for the move_base action server to come up", node_name.c_str());
            }
            ROS_INFO("%s: Action server started", node_name.c_str());

            //Start private ros node handle to retrieve parameter
            ros::NodeHandle nh_p("~");
            
            if(nh_p.getParam("goals_topic", goals_topic_)){
                ROS_INFO("%s: Fetching goals array on %s", node_name.c_str(), goals_topic_.c_str() );
            }
            else{
                ROS_WARN("%s: No goals topic given. Defaulting to /goals_poses", node_name.c_str());
                goals_topic_ = "/goals_poses";
            }

            goals_sub_ = nh.subscribe(goals_topic_, 5, &GoalSender::goals_registering, this);
            index = 0;
            max_index = 0;
        }

        bool checkWaypoints(geometry_msgs::PoseArray waypoints){
            /***
             * TO DO 
             ***/
            return true;
        }

        //Callback function to goals array
        void goals_registering(const geometry_msgs::PoseArray::ConstPtr& msg){
            if(std::abs((msg->header.stamp - ros::Time::now()).toSec())<0.1){ //allowing 100ms old waypoints
                waypoints.header = msg->header; 
                waypoints.poses = msg->poses;

                if(!checkWaypoints(*msg)){
                    ROS_WARN("%s: Received waypoints were corrupted or undoable. No goal will be sent", node_name.c_str());
                }
                else{
                    ROS_INFO("%s: Received waypoints were correct. Proceeding to goal 1", node_name.c_str());
                    index = 0; 
                    max_index = waypoints.poses.size()-1;
                    sendGoald(waypoints.poses[0], index);

                }
            }
        }

        void sendGoald(geometry_msgs::Pose goal_pose, int index){
            ROS_DEBUG("%s: A new goal pose will be sent over the path planning node", node_name.c_str());
            ros::Time now = ros::Time::now();
            
            
            /* Fill up action goal info */
            //ID (stamp and id)
            action_goal.goal_id.stamp = now; 
            action_goal.goal_id.id = std::to_string(index);

            //Goal (geometry_msgs/PoseStamped)
            action_goal.goal.target_pose.header.frame_id = "base_link";
            action_goal.goal.target_pose.header.stamp = now;
            action_goal.goal.target_pose.pose.position.x = goal_pose.position.x;
            //action_goal.goal.target_pose.pose.position.y = goal_pose.position.y;
            action_goal.goal.target_pose.pose.orientation.w = goal_pose.orientation.w;

            //Header
            action_goal.header.stamp = now; 
            action_goal.header.frame_id = "base_link";
            goal = action_goal.goal;
            MB_client.sendGoal(goal,
                        boost::bind(&GoalSender::done, this, _1, _2),
                        boost::bind(&GoalSender::activ, this),
                        boost::bind(&GoalSender::feedback, this, _1)
            );
         }

        void done(const actionlib::SimpleClientGoalState& state,
                    const MoveBaseActionResultConstPtr& result)
        {
            ROS_INFO("%s: Finished in state [%s]", node_name.c_str(), state.toString().c_str());
            /***
              * TO DO: if goal reached, send the next one 
            ***/       
        }

        void activ(void){
             /***
              * TO DO 
            ***/ 
        }

        void feedback(const MoveBaseActionFeedbackConstPtr & feedback){
            /***
              * TO DO 
            ***/ 
        }

    
};

int main (int argc, char **argv)
{
  ros::init(argc, argv, "array_navigation_goals");
  GoalSender goalSender;
  ros::spin();
  return 0;
} 

If I send goal I can catkin_make, but if I send action_goal I get the error

no matching function for call to ....sendGoal(MoveBaseActionGoal&,...)
Candidate is void sendGoal(const Goal&, SimpleDoneCallback, SimpleActiveCallback, SimpleFeedbackCallback)

Is it by design or am I missing something?
Thank you for your help
Guillaume

Stuck waiting for server

I wrote a code that should connect to move_base but when I use ac.waitForServer(); The code just waits forever. I know move_base is an action I should be able to connect to because when pulling up rostopic list, it's there. In the picture I use while(!ac.waitForServer()){} but I've also just used ac.waitForServer(); and the same issue arises. I'm coming to believe that it is an issue with my laptop, but everything else that uses ros works. If I delete the part where it waits the robot just moves in circles, without me giving it any directions. getpose just gets a user generated position and gotopose should take that position and move the robot. All of this is running through gazebo.

screenshot from 2018-04-19 11-38-28

screenshot from 2018-04-18 19-21-36
screenshot from 2018-04-18 19-29-00

wait for server asynchronously

Right now there are two ways to wait for a connection to be established between an actionlib client and an actionlib server:

  1. client.waitForServer() / client.waitForActionServerToStart()
  2. Periodically poll client.isServerConnected() until it returns true

Option 1 is easiest but needs a separate thread to process the event queue. Option 2 can work for single threaded applications but is rather ugly and cumbersome (need a timer to get a periodic callback).

It would be nice if there was another asynchronous alternative: register a callback to be called when the server connects.

For sanities sake it would be best if the callback is also invoked if the server is already connected or if the callback can only be registered in the constructor (when the server can't be connected yet anyway). Otherwise applications might miss the event and never notice the connection.

Using a action's result

Hello together,

together with another student, we have written a action client and server by using actionlib/client/simple_action_client.h and actionlib/server/simple_action_server.h.

At the terminal we can see the result correctly.

Now we would like to use result for further activities. For this the source file of the client contains:

actionlib::SimpleActionClient<manipulator::DetectionAction>::ResultConstPtr result = *(ac.getResult())

ac is our action client, manipulator::DetectionAction is the ActionSpecs from the header file.

We have already started several attempts, but still are unsuccessful.

The compiler error is

actionlib::SimpleActionClient<manipulator::DetectionAction>::ResultConstPtr is private.

We would really appreciate, if someone could help us.

Thanks a lot!

ActionServer crash on deconstrucion

I've been able to reproduce an issue, when using the action server. When I terminate the program, the executable terminates each time with:

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error> >'
  what():  boost: mutex lock failed in pthread_mutex_lock: Invalid argument

This is the callstack:

Thread 6 (Thread 0x7f872971d700 (LWP 22968)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
No locals.
#1  0x00007f8731388bcb in ros::ROSOutAppender::logThread() () from /opt/ros/indigo/lib/libroscpp.so
No symbol table info available.
#2  0x00007f8730830a4a in ?? () from /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.54.0
No symbol table info available.
#3  0x00007f873060f182 in start_thread (arg=0x7f872971d700) at pthread_create.c:312
        __res = <optimized out>
        pd = 0x7f872971d700
        now = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140218492638976, -1329213057410763180, 0, 0, 140218492639680, 140218492638976, 1334188262192346708, 1334137537842804308}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
        not_first_call = <optimized out>
        pagesize_m1 = <optimized out>
        sp = <optimized out>
        freesize = <optimized out>
        __PRETTY_FUNCTION__ = "start_thread"
#4  0x00007f872fe2247d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
No locals.

Thread 1 (Thread 0x7f8731d4c7c0 (LWP 22964)):
#0  0x00007f872fd5ecc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
        resultvar = 0
        pid = 22964
        selftid = 22964
#1  0x00007f872fd620d8 in __GI_abort () at abort.c:89
        save_stage = 2
        act = {__sigaction_handler = {sa_handler = 0x0, sa_sigaction = 0x0}, sa_mask = {__val = {0, 32299864, 140218631443799, 140217797312517, 0, 140218603567208, 140218599664936, 140218603567208, 32299864, 32288736, 140218631472405, 140218633340832, 140218600601741, 1, 140218633343184, 32326336}}, sa_flags = 10, sa_restorer = 0x7f8731d4c7c0}
        sigs = {__val = {32, 0 <repeats 15 times>}}
#2  0x00007f8730363535 in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
No symbol table info available.
#3  0x00007f87303616d6 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
No symbol table info available.
#4  0x00007f8730360799 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
No symbol table info available.
#5  0x00007f873036134a in __gxx_personality_v0 () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
No symbol table info available.
#6  0x00007f87300fcfd3 in ?? () from /lib/x86_64-linux-gnu/libgcc_s.so.1
No symbol table info available.
#7  0x00007f87300fd4f7 in _Unwind_Resume () from /lib/x86_64-linux-gnu/libgcc_s.so.1
No symbol table info available.
#8  0x00007f8731338b29 in ros::Timer::Impl::~Impl() () from /opt/ros/indigo/lib/libroscpp.so
No symbol table info available.
#9  0x00007f873133a452 in boost::detail::sp_counted_impl_p<ros::Timer::Impl>::dispose() () from /opt/ros/indigo/lib/libroscpp.so
No symbol table info available.
#10 0x00007f8731338859 in ros::Timer::~Timer() () from /opt/ros/indigo/lib/libroscpp.so
No symbol table info available.
#11 0x00007f873191878c in actionlib::ActionServer<vigir_pluginlib_msgs::GetPluginDescriptionsAction_<std::allocator<void> > >::~ActionServer (this=0x1ed8320, __in_chrg=<optimized out>) at /opt/ros/indigo/include/actionlib/server/action_server_imp.h:116
No locals.
#12 0x00007f8731918834 in actionlib::ActionServer<vigir_pluginlib_msgs::GetPluginDescriptionsAction_<std::allocator<void> > >::~ActionServer (this=0x1ed8320, __in_chrg=<optimized out>) at /opt/ros/indigo/include/actionlib/server/action_server_imp.h:116
No locals.
#13 0x00007f873191501c in boost::checked_delete<actionlib::ActionServer<vigir_pluginlib_msgs::GetPluginDescriptionsAction_<std::allocator<void> > > > (x=0x1ed8320) at /usr/include/boost/checked_delete.hpp:34
No locals.
#14 0x00007f87319236b8 in boost::detail::sp_counted_impl_p<actionlib::ActionServer<vigir_pluginlib_msgs::GetPluginDescriptionsAction_<std::allocator<void> > > >::dispose (this=0x1ed7920) at /usr/include/boost/smart_ptr/detail/sp_counted_impl.hpp:78
No locals.
#15 0x000000000047e19c in boost::detail::sp_counted_base::release (this=0x1ed7920) at /usr/include/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp:146
No locals.
#16 0x000000000047e25f in boost::detail::shared_count::~shared_count (this=0x1ed8170, __in_chrg=<optimized out>) at /usr/include/boost/smart_ptr/detail/shared_count.hpp:371
No locals.
#17 0x00007f87318f150a in boost::shared_ptr<actionlib::ActionServer<vigir_pluginlib_msgs::GetPluginDescriptionsAction_<std::allocator<void> > > >::~shared_ptr (this=0x1ed8168, __in_chrg=<optimized out>) at /usr/include/boost/smart_ptr/shared_ptr.hpp:328
No locals.
#18 0x00007f8731918a32 in actionlib::SimpleActionServer<vigir_pluginlib_msgs::GetPluginDescriptionsAction_<std::allocator<void> > >::~SimpleActionServer (this=0x1ed80e0, __in_chrg=<optimized out>) at /opt/ros/indigo/include/actionlib/server/simple_action_server_imp.h:143
No locals.
#19 0x00007f873191526a in boost::checked_delete<actionlib::SimpleActionServer<vigir_pluginlib_msgs::GetPluginDescriptionsAction_<std::allocator<void> > > > (x=0x1ed80e0) at /usr/include/boost/checked_delete.hpp:34
No locals.
#20 0x00007f8731923656 in boost::detail::sp_counted_impl_p<actionlib::SimpleActionServer<vigir_pluginlib_msgs::GetPluginDescriptionsAction_<std::allocator<void> > > >::dispose (this=0x1ed79f0) at /usr/include/boost/smart_ptr/detail/sp_counted_impl.hpp:78
No locals.
#21 0x000000000047e19c in boost::detail::sp_counted_base::release (this=0x1ed79f0) at /usr/include/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp:146
No locals.
#22 0x000000000047e25f in boost::detail::shared_count::~shared_count (this=0x1ed44b8, __in_chrg=<optimized out>) at /usr/include/boost/smart_ptr/detail/shared_count.hpp:371
No locals.
#23 0x00007f87318ee09c in boost::shared_ptr<actionlib::SimpleActionServer<vigir_pluginlib_msgs::GetPluginDescriptionsAction_<std::allocator<void> > > >::~shared_ptr (this=0x1ed44b0, __in_chrg=<optimized out>) at /usr/include/boost/smart_ptr/shared_ptr.hpp:328
No locals.
#24 0x00007f87318e49fb in vigir_pluginlib::PluginManager::~PluginManager (this=0x1ed4430, __in_chrg=<optimized out>) at /home/alex/thor/src/vigir/vigir_pluginlib/vigir_pluginlib/src/plugin_manager.cpp:14
No locals.
#25 0x00007f8731911818 in boost::checked_delete<vigir_pluginlib::PluginManager> (x=0x1ed4430) at /usr/include/boost/checked_delete.hpp:34
No locals.
#26 0x00007f87319236fa in boost::detail::sp_counted_impl_p<vigir_pluginlib::PluginManager>::dispose (this=0x1ed2de0) at /usr/include/boost/smart_ptr/detail/sp_counted_impl.hpp:78
No locals.
#27 0x000000000047e19c in boost::detail::sp_counted_base::release (this=0x1ed2de0) at /usr/include/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp:146
No locals.
#28 0x000000000047e25f in boost::detail::shared_count::~shared_count (this=0x7f8731b6d918 <vigir_pluginlib::PluginManager::singelton+8>, __in_chrg=<optimized out>) at /usr/include/boost/smart_ptr/detail/shared_count.hpp:371
No locals.
#29 0x00007f87318ee074 in boost::shared_ptr<vigir_pluginlib::PluginManager>::~shared_ptr (this=0x7f8731b6d910 <vigir_pluginlib::PluginManager::singelton>, __in_chrg=<optimized out>) at /usr/include/boost/smart_ptr/shared_ptr.hpp:328
No locals.
#30 0x00007f872fd645ea in __cxa_finalize (d=0x7f8731b6cf90) at cxa_finalize.c:56
        check = 289
        cxafn = <optimized out>
        cxaarg = <optimized out>
        f = 0x1ec83c0
        funcs = 0x1ec80b0
#31 0x00007f87318e2173 in __do_global_dtors_aux () from /home/alex/thor/devel/lib/libvigir_pluginlib.so
No symbol table info available.
#32 0x00007ffd2e4cb300 in ?? ()
No symbol table info available.
#33 0x00007f8731b7e73a in _dl_fini () at dl-fini.c:252
        array = 0x7f8731b63740
        i = 0
        nmaps = 32647
        nloaded = <optimized out>
        i = 2
        l = 0x7f8731d8f790
        ns = 140218599884266
        maps = 0x7ffd2e4cb160
        maps_size = 140218631376784
        do_audit = 836302736
        __PRETTY_FUNCTION__ = "_dl_fini"
Backtrace stopped: frame did not save the PC

This will not happen, when I initialize the ActionServer, but not start it.

The entire code can be found here: https://github.com/team-vigir/vigir_pluginlib/blob/master/vigir_pluginlib/src/plugin_manager.cpp

I'm using Ubuntu 14.04 with Indigo.

generated headers have unused parameters

when compiling in gcc with -Wall -Wextra a file generated I get tons of warnings because of unused parameters in the files generated at the msg_gen/cpp/include/ folder

thanks

template<class ContainerAllocator> struct Serializer< ::face_detector::FaceDetectorGoal_<ContainerAllocator> >
{
  template<typename Stream, typename T> inline static void allInOne(Stream& stream, T m)
  {
  }

  ROS_DECLARE_ALLINONE_SERIALIZER;
}; // struct FaceDetectorGoal_

} // namespace serialization
} // namespace ros

namespace ros
{
namespace message_operations
{

template<class ContainerAllocator>
struct Printer< ::face_detector::FaceDetectorGoal_<ContainerAllocator> >
{
  template<typename Stream> static void stream(Stream& s, const std::string& indent, const  ::face_detector::FaceDetectorGoal_<ContainerAllocator> & v)
  {
  }
};


Feature to get a list of running action servers

Asked here. While the proposed way that uses rostopic list (thus is a bit of a hack) seems to work perfectly, I like to have a feature to do that. I wouldn't mind opening a PR but just wonder:

  • What form is the best? A command like rosaction with a list verb may sound too much, since there may not be many other things to do with rosaction command.
  • Where's the right place? This should be just determined once "what form" is resolved.

Interface with non-ROS projects.

Can actionlib be used to interface with non-ros code ? What would it take to compile a non-ros version that perhaps mimics the ros node object to pass requests to ROS pipelines such as sensors and planners ?

Segmentation Fault in Simple Action Client

I am getting a segmentation fault when getState() in the simple action client is called.
Extract from the gdb backtrace:

[Switching to Thread 0x7fff9effd700 (LWP 21180)]
0x00000000004f28b1 in boost::unique_lock<boost::recursive_mutex>::~unique_lock
    (this=<optimized out>, __in_chrg=<optimized out>)
    at /usr/include/boost/thread/lock_types.hpp:329
329           if (owns_lock())
(gdb) bt
Python Exception <class 'AttributeError'> module 'types' has no attribute 'InstanceType': 
#0  0x00000000004f28b1 in boost::unique_lock<boost::recursive_mutex>::~unique_lock (this=<optimized out>, __in_chrg=<optimized out>)
    at /usr/include/boost/thread/lock_types.hpp:329
Python Exception <class 'NameError'> Installation error: gdb.execute_unwinders function is missing: 
#1  actionlib::ClientGoalHandle<move_base_msgs::MoveBaseAction_<std::allocator<void> > >::getCommState (this=this@entry=0x7ffd58)
    at /opt/ros/kinetic/include/actionlib/client/client_goal_handle_imp.h:109
Python Exception <class 'NameError'> Installation error: gdb.execute_unwinders function is missing: 
#2  0x00000000004f38ba in actionlib::SimpleActionClient<move_base_msgs::MoveBaseAction_<std::allocator<void> > >::getState (this=0x7ffca0)
    at /opt/ros/kinetic/include/actionlib/client/simple_action_client.h:345
Python Exception <class 'NameError'> Installation error: gdb.execute_unwinders function is missing: 
#3  0x00000000004df28e in ros4rsb::NavigationServer::stop (this=0x7f7b80)
    at /media/local_ci/jenkins/jobs/ros-tobi_ros4rsb-kinetic-ci-deploy-robocup-nightly/workspace/src/servers/NavigationServer.cpp:248

The code in NavigationServer.cpp:

246 void NavigationServer::stop() {
247    ROS_INFO("call stop\n");
248    if (this->moveBaseClient->getState() == SimpleClientGoalState::ACTIVE) {
249       stopping = true;
250       moveBaseClient->cancelAllGoals();
251    } else {
252        ROS_WARN("called stop but there is no goal running? stopping velocity commander");
253        this->velocityCommander->stop();
254		usleep(500);
255
256    }
257    ROS_INFO("called stop\n");
258
259}

Race bug in Actionlib Client where Result from Server can be missed

There is a bug in the Actionlib client Goal Manager, where the result from the server can be missed, causing the client application's call to waitForResult() to fail.

A simple patch, which just moves an if-block a few lines away, has been provided in PR #64

I've opened this issue as a way to discuss this or future similar issues, and to provide a way to deterministically reproduce the bug using any Actionlib client/server pair where the server finishes and calls setSucceeded() in under 5 seconds from receiving the goal.

To reproduce, simply add the following debug spew and sleep lines to the current indigo-devel goal_manager_imp.h, re-compile the testing actionlib client, and run the server and client. The waitForResult() call in the test client will either hang indefinitely is a 0 timeout is used, or timeout without a result if >0 timeout is used.

diff --git a/include/actionlib/client/goal_manager_imp.h b/include/actionlib/client/goal_manager_imp.h
index 4df1229..709e4a8 100644
--- a/include/actionlib/client/goal_manager_imp.h
+++ b/include/actionlib/client/goal_manager_imp.h
@@ -70,6 +70,10 @@ ClientGoalHandle<ActionSpec> GoalManager<ActionSpec>::initGoal(const Goal& goal,
   typedef CommStateMachine<ActionSpec> CommStateMachineT;
   boost::shared_ptr<CommStateMachineT> comm_state_machine(new CommStateMachineT(action_goal, transition_cb, feedback_cb));
 
+  ROS_WARN("Actionlib Client has sent goal to server.  It will now sleep for 5 seconds in order to uncover bug.");
+  ros::Duration(5.0).sleep();
+  ROS_WARN("Done Sleeping.  If Actionlib server already finished and returned result, then the Result will now be missed, and the Client will fail on waitForResult()");
+
   boost::recursive_mutex::scoped_lock lock(list_mutex_);
   typename ManagedListT::Handle list_handle = list_.add(comm_state_machine, boost::bind(&GoalManagerT::listElemDeleter, this, _1), guard_);

ActionServer & ActionClient Dropped Goals

Related to #18. I'm using the underlying ActionClient and ActionServer classes to implement a multi-threaded motion planning server and I am running into issues with unacknowledged goals and handles waiting for results.

Changing the size of all publish/subscribe queues in both classes seems to alleviate the issue. Is there a standard SOP or advice for using the action interface with hundreds or thousands of goals at a given time?

Thanks

Crashing on mutex lock

Hi, my callback action server crashes a lot with the following error:

libc++abi.dylib: terminating with uncaught exception of type std::__1::system_error: mutex lock failed: Invalid argument
Abort trap: 6

So far I've established that is always crashes on cancelling an action from a callback based client. Sometimes crashes on accepting new goal (which cancels the previous one) but never upon accepting the first goal.

I'm using SimpleActionSever class. The error occurs in both terminals for client and server.

What is more, I was able to crash the Averaging Client/Server from the tutorials by running the client through a debugger. Does it suggest some timing issues?

I'm using the latest version (1.11.9) in ROS Lunar on macOS. I also get the same issues in ROS Kinetic, apt installed on Ubuntu 16.04.

Backtrace:

thread #2: tid = 0x104416, 0x00007fffc5a59bf2 libsystem_kernel.dylib__psynch_cvwait + 10 frame #0: 0x00007fffc5a59bf2 libsystem_kernel.dylib__psynch_cvwait + 10
frame #1: 0x00007fffc5b457fa libsystem_pthread.dylib_pthread_cond_wait + 712 frame #2: 0x0000000102dc6c81 libroscpp.dylibboost::condition_variable::wait(boost::unique_lockboost::mutex&) + 65
frame #3: 0x0000000102e2404c libroscpp.dylibros::ROSOutAppender::logThread() + 124 frame #4: 0x0000000103340b84 libboost_thread-mt.dylibboost::(anonymous namespace)::thread_proxy(void*) + 164
frame #5: 0x00007fffc5b4493b libsystem_pthread.dylib_pthread_body + 180 frame #6: 0x00007fffc5b44887 libsystem_pthread.dylib_pthread_start + 286
frame #7: 0x00007fffc5b4408d libsystem_pthread.dylib`thread_start + 13

  • thread #1: tid = 0x1043ff, 0x00007fffc5a59d42 libsystem_kernel.dylib`__pthread_kill + 10, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
  • frame #0: 0x00007fffc5a59d42 libsystem_kernel.dylib__pthread_kill + 10 frame #1: 0x00007fffc5b47457 libsystem_pthread.dylibpthread_kill + 90
    frame #2: 0x00007fffc59bf420 libsystem_c.dylibabort + 129 frame #3: 0x00007fffc451584a libc++abi.dylibabort_message + 266
    frame #4: 0x00007fffc453ac37 libc++abi.dylibdefault_terminate_handler() + 243 frame #5: 0x00007fffc5048713 libobjc.A.dylib_objc_terminate() + 124
    frame #6: 0x00007fffc4537d69 libc++abi.dylibstd::__terminate(void (*)()) + 8 frame #7: 0x00007fffc45377de libc++abi.dylib__cxa_throw + 121
    frame #8: 0x00007fffc4505445 libc++.1.dylibstd::__1::__throw_system_error(int, char const*) + 77 frame #9: 0x000000010338ee8e libconsole_bridge.0.3.dylibconsole_bridge::restorePreviousOutputHandler() + 26
    frame #10: 0x00007fffc59c0178 libsystem_c.dylib__cxa_finalize_ranges + 332 frame #11: 0x00007fffc59c04b2 libsystem_c.dylibexit + 55
    frame #12: 0x00007fffc592b23c libdyld.dylib`start + 8

simple_action_server.py can deadlock

From: http://answers.ros.org/question/50276/python-simpleactionserver-stops-unexpectedly-deadlock/

I wasn't able to get the python debugger to produce the stack traces that explained the problem. But after looking at the roslog debug messages and the source code, I came up with the following reconstruction of the events:

Thread A (rospy's message dispatcher?)

Deadlocked in: self.execute_condition.acquire()
In function: SimpleActionServer.internal_goal_callback() [simple_action_server.py:211] which was called from: ActionServer.internal_goal_callback() [action_server.py:293]
This thread has ActionServer.lock and wants to acquire SimpleActionServer.lock (condition variable was initialised with the latter lock).
Thread B (SimpleActionServer's executeLoop thread)

Deadlocked in: with self.action_server.lock
In function ServerGoalHandle.set_accepted() [server_goal_handle.py:71] which was called from: SimpleActionServer.accept_new_goal()[simple_action_server.py:131] which was called from: SimpleActionServer.executeLoop()[simple_action_server.py:284] which at that point is holding SimpleActionServer.lock
This thread wants ActionServer.lock and has SimpleActionServer.lock
In summary, if if a new goal arrives at the same time executeLoop is trying to get a previous (but still new, SimpleActionServer will deadlock.

I suspect the solution involves calling accept_new_goal() [simple_action_server.py:284] without holding SimpleActionServer.lock. My intuition is that simply setting a flag will do, but I will have to study the code a bit more to make sure there no side-effects.

Compilation issue in simple_action_server code

Hello,
I am building a simple_action_server for gripper_led_action. The environment details are as below:
catkin version: 2.8.3
boost version: 1.58
gcc: 5.5.0
c++11

The code is as below:

#include <ros/ros.h>
#include <actionlib/server/simple_action_server.h>
#include <robot_calibration_msgs/GripperLedCommandAction.h>

typedef actionlib::SimpleActionServer<robot_calibration_msgs::GripperLedCommandAction> led_actn_srvr_t;

class led_action
{
ros::NodeHandle nh;
led_actn_srvr_t ls;
std::string action_name;
public:
led_action(std::string name):
ls(nh, name, boost::bind(&led_action::execute_cb, this, _1), false),
action_name(name)
{
ls.start();
}
void execute_cb(const robot_calibration_msgs::GripperLedCommandActionGoalConstPtr &action)
{
}
};
int main(int argc, char** argv)
{
return 0;
}

But there are compilation issues in this, as below:

/usr/include/boost/bind/bind.hpp: In instantiation of ‘void boost::_bi::list2<A1, A2>::operator()(boost::_bi::type<void>, F&, A&, int) [with F = boost::_mfi::mf1<void, led_action, const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandActionGoal_<std::allocator<void> > >&>; A = boost::_bi::list1<const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandGoal_<std::allocator<void> > >&>; A1 = boost::_bi::value<led_action*>; A2 = boost::arg<1>]’:
/usr/include/boost/bind/bind_template.hpp:47:59:   required from ‘boost::_bi::bind_t<R, F, L>::result_type boost::_bi::bind_t<R, F, L>::operator()(const A1&) [with A1 = boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandGoal_<std::allocator<void> > >; R = void; F = boost::_mfi::mf1<void, led_action, const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandActionGoal_<std::allocator<void> > >&>; L = boost::_bi::list2<boost::_bi::value<led_action*>, boost::arg<1> >; boost::_bi::bind_t<R, F, L>::result_type = void]’
/usr/include/boost/function/function_template.hpp:159:11:   required from ‘static void boost::detail::function::void_function_obj_invoker1<FunctionObj, R, T0>::invoke(boost::detail::function::function_buffer&, T0) [with FunctionObj = boost::_bi::bind_t<void, boost::_mfi::mf1<void, led_action, const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandActionGoal_<std::allocator<void> > >&>, boost::_bi::list2<boost::_bi::value<led_action*>, boost::arg<1> > >; R = void; T0 = const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandGoal_<std::allocator<void> > >&]’
/usr/include/boost/function/function_template.hpp:940:38:   required from ‘void boost::function1<R, T1>::assign_to(Functor) [with Functor = boost::_bi::bind_t<void, boost::_mfi::mf1<void, led_action, const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandActionGoal_<std::allocator<void> > >&>, boost::_bi::list2<boost::_bi::value<led_action*>, boost::arg<1> > >; R = void; T0 = const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandGoal_<std::allocator<void> > >&]’
/usr/include/boost/function/function_template.hpp:728:7:   required from ‘boost::function1<R, T1>::function1(Functor, typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type) [with Functor = boost::_bi::bind_t<void, boost::_mfi::mf1<void, led_action, const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandActionGoal_<std::allocator<void> > >&>, boost::_bi::list2<boost::_bi::value<led_action*>, boost::arg<1> > >; R = void; T0 = const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandGoal_<std::allocator<void> > >&; typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type = int]’
/usr/include/boost/function/function_template.hpp:1077:16:   required from ‘boost::function<R(T0)>::function(Functor, typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type) [with Functor = boost::_bi::bind_t<void, boost::_mfi::mf1<void, led_action, const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandActionGoal_<std::allocator<void> > >&>, boost::_bi::list2<boost::_bi::value<led_action*>, boost::arg<1> > >; R = void; T0 = const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandGoal_<std::allocator<void> > >&; typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type = int]’
/home/saurabh/work/grobomac/yanthra_p6/src/yanthra_calibration/src/gripper_led_action_server.cpp:16:19:   required from here
/usr/include/boost/bind/bind.hpp:313:35: error: no match for call to ‘(boost::_mfi::mf1<void, led_action, const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandActionGoal_<std::allocator<void> > >&>) (led_action*&, const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandGoal_<std::allocator<void> > >&)’
         unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
                                   ^
In file included from /usr/include/boost/bind/mem_fn.hpp:215:0,
                 from /usr/include/boost/mem_fn.hpp:22,
                 from /usr/include/boost/function/detail/prologue.hpp:18,
                 from /usr/include/boost/function.hpp:24,
                 from /opt/ros/kinetic/include/ros/forwards.h:40,
                 from /opt/ros/kinetic/include/ros/common.h:37,
                 from /opt/ros/kinetic/include/ros/ros.h:43,
                 from /home/saurabh/work/grobomac/yanthra_p6/src/yanthra_calibration/src/gripper_led_action_server.cpp:2:
/usr/include/boost/bind/mem_fn_template.hpp:163:7: note: candidate: R boost::_mfi::mf1<R, T, A1>::operator()(T*, A1) const [with R = void; T = led_action; A1 = const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandActionGoal_<std::allocator<void> > >&]
     R operator()(T * p, A1 a1) const
       ^
/usr/include/boost/bind/mem_fn_template.hpp:163:7: note:   no known conversion for argument 2 from ‘const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandGoal_<std::allocator<void> > >’ to ‘const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandActionGoal_<std::allocator<void> > >&’
/usr/include/boost/bind/mem_fn_template.hpp:168:25: note: candidate: template<class U> R boost::_mfi::mf1<R, T, A1>::operator()(U&, A1) const [with U = U; R = void; T = led_action; A1 = const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandActionGoal_<std::allocator<void> > >&]
     template<class U> R operator()(U & u, A1 a1) const
                         ^
/usr/include/boost/bind/mem_fn_template.hpp:168:25: note:   template argument deduction/substitution failed:
In file included from /usr/include/boost/bind.hpp:22:0,
                 from /opt/ros/kinetic/include/ros/publisher.h:35,
                 from /opt/ros/kinetic/include/ros/node_handle.h:32,
                 from /opt/ros/kinetic/include/ros/ros.h:45,
                 from /home/saurabh/work/grobomac/yanthra_p6/src/yanthra_calibration/src/gripper_led_action_server.cpp:2:
/usr/include/boost/bind/bind.hpp:313:35: note:   cannot convert ‘(& a)->boost::_bi::list1<A1>::operator[]<const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandGoal_<std::allocator<void> > >&>(boost::_bi::storage2<A1, boost::arg<I> >::a2_<boost::_bi::value<led_action*>, 1>)’ (type ‘const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandGoal_<std::allocator<void> > >’) to type ‘const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandActionGoal_<std::allocator<void> > >&’
         unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
                                   ^
In file included from /usr/include/boost/bind/mem_fn.hpp:215:0,
                 from /usr/include/boost/mem_fn.hpp:22,
                 from /usr/include/boost/function/detail/prologue.hpp:18,
                 from /usr/include/boost/function.hpp:24,
                 from /opt/ros/kinetic/include/ros/forwards.h:40,
                 from /opt/ros/kinetic/include/ros/common.h:37,
                 from /opt/ros/kinetic/include/ros/ros.h:43,
                 from /home/saurabh/work/grobomac/yanthra_p6/src/yanthra_calibration/src/gripper_led_action_server.cpp:2:
/usr/include/boost/bind/mem_fn_template.hpp:176:25: note: candidate: template<class U> R boost::_mfi::mf1<R, T, A1>::operator()(const U&, A1) const [with U = U; R = void; T = led_action; A1 = const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandActionGoal_<std::allocator<void> > >&]
     template<class U> R operator()(U const & u, A1 a1) const
                         ^
/usr/include/boost/bind/mem_fn_template.hpp:176:25: note:   template argument deduction/substitution failed:
In file included from /usr/include/boost/bind.hpp:22:0,
                 from /opt/ros/kinetic/include/ros/publisher.h:35,
                 from /opt/ros/kinetic/include/ros/node_handle.h:32,
                 from /opt/ros/kinetic/include/ros/ros.h:45,
                 from /home/saurabh/work/grobomac/yanthra_p6/src/yanthra_calibration/src/gripper_led_action_server.cpp:2:
/usr/include/boost/bind/bind.hpp:313:35: note:   cannot convert ‘(& a)->boost::_bi::list1<A1>::operator[]<const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandGoal_<std::allocator<void> > >&>(boost::_bi::storage2<A1, boost::arg<I> >::a2_<boost::_bi::value<led_action*>, 1>)’ (type ‘const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandGoal_<std::allocator<void> > >’) to type ‘const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandActionGoal_<std::allocator<void> > >&’
         unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
                                   ^
In file included from /usr/include/boost/bind/mem_fn.hpp:215:0,
                 from /usr/include/boost/mem_fn.hpp:22,
                 from /usr/include/boost/function/detail/prologue.hpp:18,
                 from /usr/include/boost/function.hpp:24,
                 from /opt/ros/kinetic/include/ros/forwards.h:40,
                 from /opt/ros/kinetic/include/ros/common.h:37,
                 from /opt/ros/kinetic/include/ros/ros.h:43,
                 from /home/saurabh/work/grobomac/yanthra_p6/src/yanthra_calibration/src/gripper_led_action_server.cpp:2:
/usr/include/boost/bind/mem_fn_template.hpp:184:7: note: candidate: R boost::_mfi::mf1<R, T, A1>::operator()(T&, A1) const [with R = void; T = led_action; A1 = const boost::shared_ptr<const robot_calibration_msgs::GripperLedCommandActionGoal_<std::allocator<void> > >&]
     R operator()(T & t, A1 a1) const
       ^
/usr/include/boost/bind/mem_fn_template.hpp:184:7: note:   no known conversion for argument 1 from ‘led_action*’ to ‘led_action&’
yanthra_calibration/CMakeFiles/gripper_led_action_server.dir/build.make:62: recipe for target 'yanthra_calibration/CMakeFiles/gripper_led_action_server.dir/src/gripper_led_action_server.cpp.o' failed
make[2]: *** [yanthra_calibration/CMakeFiles/gripper_led_action_server.dir/src/gripper_led_action_server.cpp.o] Error 1
CMakeFiles/Makefile2:3889: recipe for target 'yanthra_calibration/CMakeFiles/gripper_led_action_server.dir/all' failed
make[1]: *** [yanthra_calibration/CMakeFiles/gripper_led_action_server.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j4 -l4" failed

There seems to be some problem with passing the callback function.
Can you please let me know what should be the problem, and how to solve it.

Saurabh

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.