شناسایی سیستم غیر خطی ربات بازوی مسطح دو درجه آزادی توسط شبکه عصبی
در این آموزش متلب میخواهیم شناسایی سیستم غیر خطی ربات بازوی مسطح دو درجه آزادی توسط شبکه عصبی مصنوعی را با متلب انجام دهیم.
معادلات دینامیکی این ربات به صورت زیر است:
ابتدا باید داده های لازم را برای آموزش, اعتبارسنجی, و آزمایش شبکه عصبی را تهیه کرد. برای این منظور می بایست ورودی های خاصی را به سیستم مورد نظر اعمال و خروجی آن که زوایای تتا1 و تتا2 است, را اندازه گیری کرد.
قبل از هر چیز نیاز هست تا پروژه متلب را دانلود کنید
matlab-file
براي اين کار ابتدا بايد سيستم را در نرم افزار matlab شبيه سازي نمود تا بوسيله آن داده هاي لازم توليد شوند:
براي شبيه سازي برنامه t2.m نوشته شده است:
clc
clear
%define intional value
L1=0.7;
L2=0.5;
m1=4;
m2=3;
g=9.81;
Tau1=1.5;
Tau2=2;
sim(‘fcn.slx’);
در اين برنامه تابع fcn.slx فراخواني مي شود
با اجراي اين برنامه مقادير Theta1 ,Theta2 به عنوان حروجي به صورت زير بدست مي آيد:
با توجه به شبيه سازي ديده مي شود که نتايج شبيه سازي شده داراي مقادير ثابتي نبوده و براي رسيدن به مقادير ثابت از کنترل کننده pid استفاده مي کنيم
براي شبيه سازي برنامه t3.m نوشته شده است:
clc
clear
%define intional value
L1=0.7;
L2=0.5;
m1=4;
m2=3;
g=9.81;
Tau1=1.5;
Tau2=2;
sim(‘fcn1.slx’);
در اين برنامه تابع fcn1.slx فراخواني مي شود
با اجراي اين برنامه مقادير Theta1 ,Theta2 به عنوان حروجي به صورت زير بدست مي آيد:
اضافه نمودن شبکه عصبي:
با توجه به شبيه سازي بالا مقادير ورودي و خروجي براي شبکه عصبي آماده شده است و برنامه t4.m را مي نوسيم:
clc
clear
%define intional value
L1=0.7;
L2=0.5;
m1=4;
m2=3;
g=9.81;
Tauc1=1:0.1:2;
Tauc2=3:0.1:4;
for i=1:size(Tauc1,2)
Tau1=Tauc1(i);
Tau2=Tauc2(i);
sim(‘fcn1.slx’);
Teta1(i)=Theta1.data(end);
Teta2(i)=Theta2.data(end);
end
Teta1;
Teta1;
% define inputs and outputs for traning
x1 =Tauc1 ; % inputs tau1
x2 =Tauc2 ; % inputs tau2
y1 =Teta1 ;% outputs Thetadd1
y2 =Teta2 ;% outputs Thetadd2
x=[x1;x2]
y=[y1;y2]
net = feedforwardnet(10);
net = train(net,x,y);
view(net)
y = net(x);
perf = perform(net,y,x);
توصيحات برنامه :
1- دادن مقادير اوليه
%define intional value
L1=0.7;
L2=0.5;
m1=4;
m2=3;
g=9.81;
2-فرض کرديم مقادير گشتاور 1 و گشتاور 2 به صورت زير تغيير مي کند با يک حلقه مقادير نتايج را بعد از شبيه سازي در محيط سيمولينک با فراخواني تابع fcn1.xls به دست آورده و ذحيره مي کنيم:
Tauc1=1:0.1:2;
Tauc2=3:0.1:4;
for i=1:size(Tauc1,2)
Tau1=Tauc1(i);
Tau2=Tauc2(i);
sim(‘fcn1.slx’);
Teta1(i)=Theta1.data(end);
Teta2(i)=Theta2.data(end);
end
Teta1;
Teta1;
3- تعريف متغيير ها براي آموزش شبکه عصبي:
% define inputs and outputs for traning
x1 =Tauc1 ; % inputs tau1
x2 =Tauc2 ; % inputs tau2
y1 =Teta1 ;% outputs Thetadd1
y2 =Teta2 ;% outputs Thetadd2
x=[x1;x2]
y=[y1;y2]
4- ايجاد شبکه عصبي :
net = feedforwardnet(10);
net = train(net,x,y);
view(net)
y = net(x);
perf = perform(net,y,x);
اجراي برنامه t4.m مشاهده خروجي ها:
با توجه به شکل بالا شبکه عصبي 2 ورودي 2 خروجي 2 لايه اصلي که لايه پنهان آن داراي 10 لايه مي باشد استفاده شده است.
صفحه اصلي مربوط به شبکه عصبي فوق:
با کليک بر روي گزينه performance شکل زير بدست مي آيد:
با کليک بر روي گزينه traning state شکل زير بدست مي آيد:
با کليک بر روي گزينه erore histogram شکل زير بدست مي آيد:
با کليک بر روي گزينه Regression شکل زير بدست مي آيد:
دانلود نرم افزار متلب MATHWORKS MATLAB R2018B
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.