روباتیک

ربات مسیریاب با کنترلر PID

ربات مسیریاب با PID

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

بر خلاف ظاهر ساده PID، طراحی این کنترل کننده، در عمل، فراتر از تنظیم سه پارامتر اصلی آن است. عوامل مختلفی در عملکرد این کنترل کننده تاثیر می گذارند، که از جمله ساختار کنترل کننده، درجه پروسه، نسبت ثابت زمانی غالب سیستم به زمان مرده پروسه، دینامیک عنصر محرک، نوع فیلتر بخش مشتق گیر و تنظیم پارامتر آن، رفتار غیر خطی در سیستم و غیره را می توان برشمرد. هر یک از این عوامل می توانند نقشی در روند طراحی و تنظیم کنترل کننده PID داشته باشند.

از این میان، دو مسئله مهم، عبارت اند از: طراحی فیلتر بخش مشتق گیر، و جبران آثار اشباع شدن عنصر محرک. پروژه حاضر به بررسی مفصل این دو می پردازد. اما پیش از آن، مبانی و اصول کنترل PID، اصلاحات اساسی در قانون پایه این کنترل کننده، ساختار های مختلف و منطق حاکم بر سه عمل آن، و نیز راهکار هایی برای انتخاب نوع کنترل کننده، معرفی و بحث می شوند.

در بخش طراحی فیلتر مشتق گیر، تاکید اساسی بر طراحی کنترل کننده بر اساس چهار پارامتر (سه پارامتر اصلی PID و چهارمی ثابت زمانی فیلتر) است. اهمیت این مطلب با شبیه سازی های مختلف روشن شده است. علاوه بر این، ساختار های اصلی PID در مورد عملکرد فیلتر با هم مقایسه شده، و راهبرد طراحی درست بحث شده است. بخش اصلی دیگر، به روش های مقابله با آثار اشباع شدن عنصر محرک می پردازد. در این مورد چندین تکنیک معرفی، و با هم مقایسه شده اند، که تکنیک های انتگرال گیری شرطی، و محاسبه معکوس از آن جمله اند. در اکثر بحث ها و بررسی ها، آسان بودن ساخت و کاربرد، و نیز رسیدن به عملکرد لازم با کمترین هزینه، مورد توجه بوده است. نتایج به کار گیری برخی از این روش ها، در شبیه سازی های انجام شده آمده است.

چرا از کنترلر PID استفاده کنیم؟

 شاید برای شما هم این سوال پیش امده باشد که دلیل استفاده از حلقه های کنترل PID درصنعت چیست وچرا نمیتوان همان ماژول کنترلی را با حلقه های کنترلی P یا PI به انجام رسانید؟ کنترلرهای مورد استفاده در صنعت به صورت On/Off و یا از خانواده ی کنترلرهای PID می باشند. خروجی کنترلرهای On/Off به شکل باینری می باشد و می توانند از طریق سولونوئیدوالو valve یا سایر تجهیزات عملگر باعث باز شدن و یا بسته شدن کامل شیر کنترل یا اجزای تحت کنترل مورد نظر ما شوند. در کنترلرهای proportional یک خروجی پیوسته و غیر باینری داریم ولی مشکل عمده در آن وجود یک خطای ماندگار است که باعث می شود مقدار measurement هرگز به set point نرسد. در کنترلرهای PI این خطای ماندگار از بین می رود ولی وجود انتگرال سیستم را کند کرده و ثابت میرایی سیستم و زمان نشست افزایش می یابد. (تعداد peak های بیشتر) در کنترلرهای PID این مشکل نیز برطرف شده است و یکی از پرکاربرترین کنترلرها در صنعت می باشند. برای مثال در کنترل دما به علت وجود تأخیر زمانی ذاتی سیستم، استفاده از Derivative در کنترلر الزامی می باشد؛ اما در کنترل سطح وجود عنصر مشتق گیر الزامی نیست ولی از intergral حتماً استفاده می شود. طیف وسیعی از کنترلرهایی که در پالایشگاه یا سایر صنایع بزرگ مورد استفاده قرار میگیرد را کنترلرهای نیوماتیکی تشکیل می دهند ولی در سال های اخیر میکروکنترلرها و نیز PLC استفاده گسترده ای یافته اند.

در حالت کلی معادله ی کنترلر  PIDرا به صورت زیر در نظر می گیریم:

سرعت موتور = ضریب انتگرال×انتگرال خطا + ضریب مشتق×مشتق خطا + ضریب خطا×مقدار خطا + ثابت کل

U(t)= Kp×e(t) + Kd × e'(t) + Ki ×∫e(t) + c

روش‌های متعددی برای تعیین مقادیر مقبولی از بهره‌های PID وجود دارد. فرایند تعیین بهره را معمولا تنظیم PID میگویند. روش معمول در تنظیم، استفاده از راهنمای تنظیم PID است که به وسیله‌ی آن بهره‌های کنترلر توسط روش سعی و خطا با مختصری تحلیل به دست می­آید.

روشی تحلیلی‌تر نیز به نام روش زیگلر- نیکولز نیز وجود دارد که خود آن نیز دارای چندین حالت است. یکی از این روش‌های تنظیم دستی به این گونه است که ابتدا Ki و Kd را برابر با صفر قرار می­دهیم و سپس Kp را به تدریج زیاد می­کنیم تا ربات شروع به نوسان کند و در لبه‌ی ناپایداری قرار بگیرد.(اگر ربات را از گوشه‌ای‌ترین سنسور سمت چپ بر روی خط قرار دهیم، بچرخد و به طرف گوشه‌ای‌ترین سنسور سمت راست برود و دوباره برگردد و این کار را به دفعات انجام دهد.) به محض پیدا شدن Kp مورد نظر (با Ki=0, Kd=0) و آمدن ربات در مرز ناپایداری، Kp را به مقداری که به آن یک چهارم دامنه‌ی میرا می‌گویند کاهش می‌دهیم. یعنی دامنه‌ای از انحراف ربات که یک چهارم انحراف آن در مرز ناپایداری ربات است. یک مقداری حدودی برای این Kp حدود نصف Kp دامنه میرا است. در نهایت Kd و Ki را تا رسیدن به حرکت مطلوب ربات افزایش دهیم.

در استفاده از این روش برای ربات مورد نظر مشکلی وجود داشت و این بود که هر چقدر هم که ضریب Kd را اضافه کنیم ربات در سرعت نامی خود به مرز ناپایداری نمیرسد. به دلیل اینکه حداکثر ورودی گرفته شده توسط درایور که به مفهوم چرخه‌ی کاری ۱۰۰ % است، عدد ۲۵۵ بوده و در نتیجه قرار گرفتن بیشتر از این مقدار پس از ضرب مشتق خطا در ضریب آن در درایور موتور به همان عدد ۲۵۵ معنا می‌شود. لذا این روش برای این ربات تقریبا ناکارآمد بوده و از همان روش سعی و خطا با توضیحات زیر استفاده شد.

نحوه‌ی محاسبه‌ی ثابت کنترلر:

ربات طراحی شده باید بتواند فقط با بخش نسبی کنترلر، مسیر را به طور تقریبی و با خطای قابل ملاحظه‌ای طی کند. بدین منظور باید ضرایب و ثابت های مربوط به این بخش را بیابیم که در ادامه نحوه­ی انجام این کار مشخص می شود. همانطور که گفته شد سرعت هر موتور با یک عدد هشت بیتی متناظر قرار داده می شود و به حداقل سرعت موتور صفر و به حداکثر آن ۲۵۵را اختصاص می دهیم. زمانی که سنسور جلو خط را تشخیص می دهد و خطا برابر صفر است و ربات باید با حداکثر سرعت به سمت جلو حرکت کند، در نتیجه به هر دو موتور باید حداکثر سرعت (ورودی ۲۵۵) اختصاص داده شود. پس در این حالت ثابت بخش P ربات برابر ۲۵۵ برای هر دو موتور است.

نحوه‌ی محاسبه‌ی ضریب نسبی:

ضریب خطا باید بتواند در صورتی که آخرین سنسور در گوشه ی سمت راست یا چپ، خط را تشخیص داد، با حداکثر سرعت به صورت معکوس موتور متناظر را بگرداند تا روبات با سریعترین حالت ممکن خطا را اصلاح کند و در مسیر صحیح قرار گیرد. به عنوان مثال اگر بیست سنسور قرار داده شده باشند که ده تای آنها سمت چپ و ده تا در سمت راست صفحه‌ی زیرین ربات نصب شده باشند، ضریب تناسبی خطا باید به نحوی انتخاب شود که در صورتی که خط توسط آخرین سنسور ها مشاهده شد، سرعت موتور از ۲۵۵- به ۲۵۵+ تغییر کند. در واقع حاصل ضرب ضریب خطا در خود خطا باید برابر یا بزرگتر از ۵۱۲ بشود. می توان این مطلب را به این صورت بیان کرد که ضریب تناسب خطا برابر ۱۰/۵۱۲یعنی عدد ۵۲ باشد. علت گرد کردن به بالا هم این است که باید کل محدوده پوشش داده بشود و در صورت گرد کردن به پایین مقداری خطا به وجود خواهد آمد.

نحوه‌ی محاسبه‌ی ضریب انتگرال:

بخش انتگرال‌گیر کنترلر به میزان کمی در این طراحی استفاده شده چرا که بیشتر تاثیر مخرب بر عملکرد تصحیح خطای حالت گذرا دارد تا اثر مثبت. این بخش بیشتر برای اصلاح خطا در حالت دائمی به کار می رود که عموما کاربردی در ربات تعقیب خط ندارد چرا که وجود و حرکت ربات بر روی خط کافیست و نیازی به اینکه ربات دقیقا در مرکز مسیر باشد، وجود ندارد. برای مثالی از زمان نیاز به بخش انتگرالی کنترلر، شرایطی که ربات در مسیر مستقیم حرکت می کند و به پیچ تندی می رسد را در نظر بگیریم. تا قبل از ورود به پیچ چون سنسور وسط، در حال دیدن خط است، خطا صفر است و بنابراین انتگرال خطا تا آن لحظه مقدار صفر دارد ولی هنگامی که ربات به پیچ می رسد با افزایش خطا مقدار خطا نیز شروع به افزایش می کند.در این شرایط مقدار انتگرال خطا به مراتب بیشتر از مقدار خود خطا می شود. بنابراین برای گنجاندن Kiدر معادله، مقدار آن باید بسیار کمتر از دو ضریب  Kdو Kp باشد. در نتیجه در ابتدای چرخش ربات، ضریب انتگرال، کمکی به حرکت ربات نمی کند ولی بعد از مدت کوتاهی که مقدار انتگرال خطا زیاد می شود و ربات هم در حال چرخش است، بخش انتگرالی به چرخش ربات، توان بسیار بالایی می دهد. این توان بالا سبب پیچیدن بیش از حد ربات شده و خطا را مجددا افزایش می دهد و باعث می شود روبات نتواند بعد از رسیدن به خط صاف، در همان مسیر مستقیم ادامه دهد، در نتیجه مدت زمان نشست ربات در محدوده‌ی کوچکی از مسیر درست را افزایش می‌دهد.  به دلیل همین موضوع برای ضریب انتگرال خطا در کنترلر مقدار کمی (۰٫۰۰۰۱) در نظر گرفته شده است و کنترلر تقریبا به شکل PD عمل میکند. علت این امر که ضریب خطای انتگرال را کاملا حذف نکردیم این بود که در طی حرکت ربات در مکان‌های خاصی که زمین لیز است یا به دلیل وجود موانع، ربات نمی­تواند درست بپیچد و نیاز به حرکت و چرخیدن تندتری دارد که خطای حالت دائمی را از بین ببرد، وجود ضریب انتگرال حیاتی است. به عنوان مثال وقتی ربات در محلی گیر می‌کند و نمی­تواند بپیچد نیاز به حرکت دور در جا دارد. در این شرایط اگر خط تقریبا در مسیر مستقیم ربات قرار داشته باشد، در لحظات ابتدایی این اتفاق، ربات همچنان دستور به حرکت رو به جلو می­دهد، ولی در ادامه هر مقدار که زمان میگذرد انتگرال خطا بیشتر شده (به سمت بی‌نهایت میرود) و حرکت ربات به گردش کامل می­انجامد.

نحوه‌ی محاسبه مشتق خطا :

به دلیل اینکه داده‌های ورودی به پردازشگر یک سری اطلاعات گسسته هستند که در هر ۱ms نمونه برداری میشوند، برای به دست آوردن مشتق نمونه‌ها باید از تفریق متوالی دو نمونه آخر استفاده کرد (Backward). با توجه به سرعت بالای نمونه‌برداری نسبت به لختی موتورها، مقدار مشتق عموما صفر می­شود چرا که مدت زمانی که سنسور شمارهn ، خط سیاه را می­بیند حدود ۱۰۰ نمونه گرفته میشود و در نتیجه تفریق این نمونه‌ها که همه مقدار مساوی n را دارند به صفر می‌انجامد و در نتیجه بخش مشتق کنترلر بی تاثیر خواهد بود. برای حل مشکل اینطور عمل کردیم که وقتی دو سمپل آخر شبیه یکدیگرند عملیات تفریق و محاسبه‌ی مشتق انجام نمی­شود و مقدار متغیری که اندازه‌ی مشتق را نگاه می‌دارد تغییر نمی‌کند. البته این موضوع نباید برای سنسور میانی که در آن میزان خطا صفر است لحاظ شود و در شرایطی که دو نمونه‌ی آخر برابر با سنسور میانی باشند، مقدار مشتق برابر صفر خواهد شد.

پس از اتمام این بخش و به دست آوردن ضرایب کنترلر، ربات را بر روی مسیر قرار دادیم و سعی کردیم با افزایش و کاهش اعداد به دست آمده، حرکت ربات را بهینه کنیم. نتایج به این گونه شد که پس از تست مجبور شدیم در ابتدا ضریب مشتق را برای عملکرد بهتر در بازگشت به مسیر اصلی زیاد کرده و در ادامه برای سرعت بیشتر در دور زدن، کمی ضریب نسبی را هم بالا ببریم.

در جدول زیر به طور کلی اثر افزایش بهره‌های PID در پاسخ حرکتی ربات نشان داده شده است.

جدول PID

خوب(17)بد(3)
همچنین ممکن است بپسندید
رباتی طراحی کنید که بدون انحراف از مسیر حرکت می‌کند
چیدمان سنسور ربات مسیریاب
۱ دیدگاه
  • نمایندگی گارمین
    اسفند ۱۷,۱۳۹۵ در ۹:۰۷ ق.ظ

    با سلام، موفق باشید. عالی بود.

    خوب(0)بد(0)

دیدگاه خود را بیان فرمائید

نام شما *
وبسایت شما *

دیدگاه شما *

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>