旋轉向量 和 旋轉矩陣的相互轉換的幾種方法

2021-08-28 04:50:19 字數 2314 閱讀 9472

最近在做旋轉向量轉旋轉矩陣的,嘗試了幾種方法,現在總結一下,方便以後使用,下面幾種方法求出來的旋轉矩陣都是一樣的,但是在使用之前需要對旋轉向量進行單位化。

%% 給定旋轉角度和旋轉向量

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...