التحكم في المعالجات متعددة الوصلات لمركب آلي باستخدام شبكة عصبية

المقدمة

عند محاكاة أنظمة التحكم في الحركة للروبوتات ، يلزم حل مشاكل علم الحركة والديناميكيات لمشغلاتها. هناك مشكلة عكسية ومباشرة في علم الحركة. تتمثل المشكلة المباشرة في علم الحركة في تحديد الموقع المكاني واتجاه النقطة المميزة ، كقاعدة عامة ، لأداة عمل مناور الروبوت بالقيم المعروفة للإحداثيات المعممة. المشكلة العكسية للكينماتيكا ، مثل المشكلة المباشرة ، هي واحدة من المشاكل الرئيسية للتحليل والتوليف الحركي. للتحكم في موضع الروابط واتجاه أداة العمل الخاصة بالمناور ، يصبح من الضروري حل المشكلة العكسية للكينماتيكا.

معظم الأساليب التحليلية لحل مشكلة الحركية العكسية مكلفة للغاية من حيث الإجراءات الحسابية. أحد الأساليب البديلة هو استخدام الشبكات العصبية. ادخال البيانات. ضع في اعتبارك معالجًا ثلاثي الوصلات مع المعلمات الموضحة في الجدول 1.

أ

الفا

د

تيتا

0

بي / 2

0.2

0

0.4

0

0

0

0.4

0

0

0

الجدول 1 - معلمات DH لمناور ثلاثي الوصلات

في بيئة MatLab ، باستخدام Robotics Toolbox الموزع مجانًا ، تم بناء نموذج حاسوبي لمناور ثلاثي الوصلات. يوجد أدناه جزء من برنامج MatLab النصي حيث نخصص للمصفوفة "L" قيم المعلمات ، A و Alfa و D من الجدول 1. بالنسبة لنموذجنا ، هذه قيم ثابتة ولا تتغير في عملية العمل مع المعالج. نقوم بتعيين معلمة 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 - عرض رسومي للموضع المبدئي المحدد للمعالج ثلاثي الوصلات
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