Aikido
SO3.hpp
Go to the documentation of this file.
1 #ifndef AIKIDO_STATESPACE_SO3STATESPACE_HPP_
2 #define AIKIDO_STATESPACE_SO3STATESPACE_HPP_
3 #include <Eigen/Geometry>
4 
7 
8 namespace aikido {
9 namespace statespace {
10 
11 // Defined in detail/SO3-impl.hpp
12 template <class>
13 class SO3StateHandle;
14 
17 class SO3 : virtual public StateSpace
18 {
19 public:
21  class State : public StateSpace::State
22  {
23  public:
24  using Quaternion = Eigen::Quaternion<double, Eigen::DontAlign>;
25 
27  State();
28 
29  ~State() = default;
30 
34  explicit State(const Quaternion& _quaternion);
35 
39  const Quaternion& getQuaternion() const;
40 
44  void setQuaternion(const Quaternion& _quaternion);
45 
46  private:
48 
49  friend class SO3;
50  };
51 
54 
57 
58  using StateSpace::compose;
59 
61 
63  SO3() = default;
64 
68  ScopedState createState() const;
69 
71  ScopedState cloneState(const StateSpace::State* stateIn) const;
72 
77  const Quaternion& getQuaternion(const State* _state) const;
78 
83  void setQuaternion(State* _state, const Quaternion& _quaternion) const;
84 
85  // Documentation inherited.
86  std::size_t getStateSizeInBytes() const override;
87 
88  // Documentation inherited.
89  StateSpace::State* allocateStateInBuffer(void* _buffer) const override;
90 
91  // Documentation inherited.
92  void freeStateInBuffer(StateSpace::State* _state) const override;
93 
94  // Documentation inherited.
95  void compose(
96  const StateSpace::State* _state1,
97  const StateSpace::State* _state2,
98  StateSpace::State* _out) const override;
99 
100  // Documentation inherited
101  void getIdentity(StateSpace::State* _out) const override;
102 
103  // Documentation inherited
104  void getInverse(
105  const StateSpace::State* _in, StateSpace::State* _out) const override;
106 
107  // Documentation inherited
108  std::size_t getDimension() const override;
109 
110  // Documentation inherited
111  void copyState(
112  const StateSpace::State* _source,
113  StateSpace::State* _destination) const override;
114 
120  void expMap(
121  const Eigen::VectorXd& _tangent, StateSpace::State* _out) const override;
122 
128  void logMap(
129  const StateSpace::State* _in, Eigen::VectorXd& _tangent) const override;
130 
133  void print(const StateSpace::State* _state, std::ostream& _os) const override;
134 };
135 
136 } // namespace statespace
137 } // namespace aikido
138 
139 #include "detail/SO3-impl.hpp"
140 
141 #endif // ifndef AIKIDO_STATESPACE_SO3STATESPACE_HPP_
aikido::statespace::SO3::getQuaternion
const Quaternion & getQuaternion(const State *_state) const
Gets a state as a unit quaternion.
aikido::statespace::SO3::logMap
void logMap(const StateSpace::State *_in, Eigen::VectorXd &_tangent) const override
Log mapping of Lie group element to a Lie algebra element.
aikido::statespace::SO3::State::State
State()
Constructs the identity element.
aikido::statespace::SO3::SO3
SO3()=default
Constructs a state space representing SO(3).
aikido::statespace::SO3::Quaternion
State::Quaternion Quaternion
Definition: SO3.hpp:60
aikido
Format of serialized trajectory in YAML.
Definition: algorithm.hpp:4
aikido::statespace::SO3::State
State in SO(3), a spatial rotation.
Definition: SO3.hpp:21
aikido::statespace::SO3
The two-dimensional special orthogonal group SO(3), i.e.
Definition: SO3.hpp:17
aikido::statespace::SO3StateHandle
StateHandle for a SO3.
Definition: SO3-impl.hpp:9
aikido::statespace::SO3::getDimension
std::size_t getDimension() const override
Get the dimension of this Lie group.
StateSpace.hpp
aikido::statespace::SO3::State::getQuaternion
const Quaternion & getQuaternion() const
Gets a state as a unit quaternion.
aikido::statespace::SO3::getIdentity
void getIdentity(StateSpace::State *_out) const override
Gets the identity element for this Lie group, such that:
aikido::statespace::SO3::copyState
void copyState(const StateSpace::State *_source, StateSpace::State *_destination) const override
Copy a state.
aikido::statespace::SO3::cloneState
ScopedState cloneState(const StateSpace::State *stateIn) const
Creates an identical clone of stateIn.
aikido::statespace::SO3::setQuaternion
void setQuaternion(State *_state, const Quaternion &_quaternion) const
Sets a state to a unit quaternion.
aikido::statespace::SO3::compose
void compose(const StateSpace::State *_state1, const StateSpace::State *_state2, StateSpace::State *_out) const override
Lie group operation for this StateSpace.
aikido::statespace::SO3::getInverse
void getInverse(const StateSpace::State *_in, StateSpace::State *_out) const override
Gets the inverse of _in in this Lie group, such that:
aikido::statespace::SO3::State::~State
~State()=default
aikido::statespace::SO3::expMap
void expMap(const Eigen::VectorXd &_tangent, StateSpace::State *_out) const override
Exponential mapping of Lie algebra element to a Lie group element.
aikido::statespace::SO3::getStateSizeInBytes
std::size_t getStateSizeInBytes() const override
Gets the size of a State, in bytes.
aikido::statespace::StateSpace
Represents a Lie group and its associated Lie algebra, i.e.
Definition: StateSpace.hpp:33
aikido::statespace::SO3::freeStateInBuffer
void freeStateInBuffer(StateSpace::State *_state) const override
Free a state previously created by allocateStateInBuffer.
SO3-impl.hpp
aikido::statespace::ScopedState< StateHandle >
aikido::statespace::StateSpace::compose
virtual void compose(const State *_state1, const State *_state2, State *_out) const =0
Lie group operation for this StateSpace.
aikido::statespace::SO3::print
void print(const StateSpace::State *_state, std::ostream &_os) const override
Print the quaternion represented by the state.
aikido::statespace::SO3::allocateStateInBuffer
StateSpace::State * allocateStateInBuffer(void *_buffer) const override
Create a new state in a pre-allocated buffer.
aikido::statespace::SO3::State::setQuaternion
void setQuaternion(const Quaternion &_quaternion)
Sets a state to a unit quaternion.
aikido::statespace::StateSpace::State
Definition: StateSpace.hpp:167
aikido::statespace::SO3::createState
ScopedState createState() const
Helper function to create a ScopedState.
aikido::statespace::SO3::State::Quaternion
Eigen::Quaternion< double, Eigen::DontAlign > Quaternion
Definition: SO3.hpp:24
ScopedState.hpp
aikido::statespace::SO3::State::mValue
Quaternion mValue
Definition: SO3.hpp:47