QuadRotor

فروردین امسال من به همراه تعدادی از دوستان رباتیکی(!) در قالب تیم RRL در مسابقات ایران اپن 2011 ، در بخش رباتهای پرنده شرکت کردیم . این عکس کوادروتور تیم ما هست (بود!):

با زحمات و تلاشهای اعضای تیم ، تونستیم تو این مسابقات مقام دوم رو بدست بیاریم! اینم یه عکس سته جمعی از اعضای  + استاد راهنمای تیم (دکتر شهری) :

 با توجه به اینکه کوادروتور ما نسبتا سنگین (2.5 کیلو!) و بزرگ شده بود و عملکرد خیلی مطلوبی نداشت ، بعد از مسابقات من تصمیم گرفتم یه کواد روتور دیگه بسازم تا برای مسابقات بعدی بهتر ظاهر بشیم (فعلا اعضای تیم جدید مشخص نیست)!

در حال حاظر موفق شدم کوادروتور جدید رو بسازم :

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

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

/ 44 نظر / 15 بازدید
نمایش نظرات قبلی
مرتضي

سلام. ممنون بابت راهنمايي. يه فيلتر پياده سازي كردم كه ساده شده ي كالمن هست و در يه مقاله ديدمش. بر پايه ي ژيروسكوپ 2 محورهه و سنسور شتاب 3 محورهه بود ، خوب هم جواب داد ، اما متاسفانه براي yawing نفهميدم چيكار كنم ، سنسور مغناطيس رو خودم راه انداختم و heading اش هم اوكي كردم و بين 0 تا 360 بهم مقدار مي دهه ، منتها با خم شدن در جهت roll يا pitch خطا دارهه ، نرمالايزش هم كردم و تاثيري نداشت. يه روش مستقل براي اين منظور هست؟ كه فقط yawing هم جدا درست كنم؟ مورد ديگه اينكه ضرائب PID براي هر كدام از roll و pitch و yaw بايد مستقل باشه؟! يا با يك ضريب براي 3تاييش مي شه جواب گرفت؟ منم براي كواد دارم از lpc استفاده مي كنم. تست هايي كه بعد از اين مدت زدم بهتر شدن ، اما هنوز قابل قبول نيستن. من ته كواد رو با يه كش چند سانتي به يه وزنه ي 1kg وصل كردم كه از حدي تجاوز نكنه ،‌همين هم مشخصه كمي كار رو خراب مي كنه ، اما كلا صاف بلند نمي شه! براي تست hovering كواد رو چطوري ببندم كه خطرناك نباشه؟! اگر ايميلتون هم بفرستيد ، من كدهاي سنسورها و pid رو و يه سري اطلاعات ديگه رو بهتون مي رسونم كه تبادل اطلاعات بهتري داشته باشيم مرسي.

مرتضي

مرسي. بعد از ارسال قبليم ، با بند و كش ، محور x رو از 2 سمت به 2 ستون بستم و الان كواد معلق هست و فقط حول محور x تغييرات داريم ، براي تست roll . خوب زوايا رو كه ميگيرم و مشكلي نيست ، ضرائب PID هم تغيير دادم ، زماني كه به پايداري مي رسه ، يكم مي گذرهه باز خراب مي كنه و كمي نوسان مي كنه تا دوبارهه به تعادل برسه. بخاطر بند هايي كه بستم طبيعتا كواد به يك سمت بيشتر تمايل دارهه و در ابتدا در اون سمت مي خوابه ، مي خواستم بدونم اين دليل خراب شدن هست يا نه؟ g كه خروجي PID هست اصلا منفي نمي شه! اين طبيعيه؟! از نمودارها در ارسال بعد لينك مي ذارم. مقدار هايي كه به موتورها مي دم مستقيم همين g هستن ، آيا درسته؟ به 2تاشون مثبت اعمال مي شه و 2تا ديگه رو منفي اثر مي دم. مقداري كه به هر موتور مي دم ، يه آستانه+ ضريبي از throtel + همين g هست . اگر كلا خطا ي yaw رو نخوام اصلاح كنم ، خروجي خيلي بد مي شه؟!

مرتضي

اين نمودارها رو هم لطفا ببينيد: از كواد اطلاعات رو مي رسونم به PC : رنگي كه براي yaw در نمودار هست ، در واقع در اين نمودارها خروجي PID براي roll هست كه بايد با نمودار roll تطبيقش بديد. همون g كه گفتم. اين نمودار حاصل 200 بار نمونه برداري هست كه حدود 12 ثانيه طول مي كشه. ضرائب هم به ترتيب در اسمش نوشتم ، اين يه PID ساده بود. http://s1.picofile.com/file/7970828602/roll_error_and_copansate_0_41_0_01_14_6.jpg اينها PID اش به سبك Ardocopter هست ، البته جاي dt از دوره زماني خوندن جايرو استفاده كردم. مهمه؟ http://s2.picofile.com/file/7970827739/roll_error_and_copansate_0_4_0_008_0_15_newPID.jpg http://s1.picofile.com/file/7970828488/roll_error_and_copansate_0_4_0_008_0_16_newPID.jpg بنظرم همون اولي بهتر بود ، اما در كل هر 2 تقريبا يه جور جواب دادن و مشكل رفع نشدهه. بخاطر فرستنده گيرنده اي كه استفاده مي كنم زمان هر دور اجراي دستورات 51 تا 150 ميلي ثانيه اي طول مي شه. بيشتر 51. اگر نكته اي به ذهنتون مي رسه ممنون مي شم راهنمايي كنيد. اشكال كار من در همين PID هست. مرسي.

مرتضي

لينك اولي مشكل داشت ، دوبارهه اينجا مي ذارم. http://s4.picofile.com/file/7970861719/roll_error_and_copansate_0_41_0_01_14_6.jpeg محور y هم براي همه بر حسب درجه هست.

مرتضي

سلام بر آقا فرزاد عزيز. به سرعت لوپ بعد از راه اندازي مگنتوميتر شك كردهه بودم ها !! فكر كنم خوب كانفيگش نكردم ، به هر حال فعلا حذفش كردم ، سرعت لوپ زير 0.5 ميلي ثانيه اومد! :D :Yes: ! خوب مقدار جايرو و شتاب سنج رو با فركانس 100Hz مي خونم و در همون حلقه محاسبات انجام مي شه و به موتور مقدار دهي مي شه ، اينطوري خوبه؟ مشكلي ندارهه؟ تست هايي زدم ، اما چيزي نيست كه بايد باشه ، شكم روي PID هست. مقدار سنسورها رو فقط يك بار مي خونم، مشكلي ندارهه؟ ، بنظرم زاويه ها رو درست مي دهه. " ويدئو + توضيحات در پست بعد" شك روي مقداري كه به موتور مي دم هم دارم. بنظرم ضريب PID بايد با يه نسبتي از درصد throttle به موتور اعمال بشه ، وگرنه جبرانسازي و سرعت جبران و پايداري در سرعت هاي مختلف متفاوت هست. m1=g1*(throttle/X)+throttle+PWM_100 اينجوري به موتور مقدار مي دم. X=10 و throttle=500 يعني براي جبرانسازي نهايتا 50 واحد pwm در دست هست ، نتيجه كمي كند هست. X=3 يعني ماكس اثر PID ، مي شه 1/3 تراتل ، جبرانسازي قدرت بيشتري دارهه و ... . خروجي PID يعني g بين 0 تا 1 scale مي شه. آيا رابطه اي كه استفاده مي كنم مناسبه؟ مرسي

مرتضي

اين ويدئو هم از تست Roll گرفتم. http://www.aparat.com/v/R1kih البته كمي I مقدارش زياد بودهه بنظرم. اولش كواد به حال خودش هست ، معمولا بين -5 تا 5 تغييرات دارهه ، گاهي هم جو مي گيرش و روي يه زاويه يكمي زياد مي مونه ، تعادلش در اوايل بهترهه تا وسط كار. حتي بيت 10 تا 15 درجه هم گاهي منحرف مي شه! جايي كه با دست منحرف مي شه و كمي طول مي كشه ، يا مي گيرمش ، فكر مي كنم بخاطر I ، ميزان ارور زياد مي شه و نتيجه ي جبران سازي كمي عجيب. اما وقتي سريع منحرف مي كنم و نگه اش نمي دارم ، جبرانسازيش معمولا اكثر اوقات بد نيست. در ويدئو تمام حالت هاي بالا كه توضيح دادم هست. بنظرتون مشكل از كجا مي تونه باشه؟! به اين كواد مي شه اميد داشت؟! :( حتي 100Hz رو كمتر كردم ، گفتم شايد مقدار سنسورها گاهي آماده نيست و خونده مي شه ، اما نتيجه تفاوتي نكرد ، اين رفتار زشتش از قبل تا الان پابرجاست . ممنون مي شم اگر نكته اي به ذهنتون مي رسه ، بازم راهنمايي كنيد. تشكر :D

مرتضي

ممنون بابت جواب :) 1. براي تنظيم PID به ترتيب P و بعد D و بعد PD و بعد كمي I اضافه مي كنم. p خالي ارورش 100% هست :D كواد كلا به هر دو سمت مي خوابه ، هميشه هم همينطورهه فقط سرعت كوبيده شدنش متفاوت مي شه. D رو اضاف مي كنم كه به موقع ترمز بگيرهه و overshoot كم بشه ، كمي I مي دم كه نرم تر بشه و خطاي ماندگارش تا حدي منتفي. ماكس جمع شونده رو بايد محدود تر كنم كه گير نكنه. 2.اطلاعات رو وايرلس مي فرستادم و برنامه ي سمت PC كه نوشتم كمي باگ دارهه ، باود ريت هم زياد نبود كه نويز رو بشه تشخيص داد ، اما چيزي كه بود بنظر خوب و صحيح مي رسيد ، سعي مي كنم يه وقتي جور كنم و يه برنامه ديگه براي RS232 بنويسم كه نويز رو چك كنم. 3. اگر رنج تغييرات PWM مثلا 1000 تا باشه ، چه رنجي رو براي خروجي PID بايد اختصاص داد؟ اولش منم جمعشون مي كردم ، اما در تراتل هاي مختلف جواب هاي مختلف گرفتم. خروجي رو به تراتل وابسته كردم بنظرم جواب بهتر شد. الان با 200Hz دارم سنسورها رو مي خونم ، باز روش كار مي كنم ببينم چي مي شه ، الان بلند مي شه ، اما يه مقدار زيادي دريفت دارهه ... ممنون از راهنماييتون ، باز روش كار مي كنم و نتيجه رو مي گم.

مرتضي

دوبارهه سلام. ظاهرا مشكل از فيلتر هست. دارم روش كار مي كنم و خيلي تغييرات داشته. الان واقعا يكم كه ضرايب PID رو دست مي زنم نتيجه اش كاملا ملموس هست! PD خوب جواب داد و همون 2-3 درجه اي نهايتا بازي داشت ، اما مشكلش اينه كه تراتل رو كه مي برم بالا پايداريش سر يه زاويه ي خاصي هست ، مثلا از 0 درجه مي ياد روي 10 درجه ، با اينكه setpoint رو 0 دادم و در لحظه ي شروع هم زاويه 0 هست. تراتل كه زياد بشه اين انحراف هم بيشتر مي شه! كمتر كه بشه ، انحراف هم كمتر مي شه ، اما پايداريش خوبه. I رو يه كوچولو اضاف كردم ، لرزش توش رو حس كردم ، تراتل مي رفت بالا خطاي ماندگار رو كامل نمي تونست جبران كنه ... تا حدي بيشتر بردم بالا و خطا رو حذف كرد ، اما اون پايداري رو ديگه ندارهه ... البته فيلتر هنوز جاي كار دارهه و دارم روش كار مي كنم. متاسفانه وقتي موتورها روشنه زاويه ها رو هم زمان نمي تونم ببينم. اگر همچين چيزي بهش برخورديد ، از چه چيزي ناشي مي شه؟ الان خروجي PID رو با تراتل جمع مي كنم و به تراتل وابسته اش نكردم ، در سرعت هاي مختلف قدرت جبرانسازي فرق مي كنه. رنج خروجي PID نسبت به رنج موثر PWM هم ممنون مي شم بگيد. تشكر.

اریا

سلام مهندس . با ایمیل من تماس بگیر در مورد کوادروتور جهت تولید

ali

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