平移與旋轉組合
總結參考資料
本文主要介紹如何使用matlab工具箱對旋轉和平移進行操作。這裡使用的rtb工具箱10.2版本,不同版本間**風格可能會有差異,因此請注意工具箱的使用版本。
本部分的一些理論說明可參考旋轉矩陣、尤拉角、四元數理論及其轉換關係
close all;clc;clear;
%% 旋轉
%% 以下為旋轉矩陣表示法
% 繞x旋轉90度
rx = rotx(90);
% 繞y旋轉90度
ry = roty(90);
% 繞z旋轉90度
rz = rotz(90);
% 繪製旋轉後的座標系
trplot(rx);
% 繪製世界座標到rx的動畫過程
tranimate(rx);
% 兩個旋轉的疊加, 即先繞世界座標系的x軸轉90度,
% 再沿當前座標系的y軸轉動90度
figure;
rxy = rx*ry;
tranimate(rxy);
這部分比較直觀,**注釋已經寫得非常清楚了。
關於旋轉矩陣,值得說明的一點是,有的人分不清什麼時候左乘,什麼時候右乘,其實很簡單:以當前座標系的軸旋轉,就右乘;以世界座標系的軸旋轉,就左乘
%% zyz尤拉角————奇異點y=0,有多解
r_zyz = eul2r(15,30,60); %這裡輸入是角度制
gamma = tr2eul(r_zyz); %這裡輸出是弧度制
% 等同於下式:
r_zyz = rotz(15)*roty(30)*rotz(60);
% 角度制與弧度制的相互轉化
gamma2=rad2deg(gamma);
gamma3=deg2rad(gamma2);
這裡有乙個值得注意的問題:尤拉角轉旋轉矩陣的輸入是角度制的,而旋轉矩陣轉尤拉角的輸出卻是弧度制,當然這跟工具箱的版本有關,用的時候要先確認一下輸入輸出的單位到底是弧度還是角度!
另外要指出的是,尤拉角的表示不唯一,並且當第二個旋轉角(即y對應的旋轉角度)為0時,尤拉角的表示發生奇異,這一點尤其要注意。
%% rpy角——————attention 奇異點p=+-90,無多解
r_rpy = rpy2r(15,30,60); %這裡輸入是角度制
rpy = tr2rpy(r_rpy); %這裡輸出是弧度制
rpy2=rad2deg(rpy);
% 等同於下式:
r_rpy2 = rotz(60)*roty(30)*rotx(15);
rpy角和zyz尤拉角同樣有相似問題,但是解決了表示的不唯一問題,而且奇異點發生在p=±90°的位置。
另外乙個值得注意的地方是,rpy2r的輸入對應的順序是pitch-yaw-roll,這與kdl等庫中的順序不同。
%% 角軸
[theta , v] = tr2an**ec(rpy2r(15,30,60)); %theta為弧度制
r_an**ec = an**ec2r(theta, v );
%% 四元數
q = dcm2quat( rpy2r(15,30,60) ); %aerospace toolbox
r_quat = quat2dcm(q); %aerospace toolbox
% rtb 四元數類
q = quaternion( q ); %建構函式,把1x4的向量轉成四元數類,方便運算
q.display; %顯示四元數
q.double; %四元數轉化為向量
q.matrix; %四元數轉化為反對稱矩陣
q.inv; %四元數的逆
q.norm; %四元數的模長
q.unit; %四元數單位化
% rtb 單位四元數類
q = unitquaternion( r_quat );
r_uquat = q.r; %單位四元數轉化為旋轉矩陣
t_uquat = q.t; %單位四元數轉化為齊次變換矩陣
eular = q.toeul; %單位四元數轉化為尤拉角
rpy =q.torpy; %單位四元數轉化為rpy
[ang,v] = q.toan**ec; %單位四元數轉化為角軸
vec = q*[1 0 0 ]' ; %用單位四元數直接對向量進行旋轉操作
vec_2 = q* rotx(90); %用單位四元數直接對旋轉矩陣進行旋轉操作
q.plot() %繪製四元數代表的座標
值得注意的是,rtbv10.2版本的quaternion和unitquaternion分離開了,這在示例**中有所體現,和一些參考書中的介紹可能會有所不同。所以說,matlab機械人工具箱版本不一樣,有些東西差距確實很大。
另外,在**開頭也展示了另乙個工具箱(aerospace toolbox)四元數部分的介紹,用起來也很方便。
%% 旋轉與平移
% 純平移
t_transl = transl(1,0,0); %旋轉不變,沿x軸平移1的齊次變換矩陣
% 純旋轉
t_rot = trotx(90); %不移動,繞x軸轉動90度
% 組合
t = transl(1,0,0) * trotx(90); % 先沿x方向移動1,再繞當前的x軸轉動90度
%提取旋轉部分
rot = t2r(t);
%提取平移部分
tans = transl(t);
% 繪圖
figure;
trplot(t);
% 繪製動畫
figure;
tranimate(t);
機械人學、機器視覺與控制——matlab演算法基礎.電子工業出版社.2017-11-20
matlab機械人工具箱學習
選了機械人的課,作業需要用matlab機械人工具箱robotic toolbox。作業要求是搭建乙個機械臂,然後在工作空間某個平面內寫乙個字,涉及到機械人的軌跡規劃,求逆解。步驟 1.搭建四軸scara機械人 dh模型i ad 1 02250 1 201750 23 00d0 4000 3 建立機械...
Matlab機械人工具箱(二)
上一章主要介紹了在二維和三維空間中如何描述位姿。這一章則將上章拓展到物件,其位姿是時間的函式。分兩個部分,第乙個部分主要討論如何產生一系列短暫的位姿序列,一條足夠光滑的從起始位姿到終止位姿的軌跡 第二部分主要討論位姿改變速率的概念,即其導數,以及如何將從機械學角度比如速度和角速度等方面將這些概念 聯...
MATLAB機械人工具箱 1
工具箱版本不同下面的函式呼叫格式會有微弱不同但是大體一樣。以機械臂運動規劃分析為例子 1.link 呼叫格式 l link theta d a alpha sigma offset convention 其中theta為關節角,d為連桿偏移量,a為連桿長度,alpha為連桿轉角,sigma代表關節型...