C Attitude Math Library
Quaternion, Euler, and DCM math utilities for attitude control.
Loading...
Searching...
No Matches
quaternion.h
Go to the documentation of this file.
1#ifndef ATTITUDE_QUATERNION_H
2#define ATTITUDE_QUATERNION_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
17void quaternion_to_dcm(const double q[4], double dcm[3][3]);
18
29void quaternion_to_euler(const double q[4], double *roll, double *pitch, double *yaw);
30
38void quaternion_normalize(double q[4]);
39
50void quaternion_multiply(const double q1[4], const double q2[4], double q_out[4]);
51
61int quaternion_inverse(const double q[4], double q_inv[4]);
62
76int quaternion_relative(const double q_current[4], const double q_target[4], double q_error[4]);
77
90int quaternion_orientation_error_axis_angle(const double q_current[4],
91 const double q_target[4],
92 double axis[3],
93 double *angle);
94
105int quaternion_to_axis_angle(const double q[4], double axis[3], double *angle);
106
118void quaternion_slerp(const double q1[4], const double q2[4], double t, double q_out[4]);
119
128void axis_angle_rotate(const double axis[3], double angle, const double v_in[3], double v_out[3]);
129
139void quaternion_rotate_vector(const double q[4], const double v_in[3], double v_out[3]);
140
150void quaternion_rotate_vector_explicit(const double q[4], const double v_in[3], double v_out[3]);
151
159void quaternion_set_explicit_debug(int enabled);
160
161
162#ifdef __cplusplus
163}
164#endif
165
166#endif // ATTITUDE_QUATERNION_H
int quaternion_to_axis_angle(const double q[4], double axis[3], double *angle)
Convert a quaternion to axis-angle representation.
Definition quaternion.c:129
void axis_angle_rotate(const double axis[3], double angle, const double v_in[3], double v_out[3])
Rotate a vector about an axis by a given angle.
Definition quaternion.c:198
int quaternion_inverse(const double q[4], double q_inv[4])
Compute the inverse of a quaternion.
Definition quaternion.c:85
void quaternion_to_euler(const double q[4], double *roll, double *pitch, double *yaw)
Convert a quaternion to intrinsic ZYX Euler angles.
Definition quaternion.c:27
void quaternion_to_dcm(const double q[4], double dcm[3][3])
Convert a quaternion to a direction cosine matrix (DCM).
Definition quaternion.c:8
void quaternion_normalize(double q[4])
Normalise a quaternion in-place.
Definition quaternion.c:57
void quaternion_set_explicit_debug(int enabled)
Enable verbose logging for the explicit quaternion rotation implementation.
Definition quaternion.c:326
void quaternion_rotate_vector_explicit(const double q[4], const double v_in[3], double v_out[3])
Rotate a vector using the explicit formulation.
Definition quaternion.c:251
void quaternion_slerp(const double q1[4], const double q2[4], double t, double q_out[4])
Interpolate two quaternions using spherical linear interpolation (SLERP).
Definition quaternion.c:146
void quaternion_rotate_vector(const double q[4], const double v_in[3], double v_out[3])
Rotate a vector using a quaternion.
Definition quaternion.c:213
int quaternion_relative(const double q_current[4], const double q_target[4], double q_error[4])
Compute the relative rotation from the current orientation to a target orientation.
Definition quaternion.c:98
void quaternion_multiply(const double q1[4], const double q2[4], double q_out[4])
Multiply two quaternions using Hamilton product.
Definition quaternion.c:75
int quaternion_orientation_error_axis_angle(const double q_current[4], const double q_target[4], double axis[3], double *angle)
Compute current-to-target orientation error as an axis-angle command.
Definition quaternion.c:117