求饒不經過原點的旋轉軸的旋轉矩陣

2021-08-28 05:07:17 字數 2606 閱讀 8513

看《機械人導論》中關於齊次變換的內容中,發現饒軸旋轉的時候,分為兩種情況。一、饒經過原點的軸進行旋轉;二、饒不經過原點的旋轉軸進行旋轉。其實這兩種情況下,採用旋轉向量 和 旋轉矩陣的相互轉換的幾種方法 這裡面的方法都是可以求到旋轉矩陣的,但是這兩種旋轉方式中的變換矩陣中的位置矩陣是不一樣的。饒經過原點的軸進行旋轉的變換矩陣,由於原點的位置沒有發生改變,所以變換矩陣中的位置矩陣是零,而第二種方法中的由於旋轉軸不在原點,由此變換矩陣中的位置矩陣不為零。

可以參考這裡的描述[繞任意軸旋轉],這裡求出的是4*4的變換矩陣(

[繞任意軸旋轉],這裡求出的是3*3的變換矩陣(

function testtest()

%% 起始位姿矩陣

t1= [ -0.0008 , -0.0005 , 0.0004 , 0.2113,

0.0004, -0.0009 , -0.0002 , 0.0202,

0.0004 , -0.0000 , 0.0009 , 1.2244,

0 , 0 , 0 , 0.0010];

t= 1.0e+03 *t1;

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_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);

t_2_1=[eye(3),p2; 0 0 0 1];

t_2=[r_3,zeros(3,1);0 0 0 1];

t_2_2=[eye(3),-p2; 0 0 0 1];

t_2=t_2_1*t_2*t_2_2;

%% 基於旋量求得的變換矩陣

disp(r_1)

%% 基於《機械人導論》中介紹的方法求得的變換矩陣

disp(t_2)

disp(r_1*t)

disp(t_2*t)

%% 從下面結果可以看出兩者是一致的

0.8667 0.4397 -0.2356 -0.0394

-0.4306 0.8979 0.0917 0.3600

0.2518 0.0220 0.9675 -0.1984

0 0 0 1.0000

0.8667 0.4397 -0.2356 -0.0394

-0.4306 0.8979 0.0917 0.3600

0.2518 0.0220 0.9675 -0.1984

0 0 0 1.0000

1.0e+03 *

-0.0006 -0.0008 0.0000 -0.0965

0.0007 -0.0006 -0.0003 0.0397

0.0002 -0.0001 0.0010 1.2381

0 0 0 0.0010

1.0e+03 *

-0.0006 -0.0008 0.0000 -0.0965

0.0007 -0.0006 -0.0003 0.0397

0.0002 -0.0001 0.0010 1.2381

0 0 0 0.0010

補充:如果不乘t_2_1 和 t_2_2 那麼理論上得到的結果是旋轉軸並不是由 p1 p2確定的旋轉軸,而是由 pp 和 座標系原點確定的座標軸。饒軸旋轉的半徑是 起點到旋轉軸的直線距離。

旋轉矩陣的性質

學過矩陣理論或者線性代數的肯定知道正交矩陣 orthogonal matrix 是乙個非常好的矩陣,為什麼這麼說?原因有一下幾點 正交矩陣每一列都是單位向量,並且兩兩正交。最簡單的正交矩陣就是單位陣。正交矩陣的逆 inverse 等於正交矩陣的轉置 transpose 同時可以推論出正交矩陣的行列式...

旋轉矩陣的演算法

旋轉矩陣是計算機圖形學裡面的基礎內容。之前我還寫過一篇計算機圖形學基礎知識的總結 操作的步驟可以分為兩部,一是沿正對角線對稱,二是沿水平對稱軸對稱 原圖 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 第一步之後 1 5 9 13 2 6 10 14 3 7 11 15...

根據旋轉前後的向量求旋轉矩陣

在cloundcompare開源裡有矩陣的對應介面,親測可用,非常準確,把 貼下面供開發者使用。其中的dot函式是三維向量的點積函式 附內部實現inline type dot const vector3tpl v const static ccglmatrixtplfromtorotation co...