1#ifndef ATTITUDE_QUATERNION_H
2#define ATTITUDE_QUATERNION_H
76int quaternion_relative(
const double q_current[4],
const double q_target[4],
double q_error[4]);
91 const double q_target[4],
118void quaternion_slerp(
const double q1[4],
const double q2[4],
double t,
double q_out[4]);
128void axis_angle_rotate(
const double axis[3],
double angle,
const double v_in[3],
double v_out[3]);
int quaternion_to_axis_angle(const double q[4], double axis[3], double *angle)
Convert a quaternion to axis-angle representation.
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.
int quaternion_inverse(const double q[4], double q_inv[4])
Compute the inverse of a quaternion.
void quaternion_to_euler(const double q[4], double *roll, double *pitch, double *yaw)
Convert a quaternion to intrinsic ZYX Euler angles.
void quaternion_to_dcm(const double q[4], double dcm[3][3])
Convert a quaternion to a direction cosine matrix (DCM).
void quaternion_normalize(double q[4])
Normalise a quaternion in-place.
void quaternion_set_explicit_debug(int enabled)
Enable verbose logging for the explicit quaternion rotation implementation.
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.
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).
void quaternion_rotate_vector(const double q[4], const double v_in[3], double v_out[3])
Rotate a vector using a quaternion.
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.
void quaternion_multiply(const double q1[4], const double q2[4], double q_out[4])
Multiply two quaternions using Hamilton product.
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.