Kontrol manipulator multi-tautan dari kompleks robotik menggunakan jaringan saraf

pengantar

Saat mensimulasikan sistem kontrol gerak untuk robot, diperlukan penyelesaian masalah kinematika dan dinamika untuk aktuatornya. Ada masalah invers dan langsung kinematika. Masalah langsung kinematika adalah menentukan posisi spasial dan orientasi titik karakteristik, sebagai aturan, dari alat kerja manipulator robot dengan nilai-nilai yang diketahui dari koordinat umum. Masalah kebalikan dari kinematika, seperti masalah langsung, adalah salah satu masalah utama dalam analisis dan sintesis kinematik. Untuk mengontrol posisi tautan dan orientasi alat kerja manipulator, maka perlu untuk menyelesaikan masalah invers kinematika.

Sebagian besar pendekatan analitik untuk menyelesaikan masalah kinematika terbalik cukup mahal dalam hal prosedur komputasi. Salah satu pendekatan alternatif adalah penggunaan jaringan saraf tiruan. Memasukan data. Pertimbangkan manipulator tiga tautan dengan parameter yang ditunjukkan pada Tabel 1.

SEBUAH

Alfa

D

Tetta

0

pi / 2

0.2

0

0.4

0

0

0

0.4

0

0

0

Tabel 1 - Parameter DH untuk manipulator tiga tautan

Di lingkungan MatLab, menggunakan Robotics Toolbox gratis, model komputer manipulator tiga tautan dibuat. Di bawah ini adalah fragmen skrip MatLab yang kami tetapkan ke array 'L' nilai parameter, A, Alfa, dan D dari Tabel 1. Untuk model kami, ini adalah nilai konstan dan tidak berubah dalam proses bekerja dengan manipulator. Kami menetapkan parameter Tetta ke variabel 'initialPose_left' - posisi awal manipulator kami. 

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

Gambar 1- Tampilan grafis dari posisi awal yang dipilih dari manipulator tiga tautan
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 . 

Gambar 2 - posisi awal manipulator tiga tautan, titik-titik menunjukkan posisi akhir manipulator
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]) 
Gambar 3 - Hasil peramalan
3 –

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




All Articles