amino
1.0-beta2
Lightweight Robot Utility Library
|
Low-level operations for SE(3) orientations and transformations. More...
#include <float.h>
Go to the source code of this file.
Macros | |
#define | AA_TF_DEF_SERIES(name, a0, a1, a2) |
Define an inline function for a series using Horner's rule. More... | |
#define | AA_TF_EPSILON .0001 |
a small number | |
#define | AA_TF_IDENT_INITIALIZER {1,0,0, 0,1,0, 0,0,1, 0,0,0} |
Static initializer for an identity transformation matrix. | |
#define | AA_TF_ROTMAT_IDENT_INITIALIZER {1,0,0, 0,1,0, 0,0,1} |
Static initializer for an identity rotation matrix. | |
#define | AA_TF_QUAT_IDENT_INITIALIZER {0,0,0,1} |
Static initializer for an identity quaternion. | |
#define | AA_TF_DUQU_IDENT_INITIALIZER {0,0,0,1, 0,0,0,0} |
Static initializer for an identity dual quaternion. | |
#define | AA_TF_QUTR_IDENT_INITIALIZER {0,0,0,1, 0,0,0} |
Static initializer for an identity quaternion-translation. | |
#define | AA_TF_AXANG_IDENT_INITIALIZER {1,0,0,0} |
Static initializer for an identity axis-angle. | |
#define | AA_TF_ROTVEC_IDENT_INITIALIZER {0,0,0} |
Static initializer for an identity rotation-vector. | |
#define | AA_TF_VEC_IDENT_INITIALIZER {0,0,0} |
Static initializer for an identity vector-3. | |
#define | AA_TF_IDENT ( (double[12]) AA_TF_IDENT_INITIALIZER ) |
Identity transform. | |
#define | AA_TF_ROTMAT_IDENT ( (double[9] AA_TF_ROTMAT_IDENT_INITIALIZER ) |
Identity rotation matrix. | |
#define | AA_TF_QUAT_IDENT ( (double[4]) AA_TF_QUAT_IDENT_INITIALIZER ) |
Identity quaternion. | |
#define | AA_TF_AXANG_IDENT ( (double[4]) AA_TF_AXANG_IDENT_INITIALIZER ) |
Identity axis-angle. | |
#define | AA_TF_ROTVEC_IDENT ( (double[3]) AA_TF_ROTVEC_IDENT_INITIALIZER ) |
Identity Rotation Vector. | |
#define | AA_TF_DOTX(a, b) ((a)[0]*(b)[0] + (a)[1]*(b)[1] + (a)[2]*(b)[2]) |
Macro to compute a dot product of length 3 vectors. More... | |
#define | AA_TF_CROSSX(a, b, c) |
Macro to compute the cross product of length 3 vectors. More... | |
#define | AA_TF_QUTR_Q 0 |
Offset of quaternion part in quaternion-translation representation. | |
#define | AA_TF_QUTR_V 4 |
Offset of translation part in quaternion-translation representation. | |
#define | AA_TF_DEF_EULER(letters) |
Create declarations for Euler angle conversion functions. More... | |
Functions | |
static void | aa_tf_sinccos2 (double theta2, double *sc, double *c) |
Compute sinc(theta), cos(theta), given the square of theta. More... | |
static void | aa_tf_sinccos (double theta, double *sc, double *c) |
Compute sinc(theta), cos(theta) | |
static double | aa_tf_sinc (double theta) |
Compute sinc(theta) | |
AA_API void | aa_tf_12 (const double T[AA_RESTRICT 12], const double p0[AA_RESTRICT 3], double p1[AA_RESTRICT 3]) |
apply a euclidean transform | |
AA_API void | aa_tf_93 (const double R[AA_RESTRICT 9], const double v[AA_RESTRICT 3], const double p0[AA_RESTRICT 3], double p1[AA_RESTRICT 4]) |
apply a euclidean transform | |
AA_API void | aa_tf_tf_qv (const double quat[AA_RESTRICT 4], const double v[AA_RESTRICT 3], const double p0[AA_RESTRICT 3], double p1[AA_RESTRICT 4]) |
apply a euclidean transform | |
AA_API void | aa_tf_9 (const double R[AA_RESTRICT 9], const double p0[AA_RESTRICT 3], double p1[AA_RESTRICT 4]) |
apply a euclidean transform | |
AA_API void | aa_tf_12inv (const double T[AA_RESTRICT 12], double Ti[AA_RESTRICT 12]) |
invert transform | |
AA_API void | aa_tf_93inv (const double R[AA_RESTRICT 9], const double v[AA_RESTRICT 3], double Ri[AA_RESTRICT 9], double vi[AA_RESTRICT 3]) |
invert transform | |
AA_API void | aa_tf_qv_conj (const double q[AA_RESTRICT 4], const double v[AA_RESTRICT 3], double qc[AA_RESTRICT 4], double vc[AA_RESTRICT 3]) |
Invert transform. More... | |
AA_API void | aa_tf_12chain (const double T1[AA_RESTRICT 12], const double T2[AA_RESTRICT 12], double T[AA_RESTRICT 12]) |
chain two transforms | |
AA_API void | aa_tf_v12chain (double T[AA_RESTRICT 12], const double T1[AA_RESTRICT 12], const double T2[AA_RESTRICT 12],...) |
Varargs transform chain. | |
AA_API void | aa_tf_93chain (const double R0[AA_RESTRICT 9], const double v0[AA_RESTRICT 3], const double R1[AA_RESTRICT 9], const double v1[AA_RESTRICT 3], double R[AA_RESTRICT 9], double v[AA_RESTRICT 3]) |
chain two transforms | |
AA_API void | aa_tf_qv_chain (const double q0[AA_RESTRICT 4], const double v0[AA_RESTRICT 3], const double q1[AA_RESTRICT 4], const double v1[AA_RESTRICT 3], double q[AA_RESTRICT 4], double v[AA_RESTRICT 3]) |
chain two transforms | |
AA_API void | aa_tf_93rel (const double R1[AA_RESTRICT 9], const double v1[AA_RESTRICT 3], const double R2[AA_RESTRICT 9], const double v2[AA_RESTRICT 3], double Rrel[AA_RESTRICT 9], double vrel[AA_RESTRICT 3]) |
relative transform | |
AA_API void | aa_tf_12rel (const double T1[AA_RESTRICT 12], const double T2[AA_RESTRICT 12], double Trel[AA_RESTRICT 12]) |
relative transform | |
AA_API void | aa_tf_skewsym_scal2 (double a, double b, const double u[3], double R[9]) |
Construct a skew-symmetric matrix. More... | |
AA_API void | aa_tf_skewsym_scal_c (const double u[AA_RESTRICT 3], const double a[AA_RESTRICT 3], const double b[AA_RESTRICT 3], double R[9]) |
Construct a skew-symmetric matrix. | |
AA_API void | aa_tf_rotmat_mul (const double R0[AA_RESTRICT 9], const double R1[AA_RESTRICT 9], double R[AA_RESTRICT 9]) |
Multiple two rotation matrices. | |
AA_API void | aa_tf_tfmat_mul (const double T0[AA_RESTRICT 12], const double T1[AA_RESTRICT 12], double T[AA_RESTRICT 12]) |
Multiple two transformation matrices. | |
AA_API void | aa_tf_tfmat2_mul (const double R0[AA_RESTRICT 9], const double v0[AA_RESTRICT 3], const double R1[AA_RESTRICT 9], const double v1[AA_RESTRICT 3], double R[AA_RESTRICT 9], double v[AA_RESTRICT 3]) |
Multiple two transformation matrices, in split representation. | |
AA_API void | aa_tf_rotmat_imul (const double R0[AA_RESTRICT 9], const double R1[AA_RESTRICT 9], double R[AA_RESTRICT 9]) |
Multiple inverse of R0 by R1. More... | |
AA_API void | aa_tf_rotmat_muli (const double R0[AA_RESTRICT 9], const double R1[AA_RESTRICT 9], double R[AA_RESTRICT 9]) |
Multiple R1 by inverse of R1. More... | |
AA_API void | aa_tf_tfmat_imul (const double T0[AA_RESTRICT 12], const double T1[AA_RESTRICT 12], double T[AA_RESTRICT 12]) |
Multiple inverse of T0 by T1. More... | |
AA_API void | aa_tf_tfmat_muli (const double T0[AA_RESTRICT 12], const double T1[AA_RESTRICT 12], double T[AA_RESTRICT 12]) |
Multiple T1 by inverse of T1. More... | |
AA_API void | aa_tf_tfmat2_imul (const double R0[AA_RESTRICT 9], const double v0[AA_RESTRICT 3], const double R1[AA_RESTRICT 9], const double v1[AA_RESTRICT 3], double R[AA_RESTRICT 9], double v[AA_RESTRICT 3]) |
Multiple inverse of transform (R0,v0) by transform (R1,v1). More... | |
AA_API void | aa_tf_tfmat2_muli (const double R0[AA_RESTRICT 9], const double v0[AA_RESTRICT 3], const double R1[AA_RESTRICT 9], const double v1[AA_RESTRICT 3], double R[AA_RESTRICT 9], double v[AA_RESTRICT 3]) |
Multiple (R0,v0) by inverse of transform transform (R1,v1). More... | |
AA_API void | aa_tf_rotmat_normalize (double R[AA_RESTRICT 9]) |
Orthonormalize the rotation matrix. | |
AA_API void | aa_tf_rotmat_rot (const double R[AA_RESTRICT 9], const double p0[AA_RESTRICT 3], double p1[AA_RESTRICT 3]) |
Rotate a point using a rotation matrix. | |
AA_API void | aa_tf_tfmat_tf (const double T[AA_RESTRICT 12], const double p0[AA_RESTRICT 3], double p1[AA_RESTRICT 3]) |
Transform a point using a transformation matrix. | |
AA_API void | aa_tf_tfmat2_tf (const double R[AA_RESTRICT 9], const double v[AA_RESTRICT 3], const double p0[AA_RESTRICT 3], double p1[AA_RESTRICT 4]) |
Transform a point using a split transformation matrix. | |
AA_API void | aa_tf_rotmat_inv1 (double R[AA_RESTRICT 9]) |
Invert a rotation in place. | |
AA_API void | aa_tf_rotmat_inv2 (const double R[AA_RESTRICT 9], double Ri[AA_RESTRICT 9]) |
Invert a rotation. | |
AA_API void | aa_tf_tfmat_inv1 (double T[AA_RESTRICT 12]) |
Invert a transform in place. | |
AA_API void | aa_tf_tfmat_inv2 (const double T[AA_RESTRICT 12], double Ti[AA_RESTRICT 12]) |
Invert a transform. | |
AA_API void | aa_tf_tfmat_normalize (double T[AA_RESTRICT 12]) |
Orthonormalize the transformation matrix. | |
AA_API int | aa_tf_isrotmat (const double R[AA_RESTRICT 9]) |
tests if R is a rotation matrix | |
AA_API void | aa_tf_9mul (const double R0[AA_RESTRICT 9], const double R1[AA_RESTRICT 9], double R[AA_RESTRICT 9]) |
Multiply two rotation matrices. | |
AA_API void | aa_tf_9rot (const double R[AA_RESTRICT 9], const double p0[AA_RESTRICT 3], double p1[AA_RESTRICT 3]) |
rotate p0 by R | |
AA_API void | aa_tf_9rel (const double R1[AA_RESTRICT 9], const double R2[AA_RESTRICT 9], double Ri[AA_RESTRICT 9]) |
relative transform from R1 to R2 | |
AA_API void | aa_tf_rotmat_exp_aa (const double aa[AA_RESTRICT 4], double R[AA_RESTRICT 9]) |
Rotation Matrix exponential from axis angle. | |
AA_API void | aa_tf_rotmat_expv (const double rv[AA_RESTRICT 3], double R[AA_RESTRICT 9]) |
Rotation Matrix exponential from rotation vector. | |
AA_API void | aa_tf_rotmat_lnv (const double R[AA_RESTRICT 9], double v[AA_RESTRICT 3]) |
Rotation Matrix logarithm. | |
AA_API void | aa_tf_tfmat_expv (const double v[AA_RESTRICT 6], double T[AA_RESTRICT 12]) |
Transformation Matrix exponential. | |
AA_API void | aa_tf_tfmat_lnv (const double T[AA_RESTRICT 12], double v[AA_RESTRICT 6]) |
Transformation Matrix logarithm. | |
AA_API void | aa_tf_rotmat_vel2diff (const double R[AA_RESTRICT 9], const double w[AA_RESTRICT 3], double dR[AA_RESTRICT 9]) |
Velocity to rotation matrix derivative. | |
AA_API void | aa_tf_rotmat_diff2vel (const double R[AA_RESTRICT 9], const double dR[AA_RESTRICT 9], double w[AA_RESTRICT 3]) |
Rotation matrix derivative to velocity. | |
AA_API void | aa_tf_rotmat_svel (const double R0[AA_RESTRICT 9], const double w[AA_RESTRICT 3], double dt, double R1[AA_RESTRICT 9]) |
Integrate rotational velocity. | |
AA_API void | aa_tf_tfmat_svel (const double T0[AA_RESTRICT 12], const double w[AA_RESTRICT 3], double dt, double T1[AA_RESTRICT 12]) |
Integrate rotational velocity. | |
AA_API void | aa_tf_v9mul (double R[AA_RESTRICT 9], const double R1[AA_RESTRICT 9], const double R2[AA_RESTRICT 9],...) |
Vararg multiply two rotation matrices. | |
AA_API void | aa_tf_rotmat_xy (const double x_axis[AA_RESTRICT 3], const double y_axis[AA_RESTRICT 3], double R[AA_RESTRICT 9]) |
Construct rotation matrix from an x and y axis of the child frame. | |
AA_API void | aa_tf_rotmat_yz (const double y_axis[AA_RESTRICT 3], const double z_axis[AA_RESTRICT 3], double R[AA_RESTRICT 9]) |
Construct rotation matrix from a y and z axis of the child frame. | |
AA_API void | aa_tf_rotmat_zx (const double z_axis[AA_RESTRICT 3], const double x_axis[AA_RESTRICT 3], double R[AA_RESTRICT 9]) |
Construct rotation matrix from a z and x axis of the child frame. | |
static double | AA_TF_VDOT (const double a[AA_RESTRICT 3], const double b[AA_RESTRICT 3]) |
Inlined vector dot product. | |
static float | AA_TF_VDOTF (const float a[AA_RESTRICT 3], const float b[AA_RESTRICT 3]) |
Inlined vector dot product. | |
AA_API double | aa_tf_vdot (const double a[AA_RESTRICT 3], const double b[AA_RESTRICT 3]) |
Vector dot product. | |
AA_API float | aa_tf_vdotf (const float a[AA_RESTRICT 3], const float b[AA_RESTRICT 3]) |
Vector dot product. | |
static void | AA_TF_CROSS (const double a[AA_RESTRICT 3], const double b[AA_RESTRICT 3], double c[AA_RESTRICT 3]) |
Inlined Vector cross product. | |
static void | AA_TF_CROSSF (const float a[AA_RESTRICT 3], const float b[AA_RESTRICT 3], float c[AA_RESTRICT 3]) |
Inlined Vector cross product. | |
AA_API void | aa_tf_cross (const double a[AA_RESTRICT 3], const double b[AA_RESTRICT 3], double c[AA_RESTRICT 3]) |
Vector cross product. | |
AA_API void | aa_tf_cross_a (const double a[AA_RESTRICT 3], const double b[AA_RESTRICT 3], double c[AA_RESTRICT 3]) |
Cross-product accumulate. | |
AA_API void | aa_tf_cross_mat_l (const double v[3], struct aa_dmat *M) |
Construct matrix for left cross product v*a = M*a. | |
AA_API void | aa_tf_cross_mat_r (const double v[3], struct aa_dmat *M) |
Construct matrix for right cross product a*v = M*a. | |
AA_API void | aa_tf_crossf (const float a[AA_RESTRICT 3], const float b[AA_RESTRICT 3], float c[AA_RESTRICT 3]) |
Vector cross product. | |
AA_API void | aa_tf_vnormalize (double v[AA_RESTRICT 3]) |
Normalize Vector. | |
AA_API void | aa_tf_vnormalizef (float v[AA_RESTRICT 3]) |
Normalize Vector. | |
AA_API double | aa_tf_vssd (const double a[AA_RESTRICT 3], const double b[AA_RESTRICT 3]) |
Sum-square-differences of two vectors. | |
AA_API double | aa_tf_vnorm (const double a[AA_RESTRICT 3]) |
Norm of vector. | |
static double | AA_TF_QDOT (const double a[AA_RESTRICT 4], const double b[AA_RESTRICT 4]) |
Inlined quaternion dot product. | |
AA_API double | aa_tf_qssd (const double a[AA_RESTRICT 4], const double b[AA_RESTRICT 4]) |
Sum-square-differences of two quaternions. | |
AA_API double | aa_tf_qdot (const double a[AA_RESTRICT 4], const double b[AA_RESTRICT 4]) |
Quaternion dot product. | |
AA_API void | aa_tf_qnormalize (double q[AA_RESTRICT 4]) |
Normalize Quaternion. More... | |
AA_API void | aa_tf_qscal (double q[AA_RESTRICT 4], double alpha) |
Scale a quaternion. More... | |
AA_API double | aa_tf_qnorm (const double q[AA_RESTRICT 4]) |
Return norm of the quaternion. | |
AA_API void | aa_tf_qminimize (double q[AA_RESTRICT 4]) |
Minimize angle represented by the quaternion. More... | |
AA_API void | aa_tf_qminimize2 (const double q[AA_RESTRICT 4], double qmin[AA_RESTRICT 4]) |
Minimize angle represented by the quaternion. More... | |
AA_API void | aa_tf_qnormalize2 (const double q[AA_RESTRICT 4], double qnorm[AA_RESTRICT 4]) |
Normailize quaternion. | |
AA_API void | aa_tf_qconj (const double q[AA_RESTRICT 4], double r[AA_RESTRICT 4]) |
Quaternion conjugate. | |
AA_API void | aa_tf_qconj1 (double q[AA_RESTRICT 4]) |
Quaternion conjugate, in-place. | |
AA_API void | aa_tf_qexp (const double q[AA_RESTRICT 4], double r[AA_RESTRICT 4]) |
Quaternion exponential. | |
AA_API void | aa_tf_qln (const double q[AA_RESTRICT 4], double r[AA_RESTRICT 4]) |
Quaternion natural log. | |
AA_API void | aa_tf_qduln (const double q[AA_RESTRICT 4], const double dq[AA_RESTRICT 4], double dln[AA_RESTRICT 3]) |
Derivative of the Unit Quaternion Logarithm. More... | |
AA_API void | aa_tf_qdulnj (const double q[AA_RESTRICT 4], const double dq[AA_RESTRICT 4], double dln[AA_RESTRICT 3]) |
Derivative of the Unit Quaternion Logarithm, computed via Jacobian. More... | |
AA_API void | aa_tf_qdpexp (const double e[AA_RESTRICT 3], const double de[AA_RESTRICT 3], double dq[AA_RESTRICT 4]) |
Derivative of the Pure Quaternion Exponential. More... | |
AA_API void | aa_tf_qdpexpj (const double e[AA_RESTRICT 3], const double de[AA_RESTRICT 3], double dq[AA_RESTRICT 4]) |
Derivative of the Pure Quaternion Exponential, computed via Jacobian. More... | |
AA_API double | aa_tf_qangle (const double q[AA_RESTRICT 4]) |
Return the angle of the quaternion. More... | |
AA_API double | aa_tf_qangle_rel (const double *q, const double *p) |
Relative quaternion angles. | |
AA_API double | aa_tf_quhypangle2 (const double q[AA_RESTRICT 4], const double p[AA_RESTRICT 4]) |
Return the angle between unit quaterniosn in 4D space. | |
AA_API void | aa_tf_qinv (const double q[AA_RESTRICT 4], double r[AA_RESTRICT 4]) |
Quaternion inverse. | |
AA_API void | aa_tf_qadd (const double a[AA_RESTRICT 4], const double b[AA_RESTRICT 4], double c[AA_RESTRICT 4]) |
Quaternion addition. | |
AA_API void | aa_tf_qsub (const double a[AA_RESTRICT 4], const double b[AA_RESTRICT 4], double c[AA_RESTRICT 4]) |
Quaternion subtraction. | |
AA_API void | aa_tf_qisub (double a[AA_RESTRICT 4], const double b[AA_RESTRICT 4]) |
Quaternion subtraction, in-place. | |
AA_API void | aa_tf_qiadd (double a[AA_RESTRICT 4], const double b[AA_RESTRICT 4]) |
Quaternion addition, in-place. | |
AA_API void | aa_tf_qmul (const double a[AA_RESTRICT 4], const double b[AA_RESTRICT 4], double c[AA_RESTRICT 4]) |
Quaternion multiplication. | |
AA_API void | aa_tf_qmulnorm (const double a[AA_RESTRICT 4], const double b[AA_RESTRICT 4], double c[AA_RESTRICT 4]) |
Quaternion multiplication and normalize. | |
AA_API void | aa_tf_qmul_qv (const double q[AA_RESTRICT 4], const double v[AA_RESTRICT 3], double c[AA_RESTRICT 4]) |
Quaternion multiplication. | |
AA_API void | aa_tf_qmul_vq (const double v[AA_RESTRICT 3], const double q[AA_RESTRICT 4], double c[AA_RESTRICT 4]) |
Quaternion multiplication. | |
AA_API void | aa_tf_qcmul (const double a[AA_RESTRICT 4], const double b[AA_RESTRICT 4], double c[AA_RESTRICT 4]) |
Quaternion conjugate a and multiply by b. | |
AA_API void | aa_tf_qmulc (const double a[AA_RESTRICT 4], const double b[AA_RESTRICT 4], double c[AA_RESTRICT 4]) |
Quaternion multiply a by conjugate b. | |
AA_API void | aa_tf_qrot1 (const double q[AA_RESTRICT 4], double v[AA_RESTRICT 3]) |
Quaternion point rotation, in place. | |
AA_API void | aa_tf_qrot (const double q[AA_RESTRICT 4], const double v[AA_RESTRICT 3], double p[AA_RESTRICT 3]) |
Quaternion point rotation. | |
AA_API void | aa_tf_qrel (const double q1[AA_RESTRICT 4], const double q2[AA_RESTRICT 4], double q_rel[AA_RESTRICT 4]) |
Relative orientation. More... | |
AA_API void | aa_tf_qslerp (double tau, const double a[AA_RESTRICT 4], const double b[AA_RESTRICT 4], double c[AA_RESTRICT 4]) |
Quaternion SLERP. | |
AA_API void | aa_tf_qslerpalg (double tau, const double a[AA_RESTRICT 4], const double b[AA_RESTRICT 4], double c[AA_RESTRICT 4]) |
Quaternion SLERP, computed algebraicly. | |
AA_API void | aa_tf_qslerpdiff (double tau, const double a[AA_RESTRICT 4], const double b[AA_RESTRICT 4], double c[AA_RESTRICT 4]) |
Derivative of quaternation SLERP WRT tau. More... | |
AA_API void | aa_tf_qslerpdiffalg (double tau, const double a[AA_RESTRICT 4], const double b[AA_RESTRICT 4], double c[AA_RESTRICT 4]) |
Derivative of quaternation SLERP WRT tau, computed algebraicly. | |
AA_API void | aa_tf_qslerpchaindiff (double u, double du, const double q1[AA_RESTRICT 4], const double dq1[AA_RESTRICT 4], const double q2[AA_RESTRICT 4], const double dq2[AA_RESTRICT 4], double q[AA_RESTRICT 4], double dq[AA_RESTRICT 4]) |
Chain-rule slerp differentiation. | |
AA_API void | aa_tf_qslerp3diff (double u12, double du12, const double q1[AA_RESTRICT 4], const double q2[AA_RESTRICT 4], double u34, double du34, const double q3[AA_RESTRICT 4], const double q4[AA_RESTRICT 4], double u, double du, double q[AA_RESTRICT 4], double dq[AA_RESTRICT 4]) |
Triad sequence of slerp differentiation. | |
AA_API void | aa_tf_qdiff2vel (const double q[AA_RESTRICT 4], const double dq_dt[AA_RESTRICT 4], double v[AA_RESTRICT 3]) |
Quaternaion time derivate to angular velocity. | |
AA_API void | aa_tf_qvel2diff (const double q[AA_RESTRICT 4], const double v[AA_RESTRICT 3], double dq_dt[AA_RESTRICT 4]) |
Angular velocity to quaternion time derivative. | |
AA_API void | aa_tf_rotvec_diff2vel (const double v[3], const double dv[3], double w[3]) |
Convert rotation vector derivative to rotational velocity. | |
AA_API void | aa_tf_qrk1 (const double q0[AA_RESTRICT 4], const double dq[AA_RESTRICT 4], double dt, double q1[AA_RESTRICT 4]) |
Integrate unit quaternion, Runge-Kutta-1 (euler) integration. More... | |
AA_API void | aa_tf_qvelrk1 (const double q0[AA_RESTRICT 4], const double v[AA_RESTRICT 3], double dt, double q1[AA_RESTRICT 4]) |
Integrate unit quaternion from angular velocity, Runge-Kutta-1 (euler) integration. More... | |
AA_API void | aa_tf_qvelrk4 (const double q0[AA_RESTRICT 4], const double v[AA_RESTRICT 3], double dt, double q1[AA_RESTRICT 4]) |
Integrate unit quaternion from angular velocity, Runge-Kutta-4 (euler) integration. More... | |
AA_API void | aa_tf_qsvel (const double q0[AA_RESTRICT 4], const double v[AA_RESTRICT 3], double dt, double q1[AA_RESTRICT 4]) |
Integrate unit quaternion from constant angular velocity. More... | |
AA_API void | aa_tf_qsdiff (const double q0[AA_RESTRICT 4], const double dq[AA_RESTRICT 4], double dt, double q1[AA_RESTRICT 4]) |
Integrate unit quaternion from quaternion derivative. More... | |
AA_API void | aa_tf_qsacc_rk (const double q0[AA_RESTRICT 4], const double v[AA_RESTRICT 3], const double a[AA_RESTRICT 3], double dt, double q1[AA_RESTRICT 4]) |
Runge-kutta integration of unit quaternion from velocity and acceleration. More... | |
AA_API void | aa_tf_qsacc (const double q0[AA_RESTRICT 4], const double v[AA_RESTRICT 3], const double a[AA_RESTRICT 3], double dt, double q1[AA_RESTRICT 4]) |
Integrate unit quaternion from velocity and acceleration. More... | |
AA_API void | aa_tf_xangle2quat (double theta_x, double q[AA_RESTRICT 4]) |
Unit quaternion for angle about x axis. | |
AA_API void | aa_tf_yangle2quat (double theta_y, double q[AA_RESTRICT 4]) |
Unit quaternion for angle about y axis. | |
AA_API void | aa_tf_zangle2quat (double theta_z, double q[AA_RESTRICT 4]) |
Unit quaternion for angle about z axis. | |
AA_API void | aa_tf_quat_davenport_matrix (size_t n, const double *w, const double *q, size_t ldqq, double *M) |
Construct matrix for Davenport's q-method. | |
AA_API void | aa_tf_quat_davenport (size_t n, const double *w, const double *Q, size_t ldq, double *y) |
Weighted average quaternion using Davenport's q-method. More... | |
AA_API void | aa_tf_qmatrix_l (const double *q, double *M, size_t ldm) |
Construct matrix for left quaternion multiply q*p = M*p. | |
AA_API void | aa_tf_qmatrix_r (const double *q, double *M, size_t ldm) |
Construct matrix for right quaternion multiply. More... | |
AA_API void | aa_tf_qmat_l (const double *q, struct aa_dmat *M) |
Construct matrix for left quaternion multiply q*p = M*p. | |
AA_API void | aa_tf_qmat_r (const double *q, struct aa_dmat *M) |
Construct matrix for right quaternion multiply. More... | |
AA_API void | aa_tf_qurand (double q[4]) |
Generate random unit quaternion. | |
AA_API void | aa_tf_axang_make (double x, double y, double z, double theta, double axang[AA_RESTRICT 4]) |
copy x,y,z,theta into axang | |
AA_API void | aa_tf_axang_permute (const double rv[AA_RESTRICT 4], int k, double rv_p[AA_RESTRICT 4]) |
Scales angle by k * 2 * pi. | |
AA_API void | aa_tf_rotvec_permute (const double rv[AA_RESTRICT 3], int k, double rv_p[AA_RESTRICT 3]) |
find alternate equivalent representations of rv | |
AA_API void | aa_tf_rotvec_near (const double rv[AA_RESTRICT 3], const double rv_near[AA_RESTRICT 3], double rv_p[AA_RESTRICT 3]) |
Scales rv by multiple of 2pi to minimized SSD with rv_near. | |
AA_API void | aa_tf_axang_rot (const double axang[AA_RESTRICT 4], const double p[AA_RESTRICT 3], double q[AA_RESTRICT 3]) |
Rotate a point. | |
AA_API void | aa_tf_qv_conj (const double q[4], const double v[3], double qc[4], double vc[3]) |
quaternion-translation conjugate | |
AA_API void | aa_tf_qutr2duqu (const double e[7], double s[8]) |
quaternion-translation to dual quaternion | |
AA_API void | aa_tf_qutr2tfmat (const double e[7], double T[12]) |
quaternion-translation to transformation matrix | |
AA_API void | aa_tf_tfmat2qutr (const double T[12], double e[7]) |
transformation matrix to quaternion-translation | |
AA_API void | aa_tf_duqu2qutr (const double s[8], double e[7]) |
dual quaternion to quaternion-translation | |
AA_API void | aa_tf_qutr_mul (const double a[7], const double b[7], double c[7]) |
quaternion-translation multiply | |
AA_API void | aa_tf_qutr_tf (const double E[AA_RESTRICT 7], const double p0[AA_RESTRICT 3], double p1[AA_RESTRICT 3]) |
Transform a point,. | |
AA_API void | aa_tf_qutr_mulnorm (const double a[7], const double b[7], double c[7]) |
quaternion-translation multiply and normalize | |
AA_API void | aa_tf_qutr_conj (const double a[7], double c[7]) |
quaternion-translation conjugate | |
AA_API void | aa_tf_qutr_mulc (const double a[7], const double b[7], double c[7]) |
quaternion-translation conjugate multiply | |
AA_API void | aa_tf_qutr_cmul (const double a[7], const double b[7], double c[7]) |
quaternion-translation conjugate multiply | |
AA_API void | aa_tf_qv_expv (const double w[3], const double dv[3], double q[4], double v[3]) |
Quaternion-vector exponential. | |
AA_API void | aa_tf_qv_lnv (const double q[4], const double v[3], double w[3], double dv[3]) |
Quaternion-vector logarithm. | |
AA_API void | aa_tf_qutr_expv (const double w[6], double e[7]) |
Quaternion-vector exponential. | |
AA_API void | aa_tf_qutr_lnv (const double e[7], double w[6]) |
Quaternion-vector logarithm. | |
AA_API void | aa_tf_qutr_twist2vel (const double e[7], const double w[6], double dx[6]) |
Quaternion-translation twist to velocity. | |
AA_API void | aa_tf_qutr_diff2vel (const double e[7], const double de[7], double dx[6]) |
Quaternion-translation derivative to spatial velocity. | |
AA_API void | aa_tf_qutr_vel2diff (const double e[7], const double dx[6], double de[7]) |
Quaternion-translation spatial velocity to derivative. | |
AA_API void | aa_tf_qv_vel2twist (const double q[AA_RESTRICT 4], const double v[AA_RESTRICT 3], const double w[AA_RESTRICT 3], const double dv[AA_RESTRICT 3], double tw[AA_RESTRICT 3], double tv[AA_RESTRICT 3]) |
Quaternion-vector velocity to twist. | |
AA_API void | aa_tf_qv_twist2vel (const double q[AA_RESTRICT 4], const double v[AA_RESTRICT 3], const double tw[AA_RESTRICT 3], const double tv[AA_RESTRICT 3], double w[AA_RESTRICT 3], double dv[AA_RESTRICT 3]) |
Quaternion-vector twist to velocity. | |
AA_API void | aa_tf_qutr_svel (const double e0[7], const double dx[6], double dt, double e1[7]) |
Integrate a quaternion-translation. | |
AA_API void | aa_tf_qutr_sdiff (const double e0[7], const double de[7], double dt, double e1[7]) |
Integrate a quaternion-translation. | |
AA_API void | aa_tf_qutr_wavg (size_t n, const double *w, const double *EE, size_t ldee, double *a) |
Weighted average transform. | |
AA_API void | aa_tf_qutr_rand (double E[7]) |
Generate random transform. | |
AA_API void | aa_tf_quat2axang (const double q[AA_RESTRICT 4], double axang[AA_RESTRICT 4]) |
Quaternion to axis-angle. | |
AA_API void | aa_tf_axang2quat (const double axang[AA_RESTRICT 4], double q[AA_RESTRICT 4]) |
axis-angle to quaternion. | |
AA_API void | aa_tf_axang2quat2 (const double axis[AA_RESTRICT 3], double angle, double q[AA_RESTRICT 4]) |
axis-angle to quaternion. | |
AA_API void | aa_tf_vecs2quat (const double u[AA_RESTRICT 3], const double v[AA_RESTRICT 3], double q[AA_RESTRICT 4]) |
Convert rotation between two vectors to a quaternion. | |
AA_API void | aa_tf_axang2rotvec (const double axang[AA_RESTRICT 4], double rotvec[AA_RESTRICT 3]) |
convert axis-angle to rotation vector | |
AA_API void | aa_tf_rotvec2axang (const double rotvec[AA_RESTRICT 3], double axang[AA_RESTRICT 4]) |
convert rotation vector to axis-angle | |
AA_API void | aa_tf_rotvec2quat (const double rotvec[AA_RESTRICT 3], double q[AA_RESTRICT 4]) |
covert rotation vector to quaternion | |
AA_API void | aa_tf_quat2rotvec (const double q[AA_RESTRICT 4], double rotvec[AA_RESTRICT 3]) |
covert quaternion to rotation vector | |
AA_API void | aa_tf_quat2rotvec_near (const double q[AA_RESTRICT 4], const double rv_near[AA_RESTRICT 3], double rotvec[AA_RESTRICT 3]) |
covert quaternion to rotation vector minimizing distance from rv_near | |
AA_API void | aa_tf_quat2rotmat (const double quat[AA_RESTRICT 4], double rotmat[AA_RESTRICT 9]) |
convert quaternion to rotation matrix | |
AA_API void | aa_tf_rotmat2quat (const double rotmat[AA_RESTRICT 9], double quat[AA_RESTRICT 4]) |
convert rotation matrix to quaternion | |
AA_API void | aa_tf_rotmat2axang (const double R[AA_RESTRICT 9], double ra[AA_RESTRICT 4]) |
convert rotation matrix to axis angle | |
AA_API void | aa_tf_rotmat2rotvec (const double R[AA_RESTRICT 9], double rv[AA_RESTRICT 3]) |
convert axis rotation matrix to rotation vector | |
AA_API void | aa_tf_rotmat_sincos (const double R[AA_RESTRICT 9], double *s, double *c) |
extract sin and cosine of a rotation matrix | |
AA_API void | aa_tf_axang2rotmat (const double ra[AA_RESTRICT 4], double R[AA_RESTRICT 9]) |
convert axis angle to rotation matrix | |
AA_API void | aa_tf_axang2rotmat2 (const double axis[AA_RESTRICT 3], double angle, double R[AA_RESTRICT 9]) |
convert axis angle to rotation matrix | |
AA_API void | aa_tf_rotvec2rotmat (const double rv[AA_RESTRICT 3], double R[AA_RESTRICT 9]) |
convert rotatoin vector to rotation matrix | |
AA_API void | aa_tf_qv2tfmat (const double q[AA_RESTRICT 4], const double v[AA_RESTRICT 3], double T[AA_RESTRICT 12]) |
Convert orientation unit quaternion and translation vector to transformation matrix. | |
AA_API void | aa_tf_rotmat2eulerzyx (const double R[AA_RESTRICT 9], double e[AA_RESTRICT 3]) |
Convert Rotation Matrix to ZYX Euler Angles. | |
AA_API void | aa_tf_quat2eulerzyx (const double q[AA_RESTRICT 4], double e[AA_RESTRICT 3]) |
Convert quaternion to ZYX Euler Angles. | |
AA_API void | aa_tf_xangle2rotmat (double theta_x, double R[AA_RESTRICT 9]) |
Angle about x axis. | |
AA_API void | aa_tf_yangle2rotmat (double theta_y, double R[AA_RESTRICT 9]) |
Angle about y axis. | |
AA_API void | aa_tf_zangle2rotmat (double theta_z, double R[AA_RESTRICT 9]) |
Angle about z axis. | |
AA_API void | aa_tf_xangle2axang (double theta_x, double axang[AA_RESTRICT 4]) |
Angle about x axis. | |
AA_API void | aa_tf_yangle2axang (double theta_y, double axang[AA_RESTRICT 4]) |
Angle about y axis. | |
AA_API void | aa_tf_zangle2axang (double theta_z, double axang[AA_RESTRICT 4]) |
Angle about z axis. | |
AA_API void | aa_tf_axang_normalize (double axang[AA_RESTRICT 4]) |
Normalize the axis. | |
AA_API void | aa_tf_rotmat_mzlook (const double eye[AA_RESTRICT 3], const double target[AA_RESTRICT 3], const double up[AA_RESTRICT 3], double R[AA_RESTRICT 9]) |
Find the camera frame, looking in negative z direction. | |
AA_API void | aa_tf_tfmat_mzlook (const double eye[AA_RESTRICT 3], const double target[AA_RESTRICT 3], const double up[AA_RESTRICT 3], double T[AA_RESTRICT 12]) |
Find the camera frame, looking in negative z direction. | |
AA_API void | aa_tf_qmzlook (const double eye[AA_RESTRICT 3], const double target[AA_RESTRICT 3], const double up[AA_RESTRICT 3], double q[AA_RESTRICT 4]) |
Find the camera frame, looking in negative z direction. | |
AA_API void | aa_tf_qv_mzlook (const double eye[AA_RESTRICT 3], const double target[AA_RESTRICT 3], const double up[AA_RESTRICT 3], double q[AA_RESTRICT 4], double v[AA_RESTRICT 3]) |
Find the camera frame, looking in negative z direction. | |
AA_API void | aa_tf_qutr_mzlook (const double eye[AA_RESTRICT 3], const double target[AA_RESTRICT 3], const double up[AA_RESTRICT 3], double T[AA_RESTRICT 12]) |
Find the camera frame, looking in negative z direction. | |
AA_API void | aa_tf_duqu_add (const double d1[AA_RESTRICT 8], const double d2[AA_RESTRICT 8], double d3[AA_RESTRICT 8]) |
Dual quaternion addition. | |
AA_API void | aa_tf_duqu_sub (const double d1[AA_RESTRICT 8], const double d2[AA_RESTRICT 8], double d3[AA_RESTRICT 8]) |
Dual quaternion subtraction. | |
AA_API void | aa_tf_duqu_smul (double alpha, const double x[AA_RESTRICT 8], double y[AA_RESTRICT 8]) |
Dual quaternion scalar multiplication. | |
AA_API void | aa_tf_duqu_mul (const double d1[AA_RESTRICT 8], const double d2[AA_RESTRICT 8], double d3[AA_RESTRICT 8]) |
Dual quaternion multiplication. | |
AA_API void | aa_tf_duqu_matrix_l (const double *q, double *M, size_t ldm) |
Construct matrix for left dual quaternion multiply q*p = M*p. | |
AA_API void | aa_tf_duqu_matrix_r (const double *q, double *M, size_t ldm) |
Construct matrix for right dual quaternion multiply p*q = M*p. | |
AA_API void | aa_tf_duqu_mat_l (const double *q, struct aa_dmat *M) |
Construct matrix for left dual quaternion multiply q*p = M*p. | |
AA_API void | aa_tf_duqu_mat_r (const double *q, struct aa_dmat *M) |
Construct matrix for right dual quaternion multiply p*q = M*p. | |
AA_API void | aa_tf_duqu_cmul (const double d1[AA_RESTRICT 8], const double d2[AA_RESTRICT 8], double d3[AA_RESTRICT 8]) |
Dual quaternion multiply conjugate of d1 by d2. | |
AA_API void | aa_tf_duqu_mulc (const double d1[AA_RESTRICT 8], const double d2[AA_RESTRICT 8], double d3[AA_RESTRICT 8]) |
Dual quaternion multiply d1 by conjugate of d2. | |
AA_API void | aa_tf_duqu_conj (const double d[AA_RESTRICT 8], double dconj[AA_RESTRICT 8]) |
Dual quaternion conjugate. | |
AA_API void | aa_tf_duqu_conj1 (double s[AA_RESTRICT 8]) |
Dual quaternion conjugate, in-place. | |
AA_API void | aa_tf_duqu_exp (const double d[AA_RESTRICT 8], double e[AA_RESTRICT 8]) |
Dual quaternion exponential. | |
AA_API void | aa_tf_duqu_ln (const double d[AA_RESTRICT 8], double e[AA_RESTRICT 8]) |
Dual quaternion natural logarithm. | |
AA_API void | aa_tf_duqu_lnv (const double S[AA_RESTRICT 8], double w[AA_RESTRICT 6]) |
Unit dual quaternion natural logarithm. More... | |
AA_API void | aa_tf_duqu_norm (const double d[AA_RESTRICT 8], double *nreal, double *ndual) |
Dual quaternion norm. | |
AA_API void | aa_tf_duqu_normalize (double d[AA_RESTRICT 8]) |
Dual quaternion normalization. | |
AA_API void | aa_tf_duqu_minimize (double d[AA_RESTRICT 8]) |
Dual quaternion angle minimization. | |
AA_API void | aa_tf_tf_duqu (const double d[AA_RESTRICT 8], const double p0[AA_RESTRICT 3], double p1[AA_RESTRICT 3]) |
Dual quaternion transformation. | |
AA_API void | aa_tf_duqu_tf (const double d[AA_RESTRICT 8], const double p0[AA_RESTRICT 3], double p1[AA_RESTRICT 3]) |
Dual quaternion transformation. | |
AA_API void | aa_tf_duqu_trans (const double d[AA_RESTRICT 8], double v[AA_RESTRICT 3]) |
Extract dual quaternion translation vector. | |
AA_API void | aa_tf_duqu2tfmat (const double d[AA_RESTRICT 8], double T[AA_RESTRICT 12]) |
Convert dual quaternion to transformation matrix. | |
AA_API void | aa_tf_tfmat2duqu (const double T[AA_RESTRICT 12], double d[AA_RESTRICT 8]) |
Convert transformation matrix to dual quaternion. | |
AA_API void | aa_tf_qv2duqu (const double q[AA_RESTRICT 4], const double v[AA_RESTRICT 3], double d[AA_RESTRICT 8]) |
Convert orientation unit quaternion and translation vector to dual quaternion. | |
AA_API void | aa_tf_xyz2duqu (double x, double y, double z, double d[AA_RESTRICT 8]) |
Pure translation dual quaternion. | |
AA_API void | aa_tf_xxyz2duqu (double theta, double x, double y, double z, double d[AA_RESTRICT 8]) |
Convert x angle and translation to dual quaternion. | |
AA_API void | aa_tf_yxyz2duqu (double theta, double x, double y, double z, double d[AA_RESTRICT 8]) |
Convert y angle and translation to dual quaternion. | |
AA_API void | aa_tf_zxyz2duqu (double theta, double x, double y, double z, double d[AA_RESTRICT 8]) |
Convert z angle and translation to dual quaternion. | |
AA_API void | aa_tf_duqu2qv (const double d[AA_RESTRICT 8], double q[AA_RESTRICT 4], double v[AA_RESTRICT 3]) |
Convert dual quaternion to orientation unit quaternion and translation vector. | |
AA_API void | aa_tf_tfmat2av (const double T[12], double q[AA_RESTRICT 4], double v[AA_RESTRICT 3]) |
transformation matrix to quaternion-translation | |
AA_API void | aa_tf_duqu_vel2twist (const double d[AA_RESTRICT 8], const double dx[AA_RESTRICT 6], double t[AA_RESTRICT 8]) |
Dual quaternion twist from velocity. | |
AA_API void | aa_tf_duqu_twist2vel (const double d[AA_RESTRICT 8], const double t[AA_RESTRICT 8], double dx[AA_RESTRICT 6]) |
Dual quaternion twist to velocity. | |
AA_API void | aa_tf_duqu_twist2diff (const double d[AA_RESTRICT 8], const double t[AA_RESTRICT 8], double dd[AA_RESTRICT 8]) |
Dual quaternion twist to derivative. | |
AA_API void | aa_tf_duqu_vel2diff (const double d[AA_RESTRICT 8], const double dx[AA_RESTRICT 6], double dd[AA_RESTRICT 8]) |
Dual quaternion derivative from velocity. | |
AA_API void | aa_tf_duqu_diff2vel (const double d[AA_RESTRICT 8], const double dd[AA_RESTRICT 8], double dx[AA_RESTRICT 6]) |
Dual quaternion derivative to spatial velocity. | |
AA_API void | aa_tf_duqu_diff2twist (const double d[AA_RESTRICT 8], const double dd[AA_RESTRICT 8], double twist[AA_RESTRICT 8]) |
Convert dual quaternion derivative to dual quaternion twist. | |
AA_API void | aa_tf_duqu_stwist (const double d0[AA_RESTRICT 8], const double twist[AA_RESTRICT 8], double dt, double d1[AA_RESTRICT 6]) |
Dual quaternion twist integration. More... | |
AA_API void | aa_tf_duqu_svel (const double d0[AA_RESTRICT 8], const double dx[AA_RESTRICT 6], double dt, double d1[AA_RESTRICT 6]) |
Dual quaternion velocity integration. More... | |
AA_API void | aa_tf_duqu_sdiff (const double d0[AA_RESTRICT 8], const double dd[AA_RESTRICT 8], double dt, double d1[AA_RESTRICT 6]) |
Dual quaternion derivative integration. More... | |
AA_API void | aa_tf_duqu_jac_vel2diff (const double S[8], const struct aa_dmat *Jvel, struct aa_dmat *Js) |
Convert a velocity Jacobian to a dual quaternion derivative Jacobian. More... | |
AA_API void | aa_tf_qln_jac (const double q[4], struct aa_dmat *J) |
Compute the Jacobian of the quaternion logarithm. More... | |
AA_API void | aa_tf_duqu_conj_jac (struct aa_dmat *J) |
Fill J with Jacobian of dual quaternion conjugate. | |
AA_API void | aa_tf_duqu_ln_jac (const double S[8], struct aa_dmat *J) |
Compute the Jacobian of the dual quaternion logarithm. More... | |
AA_API void | aa_tf_duqu2pure (const double S[AA_RESTRICT 8], double v[AA_RESTRICT 6]) |
Convert a pure dual quaternion to conventional dual quaternion. | |
AA_API void | aa_tf_pure2duqu (const double v[AA_RESTRICT 6], double S[AA_RESTRICT 8]) |
Convert a conventional dual quaternion to pure dual quaternion. | |
AA_API void | aa_tf_dhprox2tfmat (double alpha, double a, double d, double phi, double T[AA_RESTRICT 12]) |
Convert proximal DH parameters to transformation matrix. | |
AA_API void | aa_tf_dhprox2duqu (double alpha, double a, double d, double phi, double S[AA_RESTRICT 8]) |
Convert proximal DH parameters to dual quaternion. | |
AA_API void | aa_tf_dhprox2qutr (double alpha, double a, double d, double phi, double E[AA_RESTRICT 7]) |
Convert proximal DH parameters to quaternion-translation. | |
AA_API void | aa_tf_dhprox2qv (double alpha, double a, double d, double phi, double q[AA_RESTRICT 4], double v[3]) |
Convert proximal DH parameters to quaternion-translation. | |
AA_API void | aa_tf_dhdist2tfmat (double alpha, double a, double d, double phi, double T[AA_RESTRICT 12]) |
Convert distal DH parameters to transformation matrix. | |
AA_API void | aa_tf_dhdist2duqu (double alpha, double a, double d, double phi, double S[AA_RESTRICT 8]) |
Convert distal DH parameters to dual quaternion. | |
AA_API void | aa_tf_dhdist2qutr (double alpha, double a, double d, double phi, double E[AA_RESTRICT 7]) |
Convert distal DH parameters to quaternion-translation. | |
AA_API void | aa_tf_dhdist2qv (double alpha, double a, double d, double phi, double q[AA_RESTRICT 4], double v[3]) |
Convert distal DH parameters to quaternion-translation. | |
AA_API void | aa_tf_relx_mean (size_t n, const double *R, const double *X, size_t ldx, const double *Y, size_t ldy, double rel[3]) |
AA_API void | aa_tf_relx_median (size_t n, const double *R, const double *X, size_t ldx, const double *Y, size_t ldy, double rel[3]) |
AA_API void | aa_tf_proj (const double a[AA_RESTRICT 3], const double b[AA_RESTRICT 3], double c[AA_RESTRICT 3]) |
Vector projection of a onto b. More... | |
AA_API void | aa_tf_proj_orth (const double a[AA_RESTRICT 3], const double b[AA_RESTRICT 3], double c[AA_RESTRICT 3]) |
Orthogonal projection of a onto b. More... | |
Variables | |
static const double | aa_tf_ident [12] = AA_TF_IDENT_INITIALIZER |
Identity transformation matrix array. | |
static const double | aa_tf_tfmat_ident [12] = AA_TF_IDENT_INITIALIZER |
Identity transformation matrix array. | |
static const double | aa_tf_rotmat_ident [9] = AA_TF_ROTMAT_IDENT_INITIALIZER |
Identity rotation matrix array. | |
static const double | aa_tf_quat_ident [4] = AA_TF_QUAT_IDENT_INITIALIZER |
Identity quaternion array. | |
static const double | aa_tf_duqu_ident [8] = AA_TF_DUQU_IDENT_INITIALIZER |
Identity dual quaternion array. | |
static const double | aa_tf_qutr_ident [7] = AA_TF_QUTR_IDENT_INITIALIZER |
Identity quaternion-translation array. | |
static const double | aa_tf_axang_ident [4] = AA_TF_AXANG_IDENT_INITIALIZER |
Identity axis-angle array. | |
static const double | aa_tf_rotvec_ident [3] = AA_TF_ROTVEC_IDENT_INITIALIZER |
Identity rotation vector array. | |
static const double | aa_tf_vec_ident [3] = AA_TF_ROTVEC_IDENT_INITIALIZER |
Identity vector-3 array. | |
static const double | aa_tf_vec_x [3] = {1, 0, 0} |
An X axis. | |
static const double | aa_tf_vec_y [3] = {0, 1, 0} |
A Y axis. | |
static const double | aa_tf_vec_z [3] = {0, 0, 1} |
A Z axis. | |
Low-level operations for SE(3) orientations and transformations.
Definition in file spatial.h.
#define AA_TF_CROSSX | ( | a, | |
b, | |||
c | |||
) |
#define AA_TF_DEF_EULER | ( | letters | ) |
Create declarations for Euler angle conversion functions.
#define AA_TF_DEF_SERIES | ( | name, | |
a0, | |||
a1, | |||
a2 | |||
) |
Define an inline function for a series using Horner's rule.
name | pre-mangled name for the function |
a0 | zero-order coefficient |
a1 | first-order coefficient |
a2 | second-order coefficient |
#define AA_TF_DOTX | ( | a, | |
b | |||
) | ((a)[0]*(b)[0] + (a)[1]*(b)[1] + (a)[2]*(b)[2]) |
AA_API void aa_tf_duqu_jac_vel2diff | ( | const double | S[8], |
const struct aa_dmat * | Jvel, | ||
struct aa_dmat * | Js | ||
) |
Convert a velocity Jacobian to a dual quaternion derivative Jacobian.
The velocity Jacobian Jvel relates velocities to configurations:
\[ \begin{bmatrix}\omega \\ \dot v\end{bmatrix} = \mathbf{J}_{\rm vel} \dot{\phi} \]
The derivative Jacobian Js relates the dual quaternion derivative to configurations:
\[ \dot{S} = \mathbf{J}_S \dot{\phi} \]
S | The pose as a dual quaternion |
Jvel | The velocity Jacobian |
Js | The dual quaternion derivative Jacobian |
Compute the Jacobian of the dual quaternion logarithm.
[in] | S | The quaternion |
[out] | J | Storage for the Jacobian, 8x8 matrix |
AA_API void aa_tf_duqu_lnv | ( | const double | S[AA_RESTRICT 8], |
double | w[AA_RESTRICT 6] | ||
) |
Unit dual quaternion natural logarithm.
Result is a pure dual quaterion.
AA_API void aa_tf_duqu_sdiff | ( | const double | d0[AA_RESTRICT 8], |
const double | dd[AA_RESTRICT 8], | ||
double | dt, | ||
double | d1[AA_RESTRICT 6] | ||
) |
Dual quaternion derivative integration.
d0 | initial position, dual quaternion |
dd | dual quaternion derivative |
dt | time step |
d1 | final position, dual quaternion |
AA_API void aa_tf_duqu_stwist | ( | const double | d0[AA_RESTRICT 8], |
const double | twist[AA_RESTRICT 8], | ||
double | dt, | ||
double | d1[AA_RESTRICT 6] | ||
) |
Dual quaternion twist integration.
d0 | initial position, dual quaternion |
twist | dual quaternion twist |
dt | time step |
d1 | final position, dual quaternion |
AA_API void aa_tf_duqu_svel | ( | const double | d0[AA_RESTRICT 8], |
const double | dx[AA_RESTRICT 6], | ||
double | dt, | ||
double | d1[AA_RESTRICT 6] | ||
) |
Dual quaternion velocity integration.
d0 | initial position, dual quaternion |
dx | spatial velocity |
dt | time step |
d1 | final position, dual quaternion |
AA_API void aa_tf_proj | ( | const double | a[AA_RESTRICT 3], |
const double | b[AA_RESTRICT 3], | ||
double | c[AA_RESTRICT 3] | ||
) |
Vector projection of a onto b.
\[ \vec{c} = \mathrm{proj}_\vec{b}(\vec{a}) = \frac{\vec{a} \cdot \vec{b}}{\vec{b} \cdot \vec{b}} \vec{b} \]
AA_API void aa_tf_proj_orth | ( | const double | a[AA_RESTRICT 3], |
const double | b[AA_RESTRICT 3], | ||
double | c[AA_RESTRICT 3] | ||
) |
Orthogonal projection of a onto b.
\[ \vec{c} = \vec{a} - \mathrm{proj}_\vec{b}(\vec{a}) \]
AA_API double aa_tf_qangle | ( | const double | q[AA_RESTRICT 4] | ) |
Return the angle of the quaternion.
Note that this result is half the 3D angle.
AA_API void aa_tf_qdpexp | ( | const double | e[AA_RESTRICT 3], |
const double | de[AA_RESTRICT 3], | ||
double | dq[AA_RESTRICT 4] | ||
) |
Derivative of the Pure Quaternion Exponential.
e | A pure quaternion |
de | The derivative of e |
dq | The derivative of exp(e) |
AA_API void aa_tf_qdpexpj | ( | const double | e[AA_RESTRICT 3], |
const double | de[AA_RESTRICT 3], | ||
double | dq[AA_RESTRICT 4] | ||
) |
Derivative of the Pure Quaternion Exponential, computed via Jacobian.
e | A pure quaternion |
de | The derivative of e |
dq | The derivative of exp(e) |
AA_API void aa_tf_qduln | ( | const double | q[AA_RESTRICT 4], |
const double | dq[AA_RESTRICT 4], | ||
double | dln[AA_RESTRICT 3] | ||
) |
Derivative of the Unit Quaternion Logarithm.
q | A unit quaternion |
dq | The derivative of q |
dln | The derivative of ln(dq) |
AA_API void aa_tf_qdulnj | ( | const double | q[AA_RESTRICT 4], |
const double | dq[AA_RESTRICT 4], | ||
double | dln[AA_RESTRICT 3] | ||
) |
Derivative of the Unit Quaternion Logarithm, computed via Jacobian.
q | A unit quaternion |
dq | The derivative of q |
dln | The derivative of ln(dq) |
Compute the Jacobian of the quaternion logarithm.
[in] | q | The quaternion |
[out] | J | Storage for the Jacobian, 4x4 matrix |
Construct matrix for right quaternion multiply.
p*q = M*p
AA_API void aa_tf_qmatrix_r | ( | const double * | q, |
double * | M, | ||
size_t | ldm | ||
) |
Construct matrix for right quaternion multiply.
p*q = M*p
AA_API void aa_tf_qminimize | ( | double | q[AA_RESTRICT 4] | ) |
Minimize angle represented by the quaternion.
This puts the quaternion in the right-hand side of the complex plane. Its w value will be positive.
AA_API void aa_tf_qminimize2 | ( | const double | q[AA_RESTRICT 4], |
double | qmin[AA_RESTRICT 4] | ||
) |
Minimize angle represented by the quaternion.
This puts the quaternion in the right-hand side of the complex plane. Its w value will be positive.
AA_API void aa_tf_qnormalize | ( | double | q[AA_RESTRICT 4] | ) |
Normalize Quaternion.
\[ \bf{q} \leftarrow \frac{\bf q}{\Arrowvert {\bf q} \Arrowvert} \]
AA_API void aa_tf_qrel | ( | const double | q1[AA_RESTRICT 4], |
const double | q2[AA_RESTRICT 4], | ||
double | q_rel[AA_RESTRICT 4] | ||
) |
Relative orientation.
\[ q_{\rm rel} = q_1 q_2^{-1} \]
AA_API void aa_tf_qrk1 | ( | const double | q0[AA_RESTRICT 4], |
const double | dq[AA_RESTRICT 4], | ||
double | dt, | ||
double | q1[AA_RESTRICT 4] | ||
) |
Integrate unit quaternion, Runge-Kutta-1 (euler) integration.
q0 | Initial rotation quaternion |
dq | Quaternion derivative |
dt | Time step |
q1 | Final rotation quaternion |
AA_API void aa_tf_qsacc | ( | const double | q0[AA_RESTRICT 4], |
const double | v[AA_RESTRICT 3], | ||
const double | a[AA_RESTRICT 3], | ||
double | dt, | ||
double | q1[AA_RESTRICT 4] | ||
) |
Integrate unit quaternion from velocity and acceleration.
q0 | Initial rotation quaternion |
v | angular velocity |
a | angular acceleration |
dt | Time step |
q1 | Final rotation quaternion |
AA_API void aa_tf_qsacc_rk | ( | const double | q0[AA_RESTRICT 4], |
const double | v[AA_RESTRICT 3], | ||
const double | a[AA_RESTRICT 3], | ||
double | dt, | ||
double | q1[AA_RESTRICT 4] | ||
) |
Runge-kutta integration of unit quaternion from velocity and acceleration.
This is a test function.
q0 | Initial rotation quaternion |
v | angular velocity |
a | angular acceleration |
dt | Time step |
q1 | Final rotation quaternion |
AA_API void aa_tf_qscal | ( | double | q[AA_RESTRICT 4], |
double | alpha | ||
) |
Scale a quaternion.
\[ \bf{q} \leftarrow \alpha {\bf q} \]
AA_API void aa_tf_qsdiff | ( | const double | q0[AA_RESTRICT 4], |
const double | dq[AA_RESTRICT 4], | ||
double | dt, | ||
double | q1[AA_RESTRICT 4] | ||
) |
Integrate unit quaternion from quaternion derivative.
q0 | Initial rotation quaternion |
dq | Quaternion derivative |
dt | Time step |
q1 | Final rotation quaternion |
AA_API void aa_tf_qslerpdiff | ( | double | tau, |
const double | a[AA_RESTRICT 4], | ||
const double | b[AA_RESTRICT 4], | ||
double | c[AA_RESTRICT 4] | ||
) |
Derivative of quaternation SLERP WRT tau.
This is NOT a time derivative. Use the chain rule: (dq/dt = * (dq/dtau)*(dt/dtau) )
AA_API void aa_tf_qsvel | ( | const double | q0[AA_RESTRICT 4], |
const double | v[AA_RESTRICT 3], | ||
double | dt, | ||
double | q1[AA_RESTRICT 4] | ||
) |
Integrate unit quaternion from constant angular velocity.
q0 | Initial rotation quaternion |
v | Rotational velocity |
dt | Time step |
q1 | Final rotation quaternion |
AA_API void aa_tf_quat_davenport | ( | size_t | n, |
const double * | w, | ||
const double * | Q, | ||
size_t | ldq, | ||
double * | y | ||
) |
Weighted average quaternion using Davenport's q-method.
n | number of quaternions |
w | weights |
Q | array of quaternions |
ldq | leading dimension of Q |
y | average quaternion |
AA_API void aa_tf_qv_conj | ( | const double | q[AA_RESTRICT 4], |
const double | v[AA_RESTRICT 3], | ||
double | qc[AA_RESTRICT 4], | ||
double | vc[AA_RESTRICT 3] | ||
) |
Invert transform.
Unit quaternion inverse is equal to the conjuage
AA_API void aa_tf_qvelrk1 | ( | const double | q0[AA_RESTRICT 4], |
const double | v[AA_RESTRICT 3], | ||
double | dt, | ||
double | q1[AA_RESTRICT 4] | ||
) |
Integrate unit quaternion from angular velocity, Runge-Kutta-1 (euler) integration.
q0 | Initial rotation quaternion |
v | Rotational velocity |
dt | Time step |
q1 | Final rotation quaternion |
AA_API void aa_tf_qvelrk4 | ( | const double | q0[AA_RESTRICT 4], |
const double | v[AA_RESTRICT 3], | ||
double | dt, | ||
double | q1[AA_RESTRICT 4] | ||
) |
Integrate unit quaternion from angular velocity, Runge-Kutta-4 (euler) integration.
q0 | Initial rotation quaternion |
v | Rotational velocity |
dt | Time step |
q1 | Final rotation quaternion |
AA_API void aa_tf_rotmat_imul | ( | const double | R0[AA_RESTRICT 9], |
const double | R1[AA_RESTRICT 9], | ||
double | R[AA_RESTRICT 9] | ||
) |
Multiple inverse of R0 by R1.
\[ R = ({R_0}^{-1}) * (R_1) \]
AA_API void aa_tf_rotmat_muli | ( | const double | R0[AA_RESTRICT 9], |
const double | R1[AA_RESTRICT 9], | ||
double | R[AA_RESTRICT 9] | ||
) |
Multiple R1 by inverse of R1.
\[ R = ({R_0}) * ({R_1}^{-1}) \]
|
inlinestatic |
AA_API void aa_tf_skewsym_scal2 | ( | double | a, |
double | b, | ||
const double | u[3], | ||
double | R[9] | ||
) |
Construct a skew-symmetric matrix.
\[ I + a*[u] + b*[u]^2 \]
where
\[ [u] = \begin{bmatrix} 0 & -u_2 & u_1 \\ u_2 & 0 & -u_0 \\ -u_1 & u_0 & 0 \end{bmatrix} \]
AA_API void aa_tf_tfmat2_imul | ( | const double | R0[AA_RESTRICT 9], |
const double | v0[AA_RESTRICT 3], | ||
const double | R1[AA_RESTRICT 9], | ||
const double | v1[AA_RESTRICT 3], | ||
double | R[AA_RESTRICT 9], | ||
double | v[AA_RESTRICT 3] | ||
) |
Multiple inverse of transform (R0,v0) by transform (R1,v1).
\[ (R,v) = \left(\left(R_0,v_0\right)^{-1}\right) * ({R_1},v_1) \]
AA_API void aa_tf_tfmat2_muli | ( | const double | R0[AA_RESTRICT 9], |
const double | v0[AA_RESTRICT 3], | ||
const double | R1[AA_RESTRICT 9], | ||
const double | v1[AA_RESTRICT 3], | ||
double | R[AA_RESTRICT 9], | ||
double | v[AA_RESTRICT 3] | ||
) |
Multiple (R0,v0) by inverse of transform transform (R1,v1).
\[ (R,v) = ({R_0},v_0) \left(\left(R_1,v_1\right)^{-1}\right) \]
AA_API void aa_tf_tfmat_imul | ( | const double | T0[AA_RESTRICT 12], |
const double | T1[AA_RESTRICT 12], | ||
double | T[AA_RESTRICT 12] | ||
) |
Multiple inverse of T0 by T1.
\[ T = ({T_0}^{-1}) * (T_1) \]
AA_API void aa_tf_tfmat_muli | ( | const double | T0[AA_RESTRICT 12], |
const double | T1[AA_RESTRICT 12], | ||
double | T[AA_RESTRICT 12] | ||
) |
Multiple T1 by inverse of T1.
\[ T = ({T_0}) * ({T_1}^{-1}) \]