فهرست مطالب:

راهی برای استفاده از واحد اندازه گیری اینرسی؟: 6 مرحله
راهی برای استفاده از واحد اندازه گیری اینرسی؟: 6 مرحله

تصویری: راهی برای استفاده از واحد اندازه گیری اینرسی؟: 6 مرحله

تصویری: راهی برای استفاده از واحد اندازه گیری اینرسی؟: 6 مرحله
تصویری: واقعا رفتم جزیره لختیها لخت مادرزاد شدم 2024, نوامبر
Anonim
راهی برای استفاده از واحد اندازه گیری اینرسی؟
راهی برای استفاده از واحد اندازه گیری اینرسی؟

زمینه:

من برای سرگرمی یک ربات می سازم که می خواهم به صورت مستقل در داخل خانه حرکت کند.

این یک کار طولانی است و من مرحله به مرحله آن را انجام می دهم.

من قبلاً 2 دستورالعمل در مورد آن موضوع منتشر کرده ام:

  • یکی در مورد ساخت رمزگذار چرخ
  • یکی در مورد اتصال wifi

ربات من به کمک 2 موتور DC با کمک رمزگذار چرخ داخلی من هدایت می شود.

در حال حاضر در حال بهبود کنترل حرکت هستم و مدتی را با ژیروسکوپ ، شتاب سنج و IMU گذرانده ام. خوشحال می شوم این تجربه را به اشتراک بگذارم.

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

مرحله 1: چرا باید از واحد اندازه گیری اینرسی استفاده کرد؟

چرا باید از واحد اندازه گیری اینرسی استفاده کرد؟
چرا باید از واحد اندازه گیری اینرسی استفاده کرد؟

پس چرا از IMU استفاده کردم؟

اولین دلیل این بود که اگر رمزگذار چرخ به اندازه کافی دقیق بتواند حرکت مستقیم را کنترل کند ، حتی پس از تنظیم ، نتوانستم برای چرخش کمتر از +- 5 درجه دقت دقیقی داشته باشم و این کافی نیست.

بنابراین 2 سنسور مختلف را امتحان کردم. ابتدا از مغناطیس سنج (LSM303D) استفاده می کنم. اصل ساده بود: قبل از چرخش جهت شمال ، هدف را محاسبه کرده و حرکت را تا رسیدن به هدف تنظیم کنید. کمی بهتر از رمزگذار اما با پراکندگی بیش از حد بود. پس از آن سعی کردم از ژیروسکوپ (L3GD20) استفاده کنم. اصل فقط ادغام سرعت چرخش ارائه شده توسط سنسور برای محاسبه چرخش بود. و خوب کار کرد. من توانستم چرخش را در درجه +1 کنترل کنم.

با این وجود من کنجکاو بودم که از IMU استفاده کنم. من جزء BNO055 را انتخاب می کنم. مدتی را صرف درک و آزمایش این IMU کردم. در پایان تصمیم گرفتم این سنسور را به دلایل زیر انتخاب کنم

  • من می توانم چرخش و همچنین با L3GD20 را کنترل کنم
  • هنگام حرکت مستقیم می توانم چرخش جزئی را تشخیص دهم
  • برای مکان یابی ربات باید جهت شمال را بدست آورم و کالیبراسیون قطب نما BNO055 بسیار ساده است

مرحله 2: چگونه از BNO055 برای محلی سازی دو بعدی استفاده کنیم؟

چگونه از BNO055 برای محلی سازی دو بعدی استفاده کنیم؟
چگونه از BNO055 برای محلی سازی دو بعدی استفاده کنیم؟

BNO055 IMU یک حسگر هوشمند Bosch 9 محور است که می تواند جهت گیری مطلق را ارائه دهد.

برگه داده مستندات کاملی را ارائه می دهد. این یک جزء با تکنولوژی بالا است ، این یک محصول نسبتاً پیچیده است و من چند ساعت وقت گذاشتم تا نحوه کار آن را بیاموزم و روش های مختلف استفاده از آن را امتحان کنم.

من فکر می کنم به اشتراک گذاری این تجربه می تواند مفید باشد.

ابتدا از کتابخانه Adafruit استفاده کردم که ابزار خوبی برای کالیبراسیون و کشف سنسور است.

در پایان و پس از آزمایش های زیاد تصمیم گرفتم

  • از کتابخانه Adafruit فقط برای صرفه جویی در کالیبراسیون استفاده کنید
  • استفاده از 3 حالت تمام BNO055 (NDOF ، IMU ، Compss)
  • Arduino Nano را برای محاسبه محلی سازی بر اساس اندازه گیری های BNO055 اختصاص دهید

مرحله 3: Hardware Point of Vue

Hardware Point of Vue
Hardware Point of Vue
Hardware Point of Vue
Hardware Point of Vue
Hardware Point of Vue
Hardware Point of Vue

BNO055 جزء I2C است. بنابراین برای برقراری ارتباط به منبع تغذیه ، SDA و SCL نیاز دارد.

فقط با توجه به محصولی که خریداری کرده اید به ولتاژ Vdd دقت کنید. تراشه Bosch در محدوده: 2.4V تا 3.6V کار می کند و می توانید قطعه 3.3v و 5v را پیدا کنید.

برای اتصال نانو و BNO055 هیچ مشکلی وجود ندارد.

  • BNO055 از نانو استفاده می کند
  • SDA و SCL با 2 تا 2k مقاومت کششی متصل می شوند.
  • 3 LED متصل به نانو برای تشخیص (با مقاومت)
  • 2 کانکتور برای تعریف حالت پس از بوت استفاده می شود
  • 1 اتصال به سمت BNO (Gnd ، Vdd ، Sda ، Scl ، Int)
  • 1 اتصال به سمت Robot/Mega (+9V ، Gnd ، sda ، Scl ، Pin11 ، Pin12)

کمی لحیم کاری و بس!

مرحله 4: چگونه کار می کند؟

چگونه کار می کند؟
چگونه کار می کند؟

از نقطه ارتباطی vue:

  • نانو استاد اصلی گذرگاه I2C است
  • Robot/Mega و BNO055 برده های I2C هستند
  • نانو ثبات ثبات BNO055 را می خواند
  • Robot/Mega یک سیگنال عددی برای درخواست کلمه از نانو می دهد

از نقطه محاسبه vue: نانو همراه با BNO055 ارائه می دهد

  • عنوان قطب نما (برای محلی سازی استفاده می شود)
  • یک عنوان نسبی (برای کنترل چرخش ها استفاده می شود)
  • عنوان و موقعیت مطلق (برای کنترل حرکات استفاده می شود)

از نقطه نظر عملکردی vue: The Nano:

  • کالیبراسیون BNO055 را مدیریت می کند
  • پارامترها و دستورات BNO055 را مدیریت می کند

زیر سیستم Nano & BNO055:

  • محاسبه سرفصل و مکان یابی مطلق برای هر ربات (با ضریب مقیاس)
  • عنوان نسبی را در حین چرخش ربات محاسبه کنید

مرحله 5: معماری و نرم افزار

معماری و نرم افزار
معماری و نرم افزار

نرم افزار اصلی روی Arduino Nano اجرا می شود

  • معماری بر اساس ارتباط I2C است.
  • من تصمیم گرفتم یک نانو را اختصاص دهم زیرا این Atmega که ربات را اجرا می کند قبلاً بارگیری شده بود و این معماری استفاده از آن را در مکانهای دیگر آسان تر می کند.
  • نانو ثبت BNO055 را می خواند ، سرفصل و محلی سازی را در رجیسترهای خود محاسبه و ذخیره می کند.
  • Arduino Atmega که کد ربات را اجرا می کند ، اطلاعات رمزگذار چرخ ها را به نانو می فرستد و سرفصل ها و محلی سازی داخل رجیسترهای نانو را می خواند.

کد فرعی (نانو) در اینجا در GitHub موجود است

ابزار کالیبراسیون Adafruit در اینجا در GitHub (کالیبراسیون در eeproom ذخیره می شود)

مرحله ششم: چه چیزی یاد گرفتم؟

در مورد I2C

ابتدا سعی کردم 2 استاد (آردوینو) و 1 برده (سنسور) را در یک گذرگاه داشته باشم ، اما در نهایت این امکان وجود دارد و ساده ترین حالت این است که فقط نانو را به عنوان اصلی تنظیم کرده و از اتصال GPIO بین 2 آردوینو برای "درخواست توکن" استفاده کنم. به

در مورد BNO055 برای جهت دو بعدی

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

برای کاهش اندازه کد و حفظ امکان استفاده از وقفه BNO055 برای تشخیص برخورد ، ترجیح می دهم از کتابخانه Adafruit استفاده نکنم و این کار را به تنهایی انجام دهم.

توصیه شده: