在學習《機械人學》的時候,常常遇到轉換矩陣 ba
t 這樣的表示,意思是座標系
轉換到座標系
的轉換矩陣,在程式設計的時候我通常都會寫作tab
,如果給定了多個關節的dh參數列,有時候需要同時計算多個轉換矩陣,為了利用for
迴圈來簡化**,可以利用元胞陣列(cell
)進行輸出
dh = [...]; %dh參數列設定
link = size(dh,1); %取dh表的列數,即所需求解的轉換矩陣個數
for k=1:link
t = transmata(dh(k,:)'); %transmata是乙個自定義的轉換矩陣求解函式
endt10 = t;
t21 = t;
t32 = t;
t43 = t;
t54 = t;
t65 = t;
但是更多的情況下,我們更希望下面的賦值也能夠自動進行,即我們希望變數名也能動態變化,那麼就需要用到eval
命令,該命令的作用是「執行文字字串中的 matlab 表示式」,即事先將命令儲存到字串型別的變數中,再利用該函式執行,常用於不同型別資料的變數迴圈賦值,這與元胞陣列的設計初衷類似,但是定製的空間更大(元胞陣列的話只能定義數值型的行列座標,而用eval
命令可以定製任意的下標)
for k=1:link
t_temp = transmata(dh(k,:)');
str = (['
t',num2str(k-1),num2str(k),'= t_temp',';']);
eval(str)
end
附上transmat
函式和transmata
函式
function
t = transmata
(x)%% 請注意連環相乘矩陣的順序(序數大的在後面) ${}^0_nt = {}^0_1t{}^1_2t\cdots{}^_t{}^_nt$
%這個函式是根據dh表求解轉換矩陣
%變數x=[alpha_i-1;a_i-1;d_i;theta_i]
z = zeros(3,1);
a1 = [x(1);0;0];
t1 = transmat(a1,z);
p2 = [x(2);0;0];
t2 = transmat(z,p2);
a3 = [0;0;x(4)];
t3 = transmat(a3,z);
p4 = [0;0;x(3)];
t4 = transmat(z,p4);
t = t1 * t2 * t3 * t4;
end
function
t= transmat
(x,p,flag)
% t = transmat(x,p,flag) 角度位移求解轉換矩陣
% x=[alpha;beta;gamma] xyz順序旋轉角度,當flag=0(預設)時以尤拉角求解,當flag=1時以固定軸角求解
% p=[x;y;z] 兩座標軸之間的平移量
% flag 如前所述
% transmat(x,p) 以尤拉角求解轉移矩陣(transmat(x,p,0)也行)
% transmat(x,p,1) 以固定軸角度求解轉移矩陣
% hu 2017-8-17
if (nargin < 3)
flag = 0;
endrotx = [100
0 cos(x(1)) -sin(x(1))
0 sin(x(1)) cos(x(1))];
roty = [cos(x(2)) 0 sin(x(2))
010-sin(x(2)) 0 cos(x(2))];
rotz = [cos(x(3)) -sin(x(3)) 0
sin(x(3)) cos(x(3)) 000
1];switch flag
case
1%fixed angle
r = rotz * roty * rotx;
case
0%euler angle(default)
r = rotx * roty * rotz;
endt = [r p;
0001];end
Matlab 中類的定義
2.2 properties 塊 2.3 methods 塊 2.4 events 塊 2.5 enumeration 類 在 matlab 中定義乙個名為 classname 類,需要在類名之前用classdef關鍵字來宣告,並以end結束類的定義。classdef語句之前除了空行和注釋不能有其它...
matlab中動態變數命名及賦值高階
在了解到eval 函式所實現功能的基礎上,可以把動態變數命名的問題轉換為如何通過迴圈構造合適的字串,再把字串作為eval 的輸入執行即可。程式示例如下 clear clc for set1 1 10for jklove 1 10for kapa 1 50fun hice phiinkecejjj s...
Matlab中的類定義 classdef
matlab也可以寫物件導向的 首先表現在可以定義類,以及可以繼承,使用類 class 有很多好處,其中乙個重要的好處便是解決變數名衝突和讓函式 物件的結構清晰。class的static function可以在不定義類的例項直接呼叫類的成員函式,比如定義 classdef tools handle ...