22 #ifndef _QUATERNION_HH_
23 #define _QUATERNION_HH_
55 public:
Quaternion(
const double &_w,
const double &_x,
const double &_y,
62 public:
Quaternion(
const double &_roll,
const double &_pitch,
86 public:
void Invert();
93 Quaternion q(this->w, this->x, this->y, this->z);
96 s = q.
w * q.
w + q.
x * q.
x + q.
y * q.
y + q.
z * q.
z;
118 public:
void SetToIdentity();
129 public:
void Normalize();
136 public:
void SetFromAxis(
double _x,
double _y,
double _z,
double _a);
141 public:
void SetFromAxis(
const Vector3 &_axis,
double _a);
148 public:
void Set(
double _u,
double _x,
double _y,
double _z);
153 public:
void SetFromEuler(
const Vector3 &_vec);
159 public:
void SetFromEuler(
double _roll,
double _pitch,
double _yaw);
163 public:
Vector3 GetAsEuler()
const;
173 public:
static Quaternion EulerToQuaternion(
double _x,
179 public:
double GetRoll();
183 public:
double GetPitch();
187 public:
double GetYaw();
192 public:
void GetAsAxis(
Vector3 &_axis,
double &_angle)
const;
196 public:
void Scale(
double _scale);
224 this->w*_q.
w - this->x*_q.
x - this->y*_q.
y - this->z*_q.
z,
225 this->w*_q.
x + this->x*_q.
w + this->y*_q.
z - this->z*_q.
y,
226 this->w*_q.
y - this->x*_q.
z + this->y*_q.
w + this->z*_q.
x,
227 this->w*_q.
z + this->x*_q.
y - this->y*_q.
x + this->z*_q.
w);
233 public:
Quaternion operator*(
const double &_f)
const;
247 public:
bool operator ==(
const Quaternion &_qt)
const;
252 public:
bool operator!=(
const Quaternion &_qt)
const;
264 tmp = (*this) * (tmp * this->GetInverse());
275 public:
bool IsFinite()
const;
280 if (!std::isfinite(this->x))
282 if (!std::isfinite(this->y))
284 if (!std::isfinite(this->z))
286 if (!std::isfinite(this->w))
299 public:
Matrix3 GetAsMatrix3()
const;
303 public:
Matrix4 GetAsMatrix4()
const;
307 public:
Vector3 GetXAxis()
const;
311 public:
Vector3 GetYAxis()
const;
315 public:
Vector3 GetZAxis()
const;
319 public:
void Round(
int _precision);
324 public:
double Dot(
const Quaternion &_q)
const;
337 const Quaternion &_rkQ,
bool _shortestPath =
false);
347 const Quaternion &_rkQ,
bool _shortestPath =
false);
382 Angle roll, pitch, yaw;
385 _in.setf(std::ios_base::skipws);
386 _in >> roll >> pitch >> yaw;
double z
Attributes of the quaternion.
Definition: Quaternion.hh:360
The Vector3 class represents the generic vector containing 3 elements.
Definition: Vector3.hh:43
A 3x3 matrix class.
Definition: Matrix4.hh:39
double x
X location.
Definition: Vector3.hh:302
Vector3 RotateVector(const Vector3 &_vec) const
Rotate a vector using the quaternion.
Definition: Quaternion.hh:261
void SetFromEuler(const Vector3 &_vec)
Set the quaternion from Euler angles.
double z
Z location.
Definition: Vector3.hh:308
Quaternion operator*(const Quaternion &_q) const
Multiplication operator.
Definition: Quaternion.hh:221
bool equal(const T &_a, const T &_b, const T &_epsilon=1e-6)
check if two values are equal, within a tolerance
Definition: Helpers.hh:168
A 3x3 matrix class.
Definition: Matrix3.hh:34
void Correct()
Correct any nan.
Definition: Quaternion.hh:278
double w
Attributes of the quaternion.
Definition: Quaternion.hh:351
A quaternion class.
Definition: Quaternion.hh:45
friend std::istream & operator>>(std::istream &_in, gazebo::math::Quaternion &_q)
Stream extraction operator.
Definition: Quaternion.hh:379
GAZEBO_VISIBLE void Set(common::Image &_img, const msgs::Image &_msg)
Convert a msgs::Image to a common::Image.
double y
Attributes of the quaternion.
Definition: Quaternion.hh:357
Quaternion GetInverse() const
Get the inverse of this quaternion.
Definition: Quaternion.hh:90
double x
Attributes of the quaternion.
Definition: Quaternion.hh:354
T precision(const T &_a, const unsigned int &_precision)
get value at a specified precision
Definition: Helpers.hh:179
An angle and related functions.
Definition: Angle.hh:52
#define GAZEBO_VISIBLE
Use to represent "symbol visible" if supported.
Definition: system.hh:48
double y
Y location.
Definition: Vector3.hh:305
friend std::ostream & operator<<(std::ostream &_out, const gazebo::math::Quaternion &_q)
Stream insertion operator.
Definition: Quaternion.hh:366
Vector3 GetAsEuler() const
Return the rotation in Euler angles.