aikido
MetaSkeletonStateSpace.hpp
1 #ifndef AIKIDO_STATESPACE_DART_METASKELETONSTATESPACE_HPP_
2 #define AIKIDO_STATESPACE_DART_METASKELETONSTATESPACE_HPP_
3 
4 #include <unordered_map>
5 
6 #include <dart/dynamics/dynamics.hpp>
7 
8 #include "aikido/common/pair.hpp"
9 #include "aikido/common/pointers.hpp"
10 #include "aikido/statespace/CartesianProduct.hpp"
11 #include "aikido/statespace/dart/JointStateSpace.hpp"
12 
13 namespace aikido {
14 namespace statespace {
15 namespace dart {
16 
17 AIKIDO_DECLARE_POINTERS(MetaSkeletonStateSpace)
18 
19 class MetaSkeletonStateSpace : public CartesianProduct
27 {
28 public:
31  class Properties
32  {
33  public:
37  explicit Properties(const ::dart::dynamics::MetaSkeleton* metaskeleton);
38 
40  const std::string& getName() const;
41 
43  std::size_t getNumJoints() const;
44 
46  std::size_t getNumDofs() const;
47 
49  const std::vector<std::string>& getDofNames() const;
50 
52  std::size_t getDofIndex(std::size_t ijoint, std::size_t ijointdof) const;
53 
55  std::size_t getDofIndex(const std::string& dofName) const;
56 
58  const Eigen::VectorXd& getPositionLowerLimits() const;
59 
61  const Eigen::VectorXd& getPositionUpperLimits() const;
62 
64  const Eigen::VectorXd& getVelocityLowerLimits() const;
65 
67  const Eigen::VectorXd& getVelocityUpperLimits() const;
68 
71  bool operator==(const Properties& otherProperties) const;
72 
75  bool operator!=(const Properties& otherProperties) const;
76 
77  protected:
79  std::string mName;
80 
82  std::size_t mNumJoints;
83 
85  std::vector<std::string> mDofNames;
86 
88  std::unordered_map<
89  std::pair<std::size_t, std::size_t>,
90  std::size_t,
93 
95  Eigen::VectorXd mPositionLowerLimits;
96 
98  Eigen::VectorXd mPositionUpperLimits;
99 
101  Eigen::VectorXd mVelocityLowerLimits;
102 
104  Eigen::VectorXd mVelocityUpperLimits;
105  };
106 
109 
113  explicit MetaSkeletonStateSpace(
114  const ::dart::dynamics::MetaSkeleton* metaskeleton);
115 
119  const Properties& getProperties() const;
120 
125  bool isCompatible(const ::dart::dynamics::MetaSkeleton* metaskeleton) const;
126 
132  void checkCompatibility(
133  const ::dart::dynamics::MetaSkeleton* metaskeleton) const;
134 
140  void checkIfContained(const ::dart::dynamics::Skeleton* skeleton) const;
141 
148  template <class Space = JointStateSpace>
149  std::shared_ptr<Space> getJointSpace(
150  const ::dart::dynamics::MetaSkeleton* _metaskeleton,
151  const ::dart::dynamics::Joint* _joint) const;
152 
158  template <class Space = JointStateSpace>
159  std::shared_ptr<const Space> getJointSpace(std::size_t _index) const;
160 
166  void convertPositionsToState(
167  const Eigen::VectorXd& _positions, State* _state) const;
168 
174  void convertStateToPositions(
175  const State* _state, Eigen::VectorXd& _positions) const;
176 
181  void getState(
182  const ::dart::dynamics::MetaSkeleton* _metaskeleton, State* _state) const;
183 
188  void setState(
189  ::dart::dynamics::MetaSkeleton* _metaskeleton, const State* _state) const;
190 
195  ScopedState getScopedStateFromMetaSkeleton(
196  const ::dart::dynamics::MetaSkeleton* _metaskeleton) const;
197 
200  ::dart::dynamics::MetaSkeletonPtr getControlledMetaSkeleton(
201  const ::dart::dynamics::SkeletonPtr& _skeleton) const;
202 
203 private:
204  Properties mProperties;
205 };
206 
207 } // namespace dart
208 } // namespace statespace
209 } // namespace aikido
210 
211 #include "detail/MetaSkeletonStateSpace-impl.hpp"
212 
213 #endif // ifndef AIKIDO_STATESPACE_DART_METASKELETONSTATESPACE_HPP_
Implements a hash function for pairs of std::hash-able types.
Definition: pair.hpp:8
std::string mName
Name of the MetaSkeleton.
Definition: MetaSkeletonStateSpace.hpp:79
CRTP RAII wrapper for a StateHandle.
Definition: ScopedState.hpp:15
Static properties from the DART MetaSkeleton.
Definition: MetaSkeletonStateSpace.hpp:31
Definition: FrameMarker.hpp:11
Eigen::VectorXd mVelocityLowerLimits
The metaskeleton&#39;s velocity lower limits.
Definition: MetaSkeletonStateSpace.hpp:101
StateSpace of a DART MetaSkeleton.
Definition: MetaSkeletonStateSpace.hpp:26
Format of serialized trajectory in YAML.
Definition: algorithm.hpp:4
Eigen::VectorXd mPositionUpperLimits
The metaskeleton&#39;s position upper limits.
Definition: MetaSkeletonStateSpace.hpp:98
Eigen::VectorXd mPositionLowerLimits
The metaskeleton&#39;s position lower limits.
Definition: MetaSkeletonStateSpace.hpp:95
A tuple of states where the i-th state is from the i-th subspace.
Definition: CartesianProduct.hpp:162
std::unordered_map< std::pair< std::size_t, std::size_t >, std::size_t, aikido::common::PairHash > mIndexMap
Mapping from Joint index and Joint DOF index to MetaSkeleton DOF index.
Definition: MetaSkeletonStateSpace.hpp:92
Eigen::VectorXd mVelocityUpperLimits
The metaskeleton&#39;s velocity upper limits.
Definition: MetaSkeletonStateSpace.hpp:104
std::size_t mNumJoints
Number of joints in the MetaSkeleton.
Definition: MetaSkeletonStateSpace.hpp:82
std::vector< std::string > mDofNames
Names of DOFs in the MetaSkeleton.
Definition: MetaSkeletonStateSpace.hpp:85