queued_action_server.h
Go to the documentation of this file.
1 /*********************************************************************
2  *
3  * Software License Agreement (BSD License)
4  *
5  * Copyright (c) 2020, Ubiquity Robotics, Inc.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * * Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  * * Redistributions in binary form must reproduce the above
15  * copyright notice, this list of conditions and the following
16  * disclaimer in the documentation and/or other materials provided
17  * with the distribution.
18  * * Neither the name of Ubiquity Robotics, Inc. nor the names of its
19  * contributors may be used to endorse or promote products derived
20  * from this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33  * POSSIBILITY OF SUCH DAMAGE.
34  *
35  *********************************************************************/
36 #ifndef QUEUED_ACTION_SERVER_H_
37 #define QUEUED_ACTION_SERVER_H_
38 
41 #include <ros/ros.h>
42 
43 #include <condition_variable>
44 #include <string>
45 #include <thread>
46 #include <atomic>
47 #include <mutex>
48 
49 namespace actionlib {
50 template <class ActionSpec>
52 public:
53  // Generates typedefs that we'll use to make our lives easier
54  ACTION_DEFINITION(ActionSpec);
55 
56  // More useful typedefs
58  typedef boost::function<void(const GoalConstPtr &)> ExecuteCallback;
59 
60  QueuedActionServer(std::string name, ExecuteCallback execute_callback);
61  QueuedActionServer(ros::NodeHandle n, std::string name, ExecuteCallback execute_callback);
63 
65  bool isNewGoalAvailable();
66  bool isPreemptRequested();
67  bool isActive();
68  void setSucceeded(const Result &result = Result(), const std::string &text = std::string(""));
69  void setAborted(const Result &result = Result(), const std::string &text = std::string(""));
70  void setPreempted(const Result &result = Result(), const std::string &text = std::string(""));
71  void start();
72  void shutdown();
73 
74 private:
75  void goalCallback(GoalHandle preempt);
76  void preemptCallback(GoalHandle preempt);
77 
78  void executeLoop();
79 
81 
82  std::shared_ptr<ActionServer<ActionSpec>> as;
83 
84  GoalHandle current_goal, next_goal;
85 
87 
88  std::recursive_mutex lock;
89 
90  ExecuteCallback execute_callback;
91  std::condition_variable_any execute_condition;
92  std::thread *execute_thread;
93 
94  std::atomic<bool> need_to_terminate;
95 };
96 
97 } // namespace actionlib
98 
99 // include the implementation here
101 #endif
void setPreempted(const Result &result=Result(), const std::string &text=std::string(""))
std::condition_variable_any execute_condition
std::atomic< bool > need_to_terminate
void goalCallback(GoalHandle preempt)
std::shared_ptr< ActionServer< ActionSpec > > as
QueuedActionServer(std::string name, ExecuteCallback execute_callback)
void setSucceeded(const Result &result=Result(), const std::string &text=std::string(""))
boost::shared_ptr< const Goal > acceptNewGoal()
void setAborted(const Result &result=Result(), const std::string &text=std::string(""))
void preemptCallback(GoalHandle preempt)
boost::function< void(const GoalConstPtr &)> ExecuteCallback
ActionServer< ActionSpec >::GoalHandle GoalHandle


move_basic
Author(s): Jim Vaughan
autogenerated on Fri Mar 26 2021 02:46:58