Aikido
JacobianExecutor.hpp
Go to the documentation of this file.
1 #ifndef AIKIDO_CONTROL_JACOBIANEXECUTOR_HPP_
2 #define AIKIDO_CONTROL_JACOBIANEXECUTOR_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 
19 template <ExecutorType T>
21 {
22 public:
23  static constexpr size_t SE3_SIZE = 6;
24  static constexpr double DEFAULT_LAMBDA = 1E-8;
25 
32  explicit JacobianExecutor(
33  ::dart::dynamics::BodyNode* eeNode,
34  std::shared_ptr<JointCommandExecutor<T>> executor = nullptr,
35  double lambda = DEFAULT_LAMBDA);
36 
37  virtual ~JacobianExecutor();
38 
44  virtual std::future<int> execute(
45  const Eigen::Vector6d command,
46  const std::chrono::duration<double>& timeout
47  = std::chrono::duration<double>(1))
48  {
49  return this->execute(command, timeout, std::chrono::system_clock::now());
50  }
51  virtual std::future<int> execute(
52  const Eigen::Vector6d command,
53  const std::chrono::duration<double>& timeout,
54  const std::chrono::system_clock::time_point& timepoint);
55 
60  virtual std::future<int> execute(
61  const std::vector<double>& command,
62  const std::chrono::duration<double>& timeout
63  = std::chrono::duration<double>(1))
64  {
65  return this->execute(command, timeout, std::chrono::system_clock::now());
66  }
67  virtual std::future<int> execute(
68  const std::vector<double>& command,
69  const std::chrono::duration<double>& timeout,
70  const std::chrono::system_clock::time_point& timepoint);
71 
77  void step(const std::chrono::system_clock::time_point& timepoint) override;
78 
80  void cancel();
81 
82 private:
84  std::vector<double> SE3ToJoint(const Eigen::Vector6d command);
85 
87  ::dart::dynamics::BodyNode* mEENode;
88 
90  std::shared_ptr<JointCommandExecutor<T>> mExecutor;
91 
93  Eigen::Vector6d mCommand;
94 
96  double mLambda;
97 
100 
102  std::unique_ptr<std::promise<int>> mPromise;
103 
105  mutable std::mutex mMutex;
106 
108  std::chrono::system_clock::time_point mExecutionStartTime;
109 
111  std::chrono::duration<double> mTimeout;
112 
114  std::future<int> mFuture;
115 };
116 
117 // Define common template arguments
120 // Note: No position, as jacobian should only be used with derivatives.
121 
122 // Define constexprs (required for linking)
123 template <ExecutorType T>
124 constexpr size_t JacobianExecutor<T>::SE3_SIZE;
125 template <ExecutorType T>
126 constexpr double JacobianExecutor<T>::DEFAULT_LAMBDA;
127 
128 } // namespace control
129 } // namespace aikido
130 
132 
133 #endif
aikido::control::JointCommandExecutor
Abstract class for executing a command of a single type on a group of joints.
Definition: JointCommandExecutor.hpp:21
aikido::control::JacobianExecutor::mTimeout
std::chrono::duration< double > mTimeout
Velocity timeout.
Definition: JacobianExecutor.hpp:111
util.hpp
aikido::control::JacobianExecutor::~JacobianExecutor
virtual ~JacobianExecutor()
Definition: JacobianExecutor-impl.hpp:48
aikido
Format of serialized trajectory in YAML.
Definition: algorithm.hpp:4
JacobianExecutor-impl.hpp
aikido::control::JacobianExecutor::mExecutionStartTime
std::chrono::system_clock::time_point mExecutionStartTime
Time of command start.
Definition: JacobianExecutor.hpp:108
aikido::control::JacobianExecutor::mMutex
std::mutex mMutex
Manages access to mCommand, mInProgress, mPromise.
Definition: JacobianExecutor.hpp:105
aikido::control::JacobianExecutor::JacobianExecutor
JacobianExecutor(::dart::dynamics::BodyNode *eeNode, std::shared_ptr< JointCommandExecutor< T >> executor=nullptr, double lambda=DEFAULT_LAMBDA)
Constructor.
Definition: JacobianExecutor-impl.hpp:19
aikido::control::JacobianExecutor::execute
virtual std::future< int > execute(const std::vector< double > &command, const std::chrono::duration< double > &timeout=std::chrono::duration< double >(1))
Execute a Joint Command, setting future upon completion.
Definition: JacobianExecutor.hpp:60
aikido::control::JacobianExecutor::execute
virtual std::future< int > execute(const Eigen::Vector6d command, const std::chrono::duration< double > &timeout=std::chrono::duration< double >(1))
Execute an SE3 Command, setting future upon completion.
Definition: JacobianExecutor.hpp:44
Executor.hpp
JointCommandExecutor.hpp
aikido::control::JacobianExecutor::cancel
void cancel()
Cancels the current command.
Definition: JacobianExecutor-impl.hpp:216
aikido::control::JacobianExecutor
Executes end-effector SE3 command.
Definition: JacobianExecutor.hpp:20
aikido::control::JacobianExecutor::mPromise
std::unique_ptr< std::promise< int > > mPromise
Promise whose future is returned by execute()
Definition: JacobianExecutor.hpp:102
aikido::control::JacobianExecutor::mInProgress
bool mInProgress
Whether a command is being executed.
Definition: JacobianExecutor.hpp:99
aikido::control::JacobianExecutor::mFuture
std::future< int > mFuture
Future for underlying executor call.
Definition: JacobianExecutor.hpp:114
aikido::control::JacobianExecutor::DEFAULT_LAMBDA
static constexpr double DEFAULT_LAMBDA
Definition: JacobianExecutor.hpp:24
aikido::control::JacobianExecutor::mExecutor
std::shared_ptr< JointCommandExecutor< T > > mExecutor
Underlying Joint Command Executor.
Definition: JacobianExecutor.hpp:90
aikido::control::JacobianExecutor::mCommand
Eigen::Vector6d mCommand
Command being executed (6d)
Definition: JacobianExecutor.hpp:93
aikido::control::JacobianExecutor::SE3_SIZE
static constexpr size_t SE3_SIZE
Definition: JacobianExecutor.hpp:23
aikido::control::JacobianExecutor::mLambda
double mLambda
Jacobian damping factor.
Definition: JacobianExecutor.hpp:96
aikido::control::JacobianExecutor::step
void step(const std::chrono::system_clock::time_point &timepoint) override
Step to a point in time.
Definition: JacobianExecutor-impl.hpp:139
aikido::control::JacobianExecutor::mEENode
::dart::dynamics::BodyNode * mEENode
End Effector Body Node Name.
Definition: JacobianExecutor.hpp:87
aikido::control::JacobianExecutor::SE3ToJoint
std::vector< double > SE3ToJoint(const Eigen::Vector6d command)
Convert SE3 command to joint command.
Definition: JacobianExecutor-impl.hpp:99