最近在做旋轉向量轉旋轉矩陣的,嘗試了幾種方法,現在總結一下,方便以後使用,下面幾種方法求出來的旋轉矩陣都是一樣的,但是在使用之前需要對旋轉向量進行單位化。
%% 給定旋轉角度和旋轉向量
pi=3.1415926;
qq_1= - pi/6;
p1=[0.8;0.6;0.5];
p2=[1;2;3];
pp=p2-p1;
%% 對旋轉向量進行單位化
pp=pp/sqrt( pp(1)^2 + pp(2)^2 + pp(3)^2 );
%% 採用旋量法進行求解旋轉矩陣,並且把位置也考慮了進去
w_1=pp; %每個關節轉軸在全域性座標系中的方向
r_1=p2; %旋量中一點在全域性座標系中的位置,旋轉軸上的任意位置都是可以的
c_1=[cross(r_1,w_1);w_1];
r_1 = c_poe(c_1,qq_1); %
%% 採用羅德里格斯公式, 需要進行單位化,不進行單位化的話,算出來的結果是不一樣的
r_2= cos(qq_1)*eye(3) + (1 - cos(qq_1) )* pp *pp' + sin(qq_1) *anti_matrix(pp);
%% 採用《機械人學:建模、規劃、控制》中的旋轉變換矩陣, 也是需要進行單位化,不進行單位化的話,算出來的結果是不一樣的
r_3=zeros(3,3);
r_3(1,1)=pp(1)^2 *(1 - cos(qq_1)) + cos(qq_1);
r_3(1,2)=pp(1)*pp(2) *(1 - cos(qq_1)) - pp(3)*sin(qq_1);
r_3(1,3)=pp(1)*pp(3) *(1 - cos(qq_1)) + pp(2)*sin(qq_1);
r_3(2,1)=pp(1)*pp(2) *(1 - cos(qq_1)) + pp(3)*sin(qq_1);
r_3(2,2)=pp(2)^2 *(1 - cos(qq_1)) + cos(qq_1);
r_3(2,3)=pp(2)*pp(3) *(1 - cos(qq_1)) - pp(1)*sin(qq_1);
r_3(3,1)=pp(1)*pp(3) *(1 - cos(qq_1)) - pp(2)*sin(qq_1);
r_3(3,2)=pp(2)*pp(3) *(1 - cos(qq_1)) + pp(1)*sin(qq_1);
r_3(3,3)=pp(3)^2 *(1 - cos(qq_1)) + cos(qq_1);
%% 採用matlab 中的庫進行操作,不需要進行單位化
axang = [pp(1) pp(2) pp(3) qq_1]; %% 不進行單位化也是可以的
r_4= axang2rotm(axang);
%% 指數積公式
function pm = c_poe(vs,theta)
v=vs(1:3);
w=vs(4:6);
if(norm(w)<1e-10)
pm=[
eye(3) ,v(:)*theta
zeros(1,3),1];
else
r = eye(3) + sin(theta)*anti_matrix(w) + (1-cos(theta))*anti_matrix(w)*anti_matrix(w);
p = (eye(3)-r)*anti_matrix(w)*v + theta * w' * v * w;
pm=[
r , p
zeros(1,3) , 1 ];
endend
% 求反對稱矩陣
function c3 = anti_matrix(w)
c3=[
0 -w(3) w(2)
w(3) 0 -w(1)
-w(2) w(1) 0 ];
end指數積公式c++版
void anti_matrix(vector3d&w, matrix3d& r)
void poe(vectorxd &vs,double theta,matrix4d &t )
else
t << r(0, 0), r(0, 1), r(0, 2), p(0),
r(1, 0), r(1, 1), r(1, 2), p(1),
r(2, 0), r(2, 1), r(2, 2), p(2),
0, 0, 0, 1;
}int main(int *argc, int ** argv)
尤拉角和旋轉矩陣相互轉換
尤拉角和旋轉矩陣可同樣表示剛體在三維空間的旋轉,下面分享這兩者互相轉換的方法和核心 功能 1.通過給定的尤拉角計算對應的旋轉矩陣 日期 2017 10 12 mat euleranglestorotationmatrix vec3f theta 功能 1.檢查是否是旋轉矩陣 日期 2017 10 1...
尤拉角和旋轉矩陣相互轉換
目錄 1.參考資料 2.變換矩陣 f h的svd分解或者旋轉矩陣 平移矩陣求解 3.尤拉角和旋轉矩陣可同樣表示剛體在三維空間的旋轉,下面分享這兩者互相轉換的方法和核心 尤拉角計算對應的旋轉矩陣 mat euleranglestorotationmatrix vec3f theta 功能 檢查是否是旋...
根據旋轉前後的向量求旋轉矩陣
在cloundcompare開源裡有矩陣的對應介面,親測可用,非常準確,把 貼下面供開發者使用。其中的dot函式是三維向量的點積函式 附內部實現inline type dot const vector3tpl v const static ccglmatrixtplfromtorotation co...