验证四元数球面线性插值的过程,观察旋转过程中旋转轴和角度的变化,与轴角插补对比。
插补过程不再赘述,可参考后面的链接。
matlab 代码:
%% 四元数球面线性插值,验证插值角度和旋转轴的变化
% 1. 从基坐标系Base_A 转到 B
% 2. 从随意选择的Sele_A 坐标系转到 B
close all;
Base_A = transl(0,0,0) * rpy2tr(0,0,0);
Sele_A = transl(1,2,3) * rpy2tr(pi/1,pi/2,pi/2);
Sele_A_R_Start = Sele_A(1:3,1:3,1);
B = transl(2,3,4) * rpy2tr(pi/3,pi/3,pi/3);
Start_end_R = inv(Sele_A_R_Start) * B(1:3,1:3,1);
T = trinterp(Sele_A,B,20);%球面线性插值
R = ones(3,3,2);
for i = 1:20
hold on
trplot(T(:,:,i))
R1 = T(1:3,1:3,i);
R(:,:,i) = inv(Sele_A_R_Start) * R1;
end
grid on
title("旋转的过程");
%[angle, axis] = tr2angvec(T);
[angle, axis] = tr2angvec(R);
figure
plot(angle)
title("旋转的角度变化");
旋转过程:
角度变化:
插补后的旋转是基于基坐标的轴角,需转为起始坐标系的表示,转换过程参考OROCOS中旋转插补的Pos计算。
转换后的角度变化:
旋转轴的变化:
总结:
旋转过程是绕固定转轴,角度连续变化。
参考:
1.计算物体姿态旋转_基于单位四元数的姿态插补(Matlab)_收藏菌的博客-优快云博客