شناسایی سیستم غیر خطی ربات بازوی مسطح دو درجه آزادی توسط شبکه عصبی

شبیه سازی با متلب

در این آموزش متلب میخواهیم شناسایی سیستم غیر خطی ربات بازوی مسطح دو درجه آزادی توسط شبکه عصبی مصنوعی را با متلب انجام دهیم.

معادلات دینامیکی این ربات به صورت زیر است:

matlabi_robot2dof

ابتدا باید داده های لازم را برای آموزش, اعتبارسنجی, و آزمایش شبکه عصبی را تهیه کرد. برای این منظور می بایست ورودی های خاصی را به سیستم مورد نظر اعمال و خروجی آن که زوایای تتا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  به عنوان حروجي به صورت زير بدست مي آيد:

matlabi_robot2dof2 matlabi_robot2dof3

با توجه به شبيه سازي ديده مي شود که نتايج شبيه سازي شده داراي مقادير ثابتي نبوده و براي رسيدن به مقادير ثابت از کنترل کننده 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  به عنوان حروجي به صورت زير بدست مي آيد:

پروژه متلب matlabi_robot2dof6

اضافه نمودن شبکه عصبي:

پروژه متلب

با توجه به شبيه سازي بالا مقادير ورودي و خروجي براي شبکه عصبي آماده شده است و برنامه 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 شکل زير بدست مي آيد:

آموزش متلب

 

 

 

 

 

 

 

0 پاسخ

دیدگاه خود را ثبت کنید

دوست دارید به بحث ملحق شوید؟
Feel free to contribute!

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *