در این بخش قصد دارم تا کنترل یک ربات که در نرم افزار kiks در بستر متلب را مورد بررسی و آموزش قرار بدم.

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

مقدمه

رباتي که مي خواهيم کنترل کنيم داراي 2 سنسور فاصله در سمت جلو و 4 سنسور در اطراف و 2 سنسور نيز در پشت دارد.

که براي روال کنترلي بدين صورت است که با نزديک شدن هر سنسور به ديوار مقدار متغير اين سنسورها تغيير کرده که با توجه به ميزان تغييرات سنسور ما بايد منحني هاي فازي را جوري تأيين کنيم تا با ديوار برخورد نکرده و همينطور به راه خود ادامه دهد.

در اين بخش ما دو عدد نقشه ي راه داريم که ربات ما بايد بتواند اين 2 نقشه را به صورت کامل دور بزند که البته نبايد به ديوار ها برخورد کند.

براي اينکه ربات بتواند از موانع به خوبي عبور کند بايد آلگوريتم مناسبي طراحي کنيم که ديوار را تشخيص داده و همينطور موانع را دور بزند و همينطور بتواند با سرعت نسبتا بالايي به حرکت خود ادامه دهد که در اين مقاله سعي شده است تا براي هر کدام از اين مشکلات راه کارهايي را پيدا کرد .

 

اضافه کردن نرم افزار KIKS در نرم افزار MATLAB  :

براي اين منظور اول وارد پوشه ي KIKS مي شويم و فايل STUP را اجرا مي کنيم و روند نصب را ادامه مي دهيم و در مرحله ي بعدي در محيط MATLAB گزينه ي PATHS را مي زنيم و فايل هايي که در پوشه ي KIKS مي باشد را به متلب اضافه مي کنيم.

نکته : اگر فايل KIKS را در کامپيوتر جا به جا کنيم بايد دوباره فايل هاي را به MATLAB اضافه کنيم.

بعد از اينکه نرم افزار KIKS  در متلب بستر سازي شد حال نوبت به اجراي فايل FIS_navigate_demo مي رسد تا بتوانيم براي کنترل ربات يک کنترل فازي مناسب طراحي کنيم.

 

 

در اين قسمت سعي  بر  اين دارم تا اين فايل را تشريح کنم.

 

 

 

 

مطالب بالا تنظيمات کلي از جمله باز کردن فايل و نقشه را بر عهده دارد.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

در خط 27 به MATLAB دستور باز کردن فايل فازي را مي دهد (که بايد شما اين فايل را درست کنيد) و  در خط 30 مراحل اصلي برنامه و کنترل ربات مي باشد که داخل حلقه تکرار مي شود تا زمان 1 دقيقه به پايان برسد. خطوط 35 تا 39 وظيفه ي کنترل سنسورها را بر عهده دارند.

 

همانطور که در بالا مي بينيد متغيرهايي از جمله چپ و راست و جلو و عقب نوشته شده اند که اين متغيرهاي همان خروجي سنسور ها مي باشند که هر کدام از متغيرها از جمع شدن دو متغير تشکليل شده است (همانطور که قبلا ذکر کرديم هر طرف ربات ما داراي 2 سنسور مي باشد مثلا در چپ ربات دو سنسور قرار دارد که ما مقدار اين دو سنسور را با هم جمع کرديم و سپس ميانگين گيري را انجام مي دهيم.

 

در خط 40 نيز ما متغيرها که حاوي مقادير خوانده شده از سنسورها بود را به کنترل کننده فازي خود مي دهيم. در اين بخش ما 4 ورودي را به کنترل کننده فازي خود مي دهيم که همان  متغيرهاي سنسور ما هستند.

 

در خطوط بعدي )42 و 43 ( ما دو متغير که نتيجه ي (خروجي) کنترل فازي ما مي باشد را در دو متغير ديگر قرار مي دهيم که اين دو فرمان سرعت ربات به جلو و عقب و متغير بعدي به چپ و راست ربات را انجام مي دهد.

 

حال براي اينکه به ربات دستور حرکت را بدهيم و همينطور مقادير حرکتي (سرعت و گردش) را قرار دهيم از تابعي که در خط 45 قرار دارد استفاده مي کنيم.

 

پس تا اينجا متوجه شديم که براي کنترل ربات به چه کنترل کننده اي نياز  داريم و اينکه اين کنترل کننده را چگونه بايد به ربات خود اضافه کنيم.

 

در ادامه نحوه ي ساخت يک کنترل کننده ي فازي را انجام مي دهيم و اينکه کنترل کننده قرار داده شده (فايل ساخته شده) چه ويژگي هايي دارد و چه عواملي در اين کنترل کننده رعايت شده تا ربات بتواند به راحتي و هر چه روان تر مسير را بپيمايد.

ساخت یک کنترل فازی

 

براي ساخت يک کنترل فازي در نرم افزار MATLAB بايد عبارت FUZZY را تايپ کنيم و ENTER کنيم تا برنامه ي کنترل فازي باز شود.

اين قسمت حداقل از سه قسمت تشکيل شده است که داراي يک ورودي کنترل فازي و يک سري شرط براي کنترل و ارتباط دهي نمودارهاي فازي با يکديگر و يک خروجي مي باشد.

همانطور که قبلا گفته شد ربات ما داراي 4 ورودي مي باشد يعني سنسورهاي جلو و چپ و ... که هر کدام از اين سنسورها در اين قسمت يک ورودي به شمار مي آيند پس در نتيجه ربات ما داراي 4 ورودي مي باشد و براي خروجي نيز ما نياز به 2 خروجي داريم که هر کدام از خروجي ها داراي مقادير مثبت و منفي هستند.

مثلا يک خروجي براي سرعت رو به جلوي ربات است که اگر اين مقدار مثبت باشد ربات رو به جلو حرکت مي کند و اگر اين مقدار منفي باشد ربات روبه عقب حرکت مي کند که مسئله براي گردش روبه چپ و راست نيز صدق مي کند يعني يک خروجي داريم که معرف گردش به چپ و راست ربات مي باشد.

گام بعدي قرار دادن شرط هاي مناسب مي باشد، براي اين منظور بهتر است ما از شرط هاي کمتري استفاده کنيم چون هرچه اين شرط ها کمتر باشد ربات ما با پردازش کمتري مي تواند به مسير خود ادامه دهد و هر چه اين شرط ها اضافه شود ضمن گنگ تر شدن برنامه براي خواننده بار پردازشي پردازنده نيز افزايش پيدا مي کند پس بهتر است شرط هاي کمتري در برنامه قرار دهيم.

قرار دادن شروط از مهمترين عوامل براي کنترل صحيح يک ربات به حساب مي آيد پس ما بايد قبل از هر کاري يک آلگوريتم صحيح از نحوه ي حرکت و مسير يابي درست ربات را ترسيم کنيم.

مثلا در اين قسمت شرط است که ما پيکره و ارتباط بين نمودار هاي کنترل فازي با نمودار هاي خروجي را تنظيم مي کنيم که اگر نمودارها را منظم و دقيق درست کرده باشيم فقط طريقه ي ارتباط دهي اين نمودارها مي ماند که بايد انجام شود.

 

درست کردن نمودار ها فازی (ورودی ها و خروجی ها)

 

بعد از اينکه برنامه ي فازي را در MATLAB باز کرديم براي ربات 4 ورودي را درست مي کنيم در اين قسمت همانطور که در شکل مي بينيد بهتر است نام هاي مناسبي براي هر يک از ورودي ها نام گذاري کنيم تا در ادامه به مشکل برخورد نکنيم. سپس 2 عدد خروجي نيز براي ربات درست مي کنيم و نام هاي مناسبي نيز براي خروجي ها قرار مي دهيم.

سپس بر روي ورودي اول double click مي کنيم تا تنظيمات لازم را انجام دهيم.

تنظيماتي که انجام مي دهيم متفاوت مي باشد از قرار دادن نام مناسب براي هر يک از مقادير تا اينکه بدانيم نوع فازي ما بايد به چه شکلي باشد تا بتوان ربات را بهتر هدايت کرد.

در تصوير زير تنظيماتي که براي ربات انجام دادم را مي توانيد مشاهده کنيد.

 

 

 

همانطور که در شکل بالا مشخص مي باشد بنده 4 ورودي و 2 عدد خروجي را براي کنترل فازي خودم تدارک ديدم حال روي هر کدام از اين ورودي ها double click مي کنم تا براي تنظيمات هر کدام توضيحي بدهم. اما ناگفته نماند که نام ورودي ها را در همين قسمت تنظيم مي کنيم و بعد تنظيمات ديگر را انجام مي دهيم.

تنظیمات بازه ی ورودی و خروجی

 

بازه ي تغيرات سنسور بين 0 تا 12 مي باشد و اين مقدار که عدد مهمي به حساب مي آيد در بخش قبل گفته بوديم که مقدار همان مقدار ورودي سنسورها مي باشد مثلا گفته بوديم که هر طرف ربات داراي دو سنسور مي باشد که هر سنسور نيز مي تواند تا عدد 1024 را به خروجي دهد حال وقتي ما دو سنسور جلويي را با هم جمع کنيم اين مقدار به 2048 مي رسد که وقتي به عدد 12 تقسيم مي کنيم به مقدار 10.24 مي رسيم که 2 عدد آخري يعني 12 نيز مانعي براي تنظيمات ما ندارد و امنيت دستگاه را بالاتر مي برد مثلا اگر ما مقدار 10 را براي ورودي تعريف مي کرديم مقداري از بازه ورودي را از دست مي داديم و اين مقدار نيز براي ربات تعريف نشده به حساب مي آمد که موجب سر در گم شدن ربات مي شد.

 

براي خروجي ها هم بايد تست کنيم که ربات ما با چه سرعتي مي تواند به درستي به کار خود ادامه دهد و با توجه به اين مسئله مي توان بازه ي مناسبي را براي اين محدوده تنظيم کرد. اما بهتر است در اول کار سرعت کمي را براي ربات خود تنظيم کنيم و تا در اول کاري ربات فقط بتواند به نرمي و درستي به حرکت خود ادامه دهد.

 

سنسور جلو:

 

روي باکس front کليک مي کنم تا وارد تنظيمات سنسور جلويي ربات بشويم همان طور که در شکل مي بينيد ما 3 حالت براي اين ورودي تعريف کرديم که هر کدام از اين نمودارهاي براي کاري در ربات تعريف شده  _اند.

 

 

 

سنسور چپ:

با توجه به اينکه ربات بنده از سمت چپ به دونبال ديوار مي گردد پس در نتيجه بيشترين هدايت ربات از اين قسمت مي باشد.

 

در واقع اين قسمت است که ربات را مي تواند خيلي منظم و دقيق به دور ديوار بچرخواند به طوري که مسير خو را گم نکند و به مسير خود ادامه دهد. 

 

ادامه دارد ...