Aikido
util-impl.hpp
Go to the documentation of this file.
1 #include <chrono>
2 #include <mutex>
3 
4 #include <actionlib/client/action_client.h>
5 #include <ros/callback_queue.h>
6 #include <ros/ros.h>
7 
8 namespace aikido {
9 namespace control {
10 namespace ros {
11 
12 template <class ActionSpec, class TimeoutDuration, class PeriodDuration>
14  actionlib::ActionClient<ActionSpec>& actionClient,
15  ::ros::CallbackQueue& callbackQueue,
16  TimeoutDuration timeoutDuration,
17  PeriodDuration periodDuration)
18 {
19  using Clock = std::chrono::steady_clock;
20 
21  const auto startTime = Clock::now();
22  const auto endTime = startTime + timeoutDuration;
23  auto currentTime = startTime;
24 
25  while (currentTime < endTime)
26  {
27  callbackQueue.callAvailable();
28 
29  // TODO : Is this thread safe?
30  if (actionClient.isServerConnected())
31  return true;
32 
33  currentTime += periodDuration;
34  std::this_thread::sleep_until(currentTime);
35  }
36 
37  return false;
38 }
39 
40 } // namespace ros
41 } // namespace control
42 } // namespace aikido
aikido
Format of serialized trajectory in YAML.
Definition: algorithm.hpp:4
aikido::control::ros::waitForActionServer
bool waitForActionServer(actionlib::ActionClient< ActionSpec > &actionClient, ::ros::CallbackQueue &callbackQueue, TimeoutDuration timeoutDuration, PeriodDuration periodDuration)
Definition: util-impl.hpp:13