Aikido
VisualServoingVelocityExecutor.hpp
Go to the documentation of this file.
1 #ifndef AIKIDO_CONTROL_VISUALSERVOINGVELOCITYEXECUTOR_HPP_
2 #define AIKIDO_CONTROL_VISUALSERVOINGVELOCITYEXECUTOR_HPP_
3 
4 #include <future>
5 #include <mutex>
6 
7 #include <dart/dynamics/Skeleton.hpp>
8 
11 #include "aikido/control/util.hpp"
12 
13 namespace aikido {
14 namespace control {
15 
22 {
23 public:
25  struct Properties
26  {
27  static constexpr double DEFAULT_GOAL_TOLERANCE = 0.01; // m
28  static constexpr double DEFAULT_APPROACH_VEL = 0.05; // m/s
29  static constexpr double DEFAULT_TIMEOUT = 0.5; // s
30  static constexpr long DEFAULT_THREAD_PERIOD = 10L; // ms
40  double goalTolerance = DEFAULT_GOAL_TOLERANCE,
41  double approachVelocity = DEFAULT_APPROACH_VEL,
42  std::chrono::duration<double> timeout
43  = std::chrono::duration<double>(DEFAULT_TIMEOUT),
44  std::chrono::milliseconds threadPeriod
45  = std::chrono::milliseconds(DEFAULT_THREAD_PERIOD))
46  : mGoalTolerance(goalTolerance)
47  , mApproachVelocity(approachVelocity)
48  , mTimeout(timeout)
49  , mThreadPeriod(threadPeriod){
50  // Do nothing
51  };
52 
53  double mGoalTolerance;
55  std::chrono::duration<double> mTimeout;
56  std::chrono::milliseconds mThreadPeriod;
57  };
58 
67  ::dart::dynamics::BodyNode* eeNode,
68  std::shared_ptr<JacobianVelocityExecutor> executor = nullptr,
69  Properties properties = Properties());
70 
72 
74  void resetProperties(Properties properties = Properties());
75 
77  Properties getProperties() const;
78 
83  virtual std::future<int> execute(
84  std::function<std::shared_ptr<Eigen::Isometry3d>(void)> perception)
85  {
86  return this->execute(perception, std::chrono::system_clock::now());
87  }
88  virtual std::future<int> execute(
89  std::function<std::shared_ptr<Eigen::Isometry3d>(void)> perception,
90  const std::chrono::system_clock::time_point& timepoint);
91 
97  void step(const std::chrono::system_clock::time_point& timepoint) override;
98 
100  void cancel();
101 
102 private:
104  ::dart::dynamics::BodyNode* mEENode;
105 
107  std::shared_ptr<JacobianVelocityExecutor> mExecutor;
108 
110  std::function<std::shared_ptr<Eigen::Isometry3d>(void)> mPerception;
111 
113  std::unique_ptr<std::promise<int>> mPromise;
114 
116  mutable std::mutex mMutex;
117 
120 
122  std::future<int> mFuture;
123 
125  std::chrono::system_clock::time_point mLastPerceivedTime;
126 };
127 
128 } // namespace control
129 } // namespace aikido
130 
131 #endif
aikido::control::VisualServoingVelocityExecutor::mLastPerceivedTime
std::chrono::system_clock::time_point mLastPerceivedTime
Time of command start.
Definition: VisualServoingVelocityExecutor.hpp:125
aikido::control::VisualServoingVelocityExecutor::Properties::Properties
Properties(double goalTolerance=DEFAULT_GOAL_TOLERANCE, double approachVelocity=DEFAULT_APPROACH_VEL, std::chrono::duration< double > timeout=std::chrono::duration< double >(DEFAULT_TIMEOUT), std::chrono::milliseconds threadPeriod=std::chrono::milliseconds(DEFAULT_THREAD_PERIOD))
Struct Constructor.
Definition: VisualServoingVelocityExecutor.hpp:39
aikido::control::VisualServoingVelocityExecutor::mExecutor
std::shared_ptr< JacobianVelocityExecutor > mExecutor
Underlying JacobianVelocityExecutor.
Definition: VisualServoingVelocityExecutor.hpp:107
aikido::control::VisualServoingVelocityExecutor::resetProperties
void resetProperties(Properties properties=Properties())
Cancel current command and update properties.
aikido::control::VisualServoingVelocityExecutor::Properties
Paramters for Vector Field Planner.
Definition: VisualServoingVelocityExecutor.hpp:25
util.hpp
aikido::control::VisualServoingVelocityExecutor::Properties::mApproachVelocity
double mApproachVelocity
Definition: VisualServoingVelocityExecutor.hpp:54
aikido
Format of serialized trajectory in YAML.
Definition: algorithm.hpp:4
aikido::control::VisualServoingVelocityExecutor::Properties::DEFAULT_GOAL_TOLERANCE
static constexpr double DEFAULT_GOAL_TOLERANCE
Definition: VisualServoingVelocityExecutor.hpp:27
aikido::control::VisualServoingVelocityExecutor::Properties::mTimeout
std::chrono::duration< double > mTimeout
Definition: VisualServoingVelocityExecutor.hpp:55
aikido::control::VisualServoingVelocityExecutor::Properties::mGoalTolerance
double mGoalTolerance
Definition: VisualServoingVelocityExecutor.hpp:51
JacobianExecutor.hpp
Executor.hpp
aikido::control::VisualServoingVelocityExecutor::mFuture
std::future< int > mFuture
Future for underlying executor call.
Definition: VisualServoingVelocityExecutor.hpp:122
aikido::control::VisualServoingVelocityExecutor::getProperties
Properties getProperties() const
Get current properties.
aikido::control::VisualServoingVelocityExecutor::Properties::DEFAULT_APPROACH_VEL
static constexpr double DEFAULT_APPROACH_VEL
Definition: VisualServoingVelocityExecutor.hpp:28
aikido::control::VisualServoingVelocityExecutor::mPromise
std::unique_ptr< std::promise< int > > mPromise
Promise whose future is returned by execute()
Definition: VisualServoingVelocityExecutor.hpp:113
aikido::control::VisualServoingVelocityExecutor::step
void step(const std::chrono::system_clock::time_point &timepoint) override
Step to a point in time.
aikido::control::VisualServoingVelocityExecutor::~VisualServoingVelocityExecutor
virtual ~VisualServoingVelocityExecutor()
aikido::control::VisualServoingVelocityExecutor::mProperties
Properties mProperties
Properties (see documentation above)
Definition: VisualServoingVelocityExecutor.hpp:119
aikido::control::VisualServoingVelocityExecutor::mPerception
std::function< std::shared_ptr< Eigen::Isometry3d >void)> mPerception
Perception Function (if empty, then executor not in progress)
Definition: VisualServoingVelocityExecutor.hpp:110
aikido::control::VisualServoingVelocityExecutor
Executes end-effector R3 linear velocity command towards a perceived target Uses underlying JacobianV...
Definition: VisualServoingVelocityExecutor.hpp:21
aikido::control::VisualServoingVelocityExecutor::Properties::DEFAULT_TIMEOUT
static constexpr double DEFAULT_TIMEOUT
Definition: VisualServoingVelocityExecutor.hpp:29
aikido::control::VisualServoingVelocityExecutor::mEENode
::dart::dynamics::BodyNode * mEENode
End Effector Body Node Name.
Definition: VisualServoingVelocityExecutor.hpp:104
aikido::control::VisualServoingVelocityExecutor::VisualServoingVelocityExecutor
VisualServoingVelocityExecutor(::dart::dynamics::BodyNode *eeNode, std::shared_ptr< JacobianVelocityExecutor > executor=nullptr, Properties properties=Properties())
Constructor.
aikido::control::VisualServoingVelocityExecutor::Properties::mThreadPeriod
std::chrono::milliseconds mThreadPeriod
Definition: VisualServoingVelocityExecutor.hpp:56
aikido::control::Executor
Abstract class for executing commands on degrees of freedom.
Definition: Executor.hpp:50
aikido::control::VisualServoingVelocityExecutor::execute
virtual std::future< int > execute(std::function< std::shared_ptr< Eigen::Isometry3d >(void)> perception)
Execute a Visual Servoing Command, setting future upon completion.
Definition: VisualServoingVelocityExecutor.hpp:83
aikido::control::VisualServoingVelocityExecutor::cancel
void cancel()
Cancels the current command.
aikido::control::VisualServoingVelocityExecutor::mMutex
std::mutex mMutex
Manages access to mPerception, mPromise.
Definition: VisualServoingVelocityExecutor.hpp:116
aikido::control::VisualServoingVelocityExecutor::Properties::DEFAULT_THREAD_PERIOD
static constexpr long DEFAULT_THREAD_PERIOD
Definition: VisualServoingVelocityExecutor.hpp:30