1%> @brief
this function calculates the difference between estimated and
true
2%> orientations. the initial yaw is aligned first.
4%> @param ori_est - estimated orientations (quaternion vector)
5%> @param ori_true -
true orientations (quaternion vector)
7%> @retval d - orientation differences in degrees (vector)
8%> @retval ori_est - estimated orientations after yaw alignment (quaternion vector)
12%> @copyright see the file @ref LICENSE in the root directory of the repository
13function [d, ori_est] =
oriDiff(ori_est, ori_true)
16 ori_est (:,1) quaternion
17 ori_true (:,1) quaternion
20assert(length(ori_est) == length(ori_true),
"Length of orientations must be equal");
22% initial reference yaw
23ref_yaw = ori_true(1).eulerd(
"ZYX",
"frame");
26% Initial estimation yaw
27est_yaw = ori_est(1).eulerd(
"ZYX",
"frame");
31diff = ref_yaw - est_yaw;
32q_corr = quaternion([diff,0,0],
"eulerd",
"ZYX",
"frame");
35ori_est = q_corr .* ori_est;
37% calculate differences
38d = ori_est.conj .* ori_true;
40% get absolute differende
41d = 2*acos(d.normalize.parts) * 180 / pi;
42d = mod(d + 180, 360) - 180;
function oriDiff(in ori_est, in ori_true)