ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.






جهت تبلیغ در وب سایت ECA کلیک کنید.

کاربران برچسب زده شده

صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 17
  1. #1
    2010/12/18
    یزد
    663
    64

    استفاده ازالگوريتم PID و بافر در ربات مسيرياب

    سلام بر دوستان
    2 تا سوال داشتم :
    چطوري از بافر درجهت حذف نور محيط و فيلتر سازي نور محيط استفاده ميشه؟
    - مدتي پيش ربات مسيريابي رو ديدم که به گفته طراحش از بافر براي فيلتر نور محيط استفاده کرده بود -
    2- کسي هست بتونه الگوريتم PID رو واسه يک ربات مسيرياب توضيح بده ؟ ممنون ميشم ...

    تشکر ويژه
    اشک هایی که پس از هر شکست ریخته میشوند همان عرق هاییست که برای پیروزی ریخته نشده است
  2. #2
    2011/10/27
    78
    1

    پاسخ : استفاده ازالگوريتم PID و بافر در ربات مسيرياب

    سلام
    اول اینکه تا جایی که من دیدم استفاده از بافر جهت حذف نویز نیست و صرفا واسه تشخیص سیاه از سفیده ، البته میتونه تا حدودی هم حذف نویز داشته باشه که این حد از حذف نویز با تمامی مدارهای معادل هم حاصل میشه .
    دومین مورد این که الگوریتم PID الگوریتم خیلی خوبیه ، حتی اگه از PI تنها هم استفاده کنی بازم خوبه ولی نه در سطح مسابقات داخلی ایران چون المانهای مسیر تو ایران طوری نیستن که بشه به راحتی از این الگوریتم استفاده کرد ، معمولا در مسابقات ROBO RACING این سبک روباتو میشه دید که المان های مسیر ساده هستن و سرعت حرف اولو میزنه .
    زاویه ی نگاهتو عوض کن . . .
  3. #3
    2010/12/18
    یزد
    663
    64

    پاسخ : استفاده ازالگوريتم PID و بافر در ربات مسيرياب

    ممنون از پاسختون
    درمورد بافر توضيح ميدين؟
    و ي چيز ديگه الگوريتم PID مگه نبايد با انواع زمين ها سازگار باشه ؟ آخه من ي تيم ميشناسم مسافبقات داخلي رو مرتب اول ميشه به خاطر استفاده از PID
    ولي من شخصا علاقه به يادگيري و اجراي PID در اين مورد دارم و درمورد تنظيم خودکار ضرايب PID هم توضيحي بدين و الگوريتمشو مورد بحث قرار بدين ممنون ميشم


    تشکر ويژه
    ممنون
    اشک هایی که پس از هر شکست ریخته میشوند همان عرق هاییست که برای پیروزی ریخته نشده است
  4. #4
    2011/05/16
    44
    0

    پاسخ : استفاده ازالگوريتم PID و بافر در ربات مسيرياب

    آره مهندس بیا و این pid رو برای ربات به ما شیرفهم کن
    هر جا میریم میگن ربات ما pid داره
    مردیم از بس گفتیم آره چیز خوبیه :mrgreen:
  5. #5
    2012/09/09
    ملکان
    204
    0

    پاسخ : استفاده ازالگوريتم PID و بافر در ربات مسيرياب

    سلام ميبينم که خيلي مشکل پيدا کردين با اين PID

    ميتونين اينو مطالعه کينين اگه چيزي نفهميدين کمکتون
    ميکنم !

    http://www.inpharmix.com/jps/PID_Controller_For_Lego_Mindstorms_Robots.html

    خودم الن دارم 1 ربات 24 سنسوره مي سازم کلي رو eror هاي PID و ضرايبش کار کردم
    الانم دارم روز به روز بهترش مي کنم (هنوز اون چيزي نيس که من ميخوام)

    اين مقاله کامل توضيخ داده عوض مطالعه زياد بشينين با عددا بازي کنين جواب بهتري ميگيرين !!!
    اسمم را پدرم انتخواب کرد !
    نام خوانوادگي ام را يکي از اجدادم !
    ديگه بسه راهم را خودم انتخواب خواهم کرد !
    اينم لينک من :
    http://www.eca.ir/forum2/index.php?topic=1721.msg585767#msg585767
  6. #6
    2014/01/23
    تبريز
    37
    1

    پاسخ : استفاده ازالگوريتم PID و بافر در ربات مسيرياب

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

    ما ابتدا بايد خطا رو مشخص کنيم. براي راحتي فرض کنيد يک ربات 8 سنسوره داريم, خطا به معناي انحراف از ايده آلمونه که اينجا ايده آل ما اينه که خط وسط برد سنسور باشه يعني سنسورامون به اين شکل باشن 00011000 (1 به معناي زمينه ي سياه و 0 به معناي زمينه ي سفيد), در اين حالت خطامون صفره (ممکنه حالت هاي ديگه اي هم داشته باشيم که خطامون صفر باشه).
    اما بريم سراغ خطاي غيرصفر. دو خالت بيشتر نداريم, يا ربات سمت چپ خط قرار گرفته و براي اينکه به خالت ايده آل برسه بايد به سمت راست بچرخه, توي اين حالت فرض کنين خطامون مثبت هستش مثلا اين آرايش سنسور 00000110, ويا اينکه ربات سمت راست خط هستو بايد به سمت چپ بچرخه تا به ايده آلمون برسيم توي اين حالت هم خطا رو منفي فرض مي کنيم به عنوان مثال 01100000.
    تو حالت کنترل معمولي ممکن بود با وجود زاويه بين خط و ربات سنسورامون 00011000 باشنو خطامون صفر بشه, در حالي که مي دونيم به دليل کج بودن ربات صفر نيست. ولي توي PID ربات مي تونه کج بودنش رو با توجه به حالت هاي قبليش تشخيص بده.
    الآن براي حالت هاي مختلف ما ميايمو خطاهاي گوناگون رو تعريف مي کنيم. در اصل هرچي ميزان انحراف ربات از حالت وسط بيشتر باشه, ميزان خطاش هم بيشتره. کاري که توي حالت معمولي انجام مي داديم اين بود که ميومديم با توجه به اين خطاي لحظه اي ربات رو هدايت مي کرديم, اما تفاوت عمده ي PID با روش معمولي اينه که علاوه بر خطاي لحظه اي, انتگرال اون و مشتقش (عبرت گرفتن از خطاي گذشته و پيش بيني خطاي آينده) استفاده مي کنيم.
    اگر هنوز اين تاپيک رو دنبال مي کنين بگين تا توضيح بيشتري در مورد محاسبه و فرمولاش بدم, در غير اينصورت زياد ديگه خودمو خسته نکنم. :redface:
    اي پادشه خوبان داد از غم تنهايي

    دل بي تو به جان آمد وقت است که باز آيي
  7. #7
    2011/07/10
    مشهد
    145
    3

    پاسخ : استفاده ازالگوريتم PID و بافر در ربات مسيرياب

    نقل قول نوشته اصلی توسط The Savior
    در کل PID مفهمومش چيز سختي نيست. بر خلاف دوستان که مي گن با مسيراي ايران همخوني نداره و مال مسيراي سادس, با عرض احترام بايد عرض کنم که هيچ ربطي به اين موضوع نداره, همون کارايي که توي روشاي معمولي انجام مي داديم اينجا هم همون کارو انجام مي ديم با اين تفاوت که نوع محاسبه خطاي رباتمون بهينه تر شده.
    ممکنه دوستان به روش هاي مختلف پياده سازي کنن ولي روش من اينه.

    ما ابتدا بايد خطا رو مشخص کنيم. براي راحتي فرض کنيد يک ربات 8 سنسوره داريم, خطا به معناي انحراف از ايده آلمونه که اينجا ايده آل ما اينه که خط وسط برد سنسور باشه يعني سنسورامون به اين شکل باشن 00011000 (1 به معناي زمينه ي سياه و 0 به معناي زمينه ي سفيد), در اين حالت خطامون صفره (ممکنه حالت هاي ديگه اي هم داشته باشيم که خطامون صفر باشه).
    اما بريم سراغ خطاي غيرصفر. دو خالت بيشتر نداريم, يا ربات سمت چپ خط قرار گرفته و براي اينکه به خالت ايده آل برسه بايد به سمت راست بچرخه, توي اين حالت فرض کنين خطامون مثبت هستش مثلا اين آرايش سنسور 00000110, ويا اينکه ربات سمت راست خط هستو بايد به سمت چپ بچرخه تا به ايده آلمون برسيم توي اين حالت هم خطا رو منفي فرض مي کنيم به عنوان مثال 01100000.
    تو حالت کنترل معمولي ممکن بود با وجود زاويه بين خط و ربات سنسورامون 00011000 باشنو خطامون صفر بشه, در حالي که مي دونيم به دليل کج بودن ربات صفر نيست. ولي توي PID ربات مي تونه کج بودنش رو با توجه به حالت هاي قبليش تشخيص بده.
    الآن براي حالت هاي مختلف ما ميايمو خطاهاي گوناگون رو تعريف مي کنيم. در اصل هرچي ميزان انحراف ربات از حالت وسط بيشتر باشه, ميزان خطاش هم بيشتره. کاري که توي حالت معمولي انجام مي داديم اين بود که ميومديم با توجه به اين خطاي لحظه اي ربات رو هدايت مي کرديم, اما تفاوت عمده ي PID با روش معمولي اينه که علاوه بر خطاي لحظه اي, انتگرال اون و مشتقش (عبرت گرفتن از خطاي گذشته و پيش بيني خطاي آينده) استفاده مي کنيم.
    اگر هنوز اين تاپيک رو دنبال مي کنين بگين تا توضيح بيشتري در مورد محاسبه و فرمولاش بدم, در غير اينصورت زياد ديگه خودمو خسته نکنم. :redface:
    سلام

    ممنون میشم اگر فرمول هاش و یک نمونه از برنامه رو در اختیار قرار بدید چون به نظر با این روش هم تعداد سنسور کم میشه و هم سرعت زیاد
  8. #8
    2014/01/23
    تبريز
    37
    1

    پاسخ : استفاده ازالگوريتم PID و بافر در ربات مسيرياب

    اجازه بدين يه مقدار پايه اي تر توضيح بدم بعد برم سراغ فرمول

    PID يعني Proportional-Integral-Derivative يا کنترلر تناسبي, انتگرالي و مشتق گير. بر اين اساس مي تونيم 4 نوع کنترلر داشته باشيم. يعني P, PI, PD , PID. نوع P همون نوع رايجيه که استفاده مي شه. يعني کنترلر تناسبي. بدين صورت که خطا رو بصورت مرتب اندازه گيري مي کنيم (منظور از خطا محل قرار گيري سنسورهاست), بعد بر اساس همون خطا به موتورهاي ربات دستور حرکت مي ديم. اما در نوع هاي ديگه ما بخش انتگرالي, مشتقي و يا هر دو رو داريم.

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


    P=E مقدار تناسبي:
    (E: خطايي که همين الآن اندازه گرفتيم). مقدار تناسي در واقع همون مقدار خطامونه.

    D=E-Eo مشتق خطا:
    (Eo:خطايي که دفعه ي پيش اندازه گرفتيم). اگه خطايي که دفعه ي پيش اندازه گرفتيم رو از از خطايي که اين بار اندازه گرفتيم کم کنيم, مي شه مقداري مشتي مون. (به همين راحتي )

    I=I+E انتگرال خطا:
    اگه خطا هايي که هر دفعه اندازه گرفتيمو با هم جمع کنيم مي شه مقدار انتگرالي. (ابتدا به ساکن مقدار انتگرالي صفر است).


    حالا ببينيم اينا به چه درد مي خورن:

    مقدار تناسبي: نشان دهنده ي خطاي فعلي

    مقدار مشتقي: پيش بيني کننده ي خطاي آينده (طبق مفهوم مشتق که شيب تابع است و شيب به ما نشون مي ده که تابع داره به چه سمتي حرکت مي کنه به خاطر همين داره آينده رو پيش بيني مي کنه)

    مقدار انتگرالي: عبرت گرفتن از آنچه که قبلا به سرمون اومده (با انتگرال گيري يا همون جمع کردن, خطاهاي گذشته رو هم که مسلما بي تاثير نيستن در محاسباتمون تاثير مي ديم)


    تفاوت برنامه نويسي ربات تعقيب به روش معمولي و PID اينه که توي برنامه نويسي معمولي چند تا else if داشتيم که توي هر کدوم از اونها چند تا شرط مي ذاشتيم و مي گفتيم اگر که مقدار سنسورها براي مثال اينجوري بود 00000001 موتور سمت چپ با تمام سرعت برو جلو و موتور سمت راست برو عقب که اين نهايت خطامون به سمت چپ بود. يعني تو روش معمولي هر جا که خطا رو تشخيص داديم فورا دستور صادر مي کرديم.
    اما تو روش PID ميايم همين else if هارو مي ذاريم, با اين تفاوت که ديگه همون جا دستور صادر نمي کنيم, بلکه فقط يک متغيري رو تحت عنوان خطا مثلا "E" مقدار دهي مي کنيم. بعد با توجه به فرمولاي بالا و فرمولايي که بعدا مي گم يک مقدار PID به دست مي آوريم و با توجه به اون مقدار جديد دستور صادر مي کنيم.

    نکته اي که بايد تو اين کاربرد خاص از PID بايد مد نظر قرار بديم اينه که چون سرعت ميکرو بالاست, مقدار خطاهايي که توي واحد زمان بدست مياريم خيلي زياده! ازين رو ممکنه تا ربات بياد 1 سانتي متر حرکت کنه بيشتر از 50 بار يا حتي خيلي بيشتر ازون (بستگي به الگوريتم داره) خطا اندازهگيري بشه و جمع اينا خيلي زياد مي شه و ربات هي اينورو اون ور مي ره و گيج مي شه. :angry: :angry: :angry: :angry: :angry: دو تا راه حل وجود داره. يکي اينکه از خيز انتگرالي بگذريم يعني بشه PD يا اينکه ضريبشو کم کنيم که راه حل اول توصيه مي شه (در مورد ضريب توضيح داده خواهد شد)

    اميدوارم تا اينجا مطلب خسته کننده نشده باشه, چون مي خوام به موضوع عميقا پرداخته بشه برا همين به ذهنم رسيد که اين توضيحات پايه خالي از لطف نيست
    توي پست بعدي به محاسبات اصلي مي پردازم. :job:
    اي پادشه خوبان داد از غم تنهايي

    دل بي تو به جان آمد وقت است که باز آيي
  9. #9
    2014/01/23
    تبريز
    37
    1

    پاسخ : استفاده ازالگوريتم PID و بافر در ربات مسيرياب

    اما بعد ازين صحبتا بريم سراغ محاسبات:

    گفته شد که چند تا if else پشت سر هم داريم که تو اونا مقدار خطا رو اندازه مي گيريم. الآن فرض کنيد مقدار خطا يا E را اندازه گرفتيم. همچنين توي مرحله قبلي بعد از انجام محاسبات مقدار Eo=E قرار داده ايم تا الآن بتونيم از Eo به عنوان خطاي قبلي استفاده کنيم. مقدار PID که بر اساس اون قراره به ربات دستور حرکت بديم, از جمع سه تا مقدار تناسبي, انتگرالي و مشتقي بدست مي آوريم. اما چون مي دونيم هر کدوم تاثير خاصي روي ربات مي زارن و تاثير هر کدوم هم با توجه به ابعاد ربات, تعداد سنسور, سرعت موتور و ... کاملا متفاوته, پس هر کدوم رو با يک ضريبي توي معادله قرار مي دهيم.

    کد:
    PID=Kp*P + Ki*I + Kd*D;
    همون طور که توي قسمت قبلي اشاره شد, بهتره بخش انتگرال گير رو نداشته باشيم يا اگرم باشه حتما ضريب اون نسبت به بقيه بايد خيلي خيلي کمتر باشه (مثلا 100 يا 500 برابر کمتر).
    اينکه مقدار ضرايب چقدر باشه, همونطور که توضيح داده شد کاملا وابسته به فيزيک ربات هست و چيز ثابتي نيست. همچين متناسب با حداکثر خطا مي باشد. براي مثال فرض کنيد براي حداکثر انحراف به راست خطاي 20 و حداکثر انحراف به سمت چپ مقدار خطاي -20 را داشته باشيم. حال اگر از PWM با دقت 10 بيت استفاده کنيم که خداکثر مقدار آن 1023 مي شود, در صورتي موتورهايمان فقط به سمت جلو حرکت کنند, حد اکثر ميزان PID نبايد از 1023 بيشتر باشد و اگر هم بخواهيم حالتي داشته باشيم که موتور ها به سمت عقب هم حرکت کنند تا حداکثر ميزان چرخش را داشته باشيم, حداکثر مقدار PID نبايد از 2046 بيشتر باشد (اين موضوع در مورد حداقل مقدار آن يعني -1023 و -2046 هم برقرار است).
    پس بايد ضرايب را طوري انتخاب کنيم که مقدار PID از اين حدود خيلي بيشتر نباشد و در آخر هم روتيني قرار دهيم که اگر مقدار PID از اين حدود تجاوز کرد آن را برابر نقطه ي مرزي قرار دهد. مثلا اگر مقدار PID 2137 بدست آمد, ان را تبديل به 2046 بکند. يا در حالتي که -2238 بود, آن را به -2046 تبديل بکند.
    اين موضوع در مورد بخش انتگرالي هم وجود دارد که بهتر است براي جلوگيري از overflow شدن افزايش بيش از حد مقدار آن, روتيني قرار دهيم که اگر مقدار انتگرالي از حد خاصي تجاوز کرد, مقدار آن را برابر با مقدار مرزي مشخصي مثلا 500 و-500 قرار دهد.

    حال مقدار PID را داريم. مي خواهيم ببينيم که اين مقدارو چيکارش بايد بکنيم, قابش بگيريم بذاريم تو تاقچه يا بذاريم دم کوزه آبشو بخوريم؟ :cry2:
    اگر مقدار PID مثبت بود به معناي انحراف ربات به سمت راست, و اگر مقدار آن منفي بود به معناي انحراف ربات به سمت چپ مي باشد. در حالت اول ربات بايد به سمت چپ بچرخد تا انحراف را جبران کند و در حالت دوم برعکس. براي چرخش به راست باشد موتور سمت چپ با حداکثر سرعت به سمت جلو حرکت کند و موتور سمت راست يا با سرعتي کمتر از حداکثر سرعت به سمت حلو حرکت کند, بايستد و يا به سمت عقب حرکت کند. براي چرخش به سمت چپ نيز حالت هاي موتور هاي سمت چپ و راست برعکس مي شود.

    فرض کنيد تابعي براي درايو کردن ربات تعريف کرده ايم که يک آرگومان ورودي دارد, که مربوط به خطاي نهايي يا همون مقدار PID است.

    کد:
    drive(PID);
    اگر PID مثبت بود يعني ربات انحراف به راست دارد و ربات بايد به سمت چپ بچرخد, پس در اين حالت بايد pwm مربوط به موتور سمت راست را برابر با حداکثر مقدار آن يعني 1023 قرار دهيم و pwm مربوط به موتور سمت چپ را برابر با مقدار 1023 منهاي مقدار PID قرار دهيم. اگر هم مقدار PID بيشتر از 1023 باشد, بايد جهت چرخش موتور را عوض کرده و اين بار مقدار PID را منهاي مقدار 1023 کرده و به pwm موتور اعمال مي کنيم. حالت منفي نيز مشابه همين است با اين تفاوت که دستورات مربوزط به موتور سمت راست و چپ تغيير پيدا کرده و در هنگام محاسبات مقدار PID به -1 ضرب مي شود. مي توانيد نمنه کدي را مربوط به اعمال مقادير pwm را در زير مشاهده کنيد. (دقت بفرماييد که دستور مربوط به تعويض جهت چرخش موتور اينجا آورده نشده است, چرا که نيازمند تعريف چپارامترهاي ديگري هست که در صورت نياز مي توان در پست هاي ديگري به آن پرداخت):

    کد:
    if (PID>= && PID<=1023)
         left_pwm=1023-PID, right_pwm=1023;
    
    else if (PID>1023)
         left_pwm=PID-1023, right_pwm=1023;
    
    else if (PID<0 && PID>=-1023)
         left_pwm=1023, right_pwm=1023+PID;
    
    else if (PID<1023)
         left_pwm=1023, right_pwm=-1023-PID;
    اگر در هر يک از بخش ها ابهامي وجود داشته باشه من در خدمتم. :job: :job: :job: :job: :job:
    اي پادشه خوبان داد از غم تنهايي

    دل بي تو به جان آمد وقت است که باز آيي
  10. #10
    2012/11/23
    1
    0

    پاسخ : استفاده ازالگوريتم PID و بافر در ربات مسيرياب

    سلام
    واقعا که خوب مفهوم و ... رسوندین فقط اگه میشه برای تعوض جهت چرخش هم نمونه کد بزارین خیلی خوب میشه.
    راستی kp و kd رو که باید بدست بیاریم در چه رنجی قرار دارن معمولا ؟؟ :job:
صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 17

موضوعات مشابه

  1. ربات مسيرياب با PID
    توسط يمنا در انجمن رباتيك و مكاترونيك
    پاسخ: 3
    آخرين نوشته: 2017/01/22, 23:53
  2. چگونه از بافر بجای اپ امپ برای ربات مسیریاب استفاده کنم؟
    توسط erfan.astinhost در انجمن مدارهای آنالوگ و مدارهای مجتمع
    پاسخ: 15
    آخرين نوشته: 2015/12/15, 14:26
  3. برنامه ربات مسيرياب
    توسط مهداف در انجمن ربات های مسیر یاب
    پاسخ: 0
    آخرين نوشته: 2015/11/18, 18:18
  4. موتور ربات مسيرياب
    توسط milad15 در انجمن رباتيك و مكاترونيك
    پاسخ: 4
    آخرين نوشته: 2014/10/27, 20:25
  5. نحوه ي استفاده از بافر در ربات مسيرياب
    توسط m.j.m.a در انجمن ربات های مسیر یاب
    پاسخ: 3
    آخرين نوشته: 2013/09/05, 13:47

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •