ニューラルネットワークを使用したロボット複合体のマルチリンクマニピュレータの制御

前書き

ロボットのモーションコントロールシステムをシミュレートする場合、アクチュエータのキネマティクスとダイナミクスの問題を解決する必要があります。キネマティクスには逆の問題と直接的な問題があります。キネマティクスの直接的な問題は、一般化された座標の既知の値によって、原則として、ロボットマニピュレーターの作業ツールの特徴的なポイントの空間的な位置と方向を決定することです。キネマティクスの逆問題は、直接問題と同様に、キネマティック分析と合成の主要な問題の1つです。リンクの位置とマニピュレータの作業ツールの向きを制御するには、運動学の逆の問題を解決する必要があります。

逆運動学の問題を解決するための分析的アプローチのほとんどは、計算手順の点で非常に高価です。代替アプローチの1つは、ニューラルネットワークの使用です。入力データ。表1に示すパラメーターを持つ3リンクマニピュレーターについて考えてみます。

A

アルファ

D

テッタ

0

pi / 2

0.2

0

0.4

0

0

0

0.4

0

0

0

表1-リンクマニピュレータのDHパラメータ

MatLab環境では、無料のRobotics Toolboxを使用して、3リンクマニピュレーターのコンピューターモデルが構築されます。以下は、表1のパラメーターA、Alfa、およびDの値を「L」配列に割り当てるMatLabスクリプトのフラグメントです。このモデルの場合、これらは定数値であり、マニピュレーターを操作する過程で変化しません。Tettaパラメーターを変数 'initialPose_left'(マニピュレーターの初期位置)に割り当てます。 

function [L,initialPose_left,baseL] =model3z 
%   
initialPose_left = deg2rad([0 0 0]); 
L(1) = Revolute('d', 0.2, 'alpha', pi/2, 'qlim', initialPose_left(1)+deg2rad([-90 +90]) ); 
L(2) = Revolute('d', 0, 'alpha', 0, 'a', 0.4, 'qlim', initialPose_left(2)+deg2rad([-20 +90]));   
L(3) = Revolute('d', 0, 'alpha', 0, 'a', 0.4, 'qlim', initialPose_left(2)+deg2rad([-90 +90])); 
% -178 +178 
baseL = [1 0 0 0;  
        0 1 0 0;  
        0 0 1 0;  
        0 0 0 1]; 

1 (. 1) . 

図1-3リンクマニピュレータの選択された初期位置のグラフィック表示
1-

 Tetta, .  initialPose_left. 

. , . 

, .  

  . :

Y_i = [q_1、q_2、q_3 ... q_n]、

q – . 

%       
t1_min = L(1).qlim(1); t1_max = L(1).qlim(2);  
t2_min = L(2).qlim(1); t2_max = L(2).qlim(2); 
t3_min = L(3).qlim(1); t3_max = L(3).qlim(2); 
%     
t1 = t1_min + (t1_max-t1_min)*rand(N,1); 
t2 = t2_min + (t2_max-t2_min)*rand(N,1); 
t3 = t3_min + (t3_max-t3_min)*rand(N,1); 
Y = horzcat(t1, t2, t3);

, .  : 

X_i = [x、y、z、R]、R = [φ、θ、γ]

:  x,y,z – . R – , . 

%    4x4 
T = zeros(4, 4, N); 
T(:, :, :) = leftArm.fkine(Y); %  ,       
%R = tr2rpy(T(1:3, 1:3, :), 'arm'); %      
R = tr2eul(T(1:3, 1:3, :)); %      
Tx = reshape(T(1, 4, :), [N 1]); %  - 
Ty = reshape(T(2, 4, :), [N 1]); 
Tz = reshape(T(3, 4, :), [N 1]); 
% scatter3(Tx,Ty,Tz,'.','r'); 
X = horzcat(Tx, Ty, Tz, R); %   

. 3.2.1  , 3000 . 

図2-スリーリンクマニピュレーターの初期位置、ドットはマニピュレーターの最終位置を示します
2 - ,

, 3000 . , X Y. 

, .

Keras Python. .

X_train, X_test, y_train, y_test = train_test_split(data_x, data_y, test_size=0.2,
random_state=42) 

« » . .

def base_model():
 model = Sequential()
 model.add(Dense(32,input_dim=6,activation='relu'))
 model.add(Dense(64,activation='relu'))
 model.add(Dense(128,activation='relu'))
 model.add(Dense(32,activation='relu'))
 model.add(Dense(3, init='normal'))
 model.compile(loss='mean_absolute_error', optimizer = 'adam', metrics=['accuracy'])
 model.summary()
 return model

, . . , , . , , .       KerasRegressor,  Keras.

clf = KerasRegressor(build_fn=base_model, epochs=500, batch_size=20,verbose=2)
clf.fit(X_train,y_train) 

.

res = clf.predict(X_test) 

99% , . 

3 , , , . . , . . - . , , , , .

%%    ,    
M=[-178:10:178]; %      -178   +178    10 
M_size=length(M); 
first_q=zeros(M_size, 3); 
T33 = zeros(4, 4, M_size); 
T34 = zeros(4, 4, M_size); 
first_q(:,1)=[deg2rad(M)]; %  q 
T33(:, :, :) = leftArm.fkine(first_q);%      ,   
R = tr2rpy(T33(1:3, 1:3, :), 'arm'); %      
Tx = reshape(T33(1, 4, :), [M_size 1]); %  - 
Ty = reshape(T33(2, 4, :), [M_size 1]); 
Tz = reshape(T33(3, 4, :), [M_size 1]); 
plot3(Tx,Ty,Tz) 
axis([-1 1 -1 1 -1 1]);hold on;grid on; 

XX = horzcat(Tx, Ty, Tz, R); %        
T34(:, :, :) = leftArm.fkine(q_new); %     ,   
Tx2 = reshape(T34(1, 4, :), [M_size 1]); %  - 
Ty2 = reshape(T34(2, 4, :), [M_size 1]); 
Tz2 = reshape(T34(3, 4, :), [M_size 1]); 
plot3(Tx2,Ty2,Tz2,'.') 
axis([-1 1 -1 1 -1 1]) 
図3-予測結果
3 –

. . , - . , . . «Programming by demonstration», . Matlab , – .




All Articles