1#include "state_representation/space/dual_quaternion/DualQuaternionState.hpp"
14 primary(state.primary),
18 const Eigen::Quaterniond& primary,
19 const Eigen::Quaterniond& dual,
20 const std::string& reference) :
28 Eigen::Quaterniond dual =
50 this->State::initialize();
51 this->primary = Eigen::Quaterniond::Identity();
52 this->dual = Eigen::Quaterniond(0, 0, 0, 0);
57 result.
set_primary(Eigen::Quaterniond(lambda * state.get_primary().coeffs()));
58 result.
set_dual(Eigen::Quaterniond(lambda * state.get_dual().coeffs()));
64 Eigen::Quaterniond pexps;
65 if (state.get_primary().norm() > 1e-5) {
67 coeffs = (sin(state.get_primary().norm()) / state.get_primary().norm()) * state.get_primary().coeffs();
69 pexps = Eigen::Quaterniond(coeffs(3) + cos(state.get_primary().norm()), coeffs(0), coeffs(1), coeffs(2));
71 pexps = Eigen::Quaterniond::Identity();
74 result.
set_dual(state.get_dual() * pexps);
84 if (state.is_empty()) {
85 os <<
"Empty DualQuaternionState";
87 os << state.get_name() <<
" DualQuaternionState expressed in " << state.get_reference_frame() <<
" frame"
89 os <<
"primary: (" << state.primary.w() <<
", ";
90 os << state.primary.x() <<
", ";
91 os << state.primary.y() <<
", ";
92 os << state.primary.z() <<
")" << std::endl;
93 os <<
"dual: (" << state.dual.w() <<
", ";
94 os << state.dual.x() <<
", ";
95 os << state.dual.y() <<
", ";
96 os << state.dual.z() <<
")";
Class to represent a state in Dual Quaternion space.
const Eigen::Quaterniond & get_dual() const
Getter of the dual attribute.
const Eigen::Quaterniond & get_primary() const
Getter of the primary attribute.
void set_primary(const Eigen::Quaterniond &primary)
Setter of the primary attribute.
void set_dual(const Eigen::Quaterniond &dual)
Setter of the dual attribute.
DualQuaternionState & operator*=(const DualQuaternionState &q)
Overload the *= operator.
const DualQuaternionState copy() const
Return a copy of the DualQuaternionState.
virtual void initialize()
Initialize the DualQuaternionState to a zero value.
friend const DualQuaternionState operator*(const float &lambda, const DualQuaternionState &state)
Overload the * operator with a scalar.
DualQuaternionState()
Empty constructor.
const DualQuaternionState conjugate() const
compute the conjugate of the current DualQuaternion
const std::string & get_name() const
Getter of the name attribute.
virtual void set_name(const std::string &name)
Setter of the name attribute.
Core state variables and objects.
std::ostream & operator<<(std::ostream &os, const AnalogIOState &state)
const DualQuaternionState exp(const DualQuaternionState &state)
StateType
The class types inheriting from State.
CartesianAcceleration operator*(double lambda, const CartesianAcceleration &acceleration)