Mundarija:

Inertial o'lchov birligidan foydalanish usuli?: 6 qadam
Inertial o'lchov birligidan foydalanish usuli?: 6 qadam

Video: Inertial o'lchov birligidan foydalanish usuli?: 6 qadam

Video: Inertial o'lchov birligidan foydalanish usuli?: 6 qadam
Video: Маҳсус фанларни ўқитиш жараёнида қўлланиладиган таълим воситалари 2024, Noyabr
Anonim
Inertial o'lchov birligidan foydalanish usuli?
Inertial o'lchov birligidan foydalanish usuli?

Kontekst:

O'yin -kulgi uchun men uyning ichida avtonom tarzda harakatlanishni xohlayman.

Bu uzoq ish va men bosqichma -bosqich ishlayapman.

Men allaqachon bu mavzu bo'yicha 2 ta ko'rsatma nashr qildim:

  • g'ildirak kodlovchi qilish haqida
  • wifi aloqasi haqida

Mening robotimni o'z uyimda ishlab chiqarilgan g'ildirak kodlagichi yordamida 2 ta doimiy dvigatel boshqaradi.

Men hozirda harakatlanuvchi boshqaruvni takomillashtiryapman va bir muncha vaqtni giroskop, akselerometr va IMU bilan o'tkazdim. Men bu tajriba bilan bo'lishishdan mamnun bo'lardim.

Mahalliylashtirish haqida ko'proq bilmoqchimisiz? Mana, robotni lokalizatsiya qilish uchun sun'iy intellekt va ultratovushni qanday birlashtirish kerak

1 -qadam: Nima uchun inertial o'lchov birligidan foydalanish kerak?

Nega inertial o'lchov birligidan foydalanish kerak?
Nega inertial o'lchov birligidan foydalanish kerak?

Xo'sh, nima uchun men IMUdan foydalandim?

Birinchi sabab shundaki, agar g'ildirak enkoderi to'g'ri harakatni boshqarish uchun etarlicha aniq bo'lsa, sozlashdan keyin ham +5 gradusdan pastroq aylanishni aniqlay olmadim va bu etarli emas edi.

Shunday qilib, men 2 xil sensorni sinab ko'rdim. Birinchidan, men magnitometrni (LSM303D) ishlataman. Bu tamoyil oddiy edi: aylanishdan oldin shimolga yo'nalishni oling, nishonni hisoblang va maqsadga erishguncha harakatni to'g'rilang. Bu kodlovchiga qaraganda biroz yaxshiroq edi, lekin juda tarqalib ketdi. Shundan so'ng men giroskopni (L3GD20) ishlatishga harakat qildim. Printsip faqat aylanishni hisoblash uchun sensor tomonidan berilgan aylanish tezligini birlashtirish edi. Va u yaxshi ishladi. Men aylanishni +- 1 daraja nazorat qila oldim.

Shunga qaramay, men O'IHni sinab ko'rmoqchi bo'ldim. Men BNO055 komponentini tanlayman. Men bu O'IHni tushunish va sinab ko'rish uchun biroz vaqt sarfladim. Oxir -oqibat, men quyidagi sabablarga ko'ra ushbu sensorni tanlashga qaror qildim

  • Men aylanishni L3GD20 bilan ham nazorat qila olaman
  • To'g'ri harakatlanayotganda engil burilishni aniqlay olaman
  • Men robotni lokalizatsiya qilish uchun shimoliy yo'nalishni olishim kerak va BNO055 kompasini kalibrlash juda oddiy.

2 -qadam: 2D lokalizatsiya uchun BNO055 -dan qanday foydalanish kerak?

2D lokalizatsiya uchun BNO055 -dan qanday foydalanish kerak?
2D lokalizatsiya uchun BNO055 -dan qanday foydalanish kerak?

BNO055 IMU - bu Bosch 9 eksa aqlli sensori bo'lib, u mutlaq yo'nalishni ta'minlay oladi.

Ma'lumotlar varaqasi to'liq hujjatlarni taqdim etadi. Bu yuqori texnologiyali komponent, bu juda murakkab mahsulot va men uning ishlashini o'rganish va uni ishlatishning turli usullarini sinab ko'rish uchun bir necha soat sarfladim.

Menimcha, bu tajriba bilan bo'lishish foydali bo'lishi mumkin.

Birinchidan, men sensorni kalibrlash va kashf qilish uchun yaxshi vosita bo'lgan Adafruit kutubxonasidan foydalandim.

Oxirida va ko'plab sinovlardan so'ng men qaror qildim

  • faqat kalibrlashni saqlash uchun Adafruit kutubxonasidan foydalaning
  • BNO055 (NDOF, IMU, Compss) mumkin bo'lgan barcha rejimlaridan 3tasini ishlating.
  • BNO055 o'lchovlari asosida lokalizatsiyani hisoblash uchun Arduino Nano -ni bag'ishlang

3 -qadam: Vue apparat nuqtasi

Uskuna nuqtasi
Uskuna nuqtasi
Uskuna nuqtasi
Uskuna nuqtasi
Uskuna nuqtasi
Uskuna nuqtasi

BNO055 - I2C komponenti. Shunday qilib, u bilan aloqa qilish uchun quvvat manbai, SDA va SCL kerak.

Siz sotib olgan mahsulotga muvofiq Vdd kuchlanishiga e'tibor bering. Bosch chipi diapazonda ishlaydi: 2,4 V dan 3,6 V gacha va siz 3,3 V va 5 V komponentlarini topishingiz mumkin.

Nano va BNO055 ni ulashda hech qanday qiyinchiliklar yo'q.

  • BNO055 Nano tomonidan quvvatlanadi
  • SDA va SCL 2 x 2k tortish qarshiliklari bilan ulangan.
  • Diagnostika uchun 3 nano ulangan LED (rezistorlar bilan)
  • Yuklashdan keyin rejimni aniqlash uchun 2 ta ulagich ishlatiladi
  • BNO tomon 1 ulagich (Gnd, Vdd, Sda, Scl, Int)
  • Robot/Mega tomon 1 ta ulagich (+9V, Gnd, sda, Scl, Pin11, Pin12)

Bir oz lehim va bu hammasi!

4 -qadam: Bu qanday ishlaydi?

Bu qanday ishlaydi ?
Bu qanday ishlaydi ?

Aloqa nuqtai nazaridan:

  • Nano - I2C avtobus ustasi
  • Robot/Mega va BNO055 - I2C qullari
  • Nano doimiy ravishda BNO055 registrlarini o'qiydi
  • Robot/Mega Nano -dan so'zni so'rash uchun raqamli signalni ko'taradi

Hisoblash nuqtasidan: Nano BNO055 bilan birlashtirilgan

  • Kompas sarlavhasi (lokalizatsiya uchun ishlatiladi)
  • Nisbiy sarlavha (aylanishni boshqarish uchun ishlatiladi)
  • Mutlaq sarlavha va pozitsiya (harakatlarni boshqarish uchun ishlatiladi)

Funktsional nuqtai nazardan: Nano:

  • BNO055 kalibrini boshqaradi
  • BNO055 parametrlari va buyruqlarini boshqaradi

Nano va BNO055 quyi tizimi:

  • Har bir robot g'ildiragi uchun mutlaq sarlavha va lokalizatsiyani hisoblang (o'lchov koeffitsienti bilan)
  • robotning aylanishi paytida nisbiy sarlavhani hisoblang

5 -qadam: Arxitektura va dasturiy ta'minot

Arxitektura va dasturiy ta'minot
Arxitektura va dasturiy ta'minot

Asosiy dasturiy ta'minot Arduino Nano -da ishlaydi

  • Arxitektura I2C aloqasiga asoslangan.
  • Men robotni boshqaradigan Atmega ancha yuklanganligi va bu arxitektura boshqa joyda qayta ishlatilishini osonlashtirgani uchun men nanoni bag'ishlashni tanladim.
  • Nano BNO055 registrlarini o'qiydi, sarlavha va lokalizatsiyani hisoblaydi va saqlaydi.
  • Arduino Atmega robot kodini boshqaradi, g'ildiraklarni kodlovchi ma'lumotlarini Nano -ga yuboradi va Nano registrlaridagi sarlavhalar va lokalizatsiyani o'qiydi.

Bu erda GitHub -da kichik tizim (Nano) kodi mavjud

Adafruit kalibrlash vositasi GitHub -da bo'lsa (kalibrlash xonada saqlanadi)

6 -qadam: Men nimani o'rgandim?

I2C haqida

Birinchidan, men bitta avtobusda 2 ta master (Arduino) va 1 ta qul (sensor) bo'lishga harakat qildim, lekin oxirigacha faqat Nanoni master qilib belgilash va 2 Arduino o'rtasida GPIO ulanishidan foydalanish "token so'rash" mumkin..

2D yo'nalish uchun BNO055 haqida

Men 3 xil ish rejimiga e'tibor qaratishim mumkin: robot ishlamay qolganda NDOF (giroskop, akselerometr va kompaslarni birlashtirish), robot harakatlanayotganda IMU (giroskop, akselerometrni birlashtirish) va lokalizatsiya bosqichida kompas. Ushbu rejimlar o'rtasida almashish oson va tez.

Kod hajmini kamaytirish va to'qnashuvni aniqlash uchun BNO055 uzilishidan foydalanish imkoniyatini saqlab qolish uchun men Adafruit kutubxonasidan foydalanmaslikni va buni o'zim qilishni afzal ko'raman.

Tavsiya: