PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : ساخت یک imu شش محوره با سنسور mpu6050



roohlla
14-03-2014, 02:07
سلام دوستان . احتمالا شما هم این روزا اگه کارتون با ربات های پرنده و یا پروژه های پردازش حرکتی افتاده باشه از سنسور MPU6050 شنیدید . اگه نشنیدید اشکال نداره . من در این تاپیک قصد دارم مراحل ساخت یک IMU عالی 6 محوره رو براتون توضیح بدم تا بشه از اون در پروژه های مختلف استفاده کرد. پس قبل از هر چیز شروع می کنم از گفتن در مورد این که IMU چی هست و اصلا به چه درد می خوره . الان یخورده دیره ii998). انشاالله فردا شروع می کنم به گفتن تجربیاتم در این زمینه .

roohlla
14-03-2014, 11:17
IMU چیه و به چه دردی می خوره :

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

سنسور های شتاب سنج :

شتاب سنج ها سنسور هایی هستند که شتاب رو اندازه میگیرند :mrgreen: . ولی صبر کنید . نکته همین جاست ، اونا هر نوع شتابی رو اندازه می گیرن و براشون شتاب جاذبه و شتاب های دینامیکی حاصل از ربات فرقی نمی کنه . این سنسور ها در واقع برایند این شتاب ها رو به شکل یک بردار بهمون میدند و این بدین معناست که زاویه ای که ما با محاسبات ریاضی به دست میاریم با حرکت های ربات میتونه مورد تغییر قرار بگیره .
همچنین مشکل دیگه ی اکثر شتاب سنج ها اینه که خروجی های اونا تا حد زیادی نویزی هست که این خودش می تونه باعث شکست خوردن پروژه بشه .
شتاب سنج ها ی موجود در بازار :
در بازار شتاب سنج ها ی مختلف با مشخصات مختلف وجود داره که از معروف ترین ها ی اونا میشه به MPU6050 ، ADXL345 ، MPU9150 اشاره کرد . البته دو سنسور MPU فقط شتاب سنج نبوده وامکانات بسیار زیاد دیگه ای رو هم داخل خودشون دارند.

سنسور های ژیروسکوپ :
سنسور های ژیروسکوپ به ما امکان اندازه گیری سرعت زاویه ای حول محور های مختصاتی رو میدند . پس می شه با یک انتگرال گیری عددی از این داده ها به زوایا نسبت یه محور های مختصات پی برد . البته این سنسور ها هم مزایا و معایبی دارند :
مزایا :
مزیت این سنسور ها اینه که خروجی اونها به شتاب های دینامیکی حساس نیست و نویز اونها هم تا حدی کمتره (البته نه خیلی) .
معایب :
خروجی این سنسور ها یک آفست دارند که لزوما در شرایط مختلف ثابت نیست . حال در اینجا انتگرال گیری از این عدد ثابت منجر به این میشه که خروجی سنسور (زویای به دست آمده) در طول زمان دریفت پیدا کرده و خطا دار بشند. برای این که یه درک بهتر از این مساله به دست بیارید این جوری می گم : شما سنسور رو ثابت گذاشتید اما خروجی به جای این که زوایای ثابتی رو نشون بده زوایای متغیر با زمانی نشون میده که دارند زیاد و یا کم می شند.

سنسور های قطب نما :

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

راه حل ؟؟

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

درجه ی آزادی IMU یعنی چی:

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

IMU ای که قراره به عنوان مثال اینجا ساخته بشه چه مشخصاتی داره ؟

IMU ای که در این تاپیک می خواد ساخته بشه از یک کتابخونه ی Arduino ، یک MEGA32 و سنسور MPU6050 تشکیل خواد شد . MPU6050 سنسوری هست که داخل خودش دوسنسور شتاب سنج و ژیروسکوپ رو یک پردازنده ی حرکتی داره و در پست بعد درباره ی اون توضیح خواهم داد . در ایجا ویدیوای از اتمام شده ی این کار رو دانلود کنید:
You can see links before reply

در پست بعد به سنسور MPU6050 خواهم پرداخت . پس فعلا ...

roohlla
15-03-2014, 17:05
خوب ادامه ی مطلب ...

سنسور MPU6050 :

این سنسور یک پکیج هست که داخل خودش سه بخش اساسی داره !
1- سنسور شتاب سنج 3 محوره ی دجیتال 16 بیتی با قابلیت اندازه گیری رنج ها ی 2g، ±4g، ±8g، ±16g±

2- سنسور ژیروسکوپ دجیتال 3 محوره 16 بیتی با قابلیت اندازه گیری رنج های 250±، 500±، 1000± و 2000± درجه بر ثانیه

3-واحد پردازند ی DMP که کار ترکیب و پردازش اطلاعات سنسور ها رو واسه ی کاربر انجام میده .

خوب . راه اندازی دو قسمت اول که کاری نداره و برای اون هم دیتاشیت کامل وجود داره و هم مثال های مختلف . لینک زیر فیلم و کتابخونه ی راه اندازی این دو بخش و دریافت داد ها ی خام رو انجام داده (با کدویژن) (این لینک فقط جنبه ی آموزشی داره و امیدوارم تبلیغ تلقی نشه):
You can see links before reply

اما اصل ماجرا تازه از اینجا شروع میشه و اون هم ترکیب این داده هاست . برای این کار یه راه اینه که کار ترکیب داده ها رو داخل میکرو انجام بدیم. یعنی پیاده سازی الگوریتم های دیتا فیوژن و فیلتر های دجیتال . برای این کار یکی از کتاب خونه های مطرح FreeIMU هست که برای Arduino نوشته شده و از فیلتر Mahony استفاده میکنه که جزئیات تئوریش رو می تونید از لینک زیر بخونید :
You can see links before reply
همچنین کتابخونه ی FeeIMU رو میتونید از لینک زیر دانلود کنید:
You can see links before reply
آلگوریتم ها و فیلتر های دیگه ای هم وجود داره مثل : kavlman filter , compelementry filter و ...که میشه با یه سرچ کوچیک کلی اطلاعات در مورد اونا به دست اورد.
و اما راه دوم و راه انتخاب شده برای ساخت IMU در این پست : استفاده از DMP داخلی خود سنسور :

همون طور که گفتم سنسور MPU6050 و خیلی دیگه از سنسور های شرکت Ivansense (سازنده ی سنسور مورد بررسی) داخل خودشون یک واحد پردازشگر برای انجام دیتافیوژن دارند . ولی یک مشکل وجود داره و اون اینه که جزئیات اون رو در اختیار عموم قرار ندادند و خیلی مبهم در این باره برخورد کردن (حد اقل برای من من مبهم بودن) . برای همین یه نفر توی یکی از سایت ها ی خارجی از طریق مهندسی معکوس firmware ی که روی سنسور ریخته میشه تا پردازنده ی DMP کانفیگ بشه در آورده و اون اون رو در دل یک کتابخونه ی کامل به اسم i2cdevlib-master جا داده (این کتاخونه شامل درایور برای سنسورها ی رایج مبتنی بر I2C هست) . این کتابخونه رو به همراه مثالش می تونید از یکی از دو لینک زیر دانلود کنید :
You can see links before reply
i2cdevlib-master.zip (You can see links before reply)

این کتابخونه برای کامپایلر Arduino نوشته شده که می تونید این کامپایلر رو هم از لینک زیر دانلود کنید:
You can see links before reply

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

hamidam
21-03-2014, 23:05
سلام
سال نو مبارک
مهندس منتظر ادامه اش هستیم
برای راه اندازی به برد Arduino احتیاج هست ؟

roohlla
24-03-2014, 02:45
خوب ، اول بابت تاخیر زیادم عزرخواهی میکنم . دلیلش هم نصب ویندوز روی سیستم بوده .
اول کتابخونه ی زیر رو دانلود کنید :
You can see links before reply
داخل اون یک فولدر به نام MPU6050وجود داره . اون همون فولدر کتابخونه ی ماست . حالا از آدرس زیر کامپایلر arduino رو دانلود کنید :
You can see links before reply
حالا طبق آموزش های زیر کتابخونه رو به پروژه Add کنید(طبق روش نصب دستی) :
You can see links before reply
از فولدر Examples کتابخونه ای که دانلود کردید ، فایل MotionApp رو با استفاده از نرم افزار Arduino باز کنید. این مثال دمویی هست که در فیلمی که گذاشته بودم دیدید . قبل از هر چیزی برنامه رو تغییر میدیم و باودریت رو برابر با 57600 قرار میدیم. حالا برنامه رو کامپایل می کنیم (اموزش رو می تونید توی سایتی که گذاشتم ببینید)
تا الان شاید از خودتون پرسیده باشید که برای تمام این کار ها به برد آردوینو نیاز داریم؟ جوابتون منفی هست . برای توضیحات به پست زیر مراجعه کنید :
You can see links before reply
حالا باید تونسته باشید برنامه رو وکامپایل کرده و روی میکرو ریخته باشید . اتصالات سخت افزاری ماژول و میکرو رو برقرار کرده و ترمینال رو روی باود ریت 57600تنظیم کنید . حالا مدار رو روشن کنید . باید کامنت هایی از طرف مدار دریافت کنید .
در قسمت بعد نحوه ی راه اندازی اون دموی گرافیکی رو بهتون یاد خواهم داد .
پس فعلا ...

dastjerdi
26-04-2014, 23:27
مهندس جون منتظریما...

arvin2009
27-04-2014, 00:43
ما هم همچنین.ادامه بده مهندس کار ارزشمندی میشه

irelectronic
29-07-2014, 15:47
خوب ادامه ی مطلب ...

سنسور MPU6050 :

این سنسور یک پکیج هست که داخل خودش سه بخش اساسی داره !
1- سنسور شتاب سنج 3 محوره ی دجیتال 16 بیتی با قابلیت اندازه گیری رنج ها ی 2g، ±4g، ±8g، ±16g±

2- سنسور ژیروسکوپ دجیتال 3 محوره 16 بیتی با قابلیت اندازه گیری رنج های 250±، 500±، 1000± و 2000± درجه بر ثانیه

3-واحد پردازند ی DMP که کار ترکیب و پردازش اطلاعات سنسور ها رو واسه ی کاربر انجام میده .

خوب . راه اندازی دو قسمت اول که کاری نداره و برای اون هم دیتاشیت کامل وجود داره و هم مثال های مختلف . لینک زیر فیلم و کتابخونه ی راه اندازی این دو بخش و دریافت داد ها ی خام رو انجام داده (با کدویژن) (این لینک فقط جنبه ی آموزشی داره و امیدوارم تبلیغ تلقی نشه):
You can see links before reply

اما اصل ماجرا تازه از اینجا شروع میشه و اون هم ترکیب این داده هاست . برای این کار یه راه اینه که کار ترکیب داده ها رو داخل میکرو انجام بدیم. یعنی پیاده سازی الگوریتم های دیتا فیوژن و فیلتر های دجیتال . برای این کار یکی از کتاب خونه های مطرح FreeIMU هست که برای Arduino نوشته شده و از فیلتر Mahony استفاده میکنه که جزئیات تئوریش رو می تونید از لینک زیر بخونید :
You can see links before reply
همچنین کتابخونه ی FeeIMU رو میتونید از لینک زیر دانلود کنید:
You can see links before reply
آلگوریتم ها و فیلتر های دیگه ای هم وجود داره مثل : kavlman filter , compelementry filter و ...که میشه با یه سرچ کوچیک کلی اطلاعات در مورد اونا به دست اورد.
و اما راه دوم و راه انتخاب شده برای ساخت IMU در این پست : استفاده از DMP داخلی خود سنسور :

همون طور که گفتم سنسور MPU6050 و خیلی دیگه از سنسور های شرکت Ivansense (سازنده ی سنسور مورد بررسی) داخل خودشون یک واحد پردازشگر برای انجام دیتافیوژن دارند . ولی یک مشکل وجود داره و اون اینه که جزئیات اون رو در اختیار عموم قرار ندادند و خیلی مبهم در این باره برخورد کردن (حد اقل برای من من مبهم بودن) . برای همین یه نفر توی یکی از سایت ها ی خارجی از طریق مهندسی معکوس firmware ی که روی سنسور ریخته میشه تا پردازنده ی DMP کانفیگ بشه در آورده و اون اون رو در دل یک کتابخونه ی کامل به اسم i2cdevlib-master جا داده (این کتاخونه شامل درایور برای سنسورها ی رایج مبتنی بر I2C هست) . این کتابخونه رو به همراه مثالش می تونید از یکی از دو لینک زیر دانلود کنید :
You can see links before reply
i2cdevlib-master.zip (You can see links before reply)

این کتابخونه برای کامپایلر Arduino نوشته شده که می تونید این کامپایلر رو هم از لینک زیر دانلود کنید:
You can see links before reply

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

سلام خدمت دوستان
من به طریقی فایلهای مربوط به DMP سنسور ژایرو MPU6050 رو تهیه کردم. در پست های بعدی لینک دانلودش رو قرار میدم.
جناب روح الله پس چرا ادامه ندادی.
من از همون کتابخانه ای که گفتید استفاده کردم ولی مشکل من اینه که دریفتش خیلی زیاده مثلاً وقتی حول محور Yaw برگردی و برگردی نقطه اول دوتا عددی که بهت میده خیلی اختلاف دارند و تازه شروع میکنه به تغییر درحالیکه سنسور ثابته و نمی چرخه. تغییراتش هم آنقدر زیاده که نمیشه به نویز و حساسیت و ... ربط بدی و چون بصورت منظم و بصورت شمارشی کاهش یا افزایش داره معلوم میشه که اشکال باید نرم افزاری باشه.

irelectronic
29-07-2014, 17:19
اطلاعات و نمونه کد پردازشگر داخلی (DMP) سنسور MPU6050
DMP (You can see links before reply)

ahravan
29-12-2014, 12:06
You can see links before reply
(You can see links before reply)
راهندازی سنسور MPU6050 (You can see links before reply)


9 ساعت ago معرفی: سنسور InvenSense Mpu-6050 شامل شتاب سنج و جایرو MEMS در یک چیپ است،که دقت ... (You can see links before reply)بیشتر بخوانید » (You can see links before reply)

الیاس
24-04-2016, 00:15
سلام
مهندس کارت حرف نداره
توضیحاتت واقعا عالی هستش
منتظر ادامشیم

engamanc
11-07-2016, 02:25
آموزش کامل کار با MPU6050 و اعمال فیلترهای کالمن و مکمل روی آن
آموزش کامل کار با MPU6050 و راه اندازی آن توسط بردهای آردوینو (You can see links before reply)