İçindekiler:

Atalet Ölçüm Birimi Kullanmanın Bir Yolu ?: 6 Adım
Atalet Ölçüm Birimi Kullanmanın Bir Yolu ?: 6 Adım

Video: Atalet Ölçüm Birimi Kullanmanın Bir Yolu ?: 6 Adım

Video: Atalet Ölçüm Birimi Kullanmanın Bir Yolu ?: 6 Adım
Video: SORU ÇÖZERKEN ASLA YAPMAMAN GEREKEN 6 HATA! 2024, Kasım
Anonim
Atalet Ölçüm Birimi Kullanmanın Bir Yolu ?
Atalet Ölçüm Birimi Kullanmanın Bir Yolu ?

Bağlam:

Bir evin içinde kendi kendine hareket etmek istediğim bir robotu eğlence için yapıyorum.

Uzun bir iş ve adım adım yapıyorum.

Bu konuda zaten 2 talimat yayınladım:

  • bir tekerlek kodlayıcı yapmakla ilgili
  • wifi bağlantısı hakkında

Robotum, ev yapımı tekerlek kodlayıcım yardımıyla 2 DC motor tarafından tahrik ediliyor.

Şu anda hareket kontrolünü geliştiriyorum ve jiroskop, ivmeölçer ve IMU ile biraz zaman geçirdim. Bu deneyimi paylaşmaktan memnuniyet duyarım.

Yerelleştirme hakkında daha fazla bilgi edinmek ister misiniz? Robotu lokalize etmek için yapay zeka ve ultrasonların nasıl birleştirileceğine dair bir makale

Adım 1: Neden Atalet Ölçüm Birimi Kullanılır?

Neden Atalet Ölçüm Birimi Kullanılmalı?
Neden Atalet Ölçüm Birimi Kullanılmalı?

Peki neden bir IMU kullandım?

İlk sebep, eğer tekerlek kodlayıcı düz hareketi kontrol edecek kadar hassassa, ayardan sonra bile dönüş için +- 5 dereceden daha az bir hassasiyet elde edemedim ve bu yeterli değil.

Bu yüzden 2 farklı sensör denedim. İlk önce bir manyetometre (LSM303D) kullanıyorum. İlke basitti: döndürmeden önce kuzey yönünü alın, hedefi hesaplayın ve hedefe ulaşılana kadar hareketi ayarlayın. Kodlayıcıdan biraz daha iyiydi, ancak çok fazla dağılma vardı. Ondan sonra bir jiroskop (L3GD20) kullanmaya çalıştım. İlke, dönüşü hesaplamak için sensör tarafından sağlanan dönüş hızını entegre etmekti. Ve iyi çalıştı. + - 1 derecede döndürmeyi kontrol edebildim.

Yine de biraz IMU denemeyi merak ediyordum. Bir BNO055 bileşeni seçiyorum. Bu IMU'yu anlamak ve test etmek için biraz zaman harcadım. Sonunda aşağıdaki nedenlerden dolayı bu sensörü seçmeye karar verdim.

  • L3GD20 ile olduğu gibi dönüşü de kontrol edebilirim
  • Düz hareket ederken hafif dönüşü algılayabilirim
  • Robot lokalizasyonu için kuzey yönüne ihtiyacım var ve BNO055'in pusula kalibrasyonu çok basit

Adım 2: 2D Yerelleştirme için BNO055 Nasıl Kullanılır?

2D Yerelleştirme için BNO055 Nasıl Kullanılır?
2D Yerelleştirme için BNO055 Nasıl Kullanılır?

BNO055 IMU, mutlak yönlendirme sağlayabilen bir Bosch 9 eksenli akıllı sensördür.

Veri sayfası eksiksiz bir dokümantasyon sağlar. Yüksek teknoloji ürünü bir bileşen, oldukça karmaşık bir ürün ve nasıl çalıştığını öğrenmek ve onu kullanmanın farklı yollarını denemek için birkaç saat harcadım.

Bu deneyimi paylaşmanın faydalı olabileceğini düşünüyorum.

Öncelikle sensörü kalibre etmek ve keşfetmek için iyi bir araç sağlayan Adafruit kütüphanesini kullandım.

Sonunda ve birçok testten sonra karar verdim

  • Adafruit kitaplığını yalnızca kalibrasyonu kaydetmek için kullanın
  • BNO055'in tüm olası modlarından 3'ünü kullanın (NDOF, IMU, Compss)
  • BNO055 ölçümlerine dayalı yerelleştirmeyi hesaplamak için bir Arduino Nano'yu adamak

Adım 3: Vue'nun Donanım Noktası

Vue'nun Donanım Noktası
Vue'nun Donanım Noktası
Vue'nun Donanım Noktası
Vue'nun Donanım Noktası
Vue'nun Donanım Noktası
Vue'nun Donanım Noktası

BNO055 bir I2C bileşenidir. Bu yüzden iletişim kurmak için güç kaynağına, SDA'ya ve SCL'ye ihtiyaç duyar.

Aldığınız ürüne göre Vdd voltajına dikkat edin. Bosch çipi şu aralıkta çalışır: 2.4V ila 3.6V ve 3.3v ve 5v bileşeni bulabilirsiniz.

Nano ve BNO055'i bağlamak için hiçbir zorluk yoktur.

  • BNO055, Nano tarafından desteklenmektedir
  • SDA ve SCL, 2 x 2k pull-up dirençleri ile bağlanır.
  • Teşhis için Nano'ya bağlı 3 LED (dirençli)
  • Önyüklemeden sonra modu tanımlamak için kullanılan 2 konektör
  • BNO'ya doğru 1 konektör (Gnd, Vdd, Sda, Scl, Int)
  • Robot/Mega'ya doğru 1 konektör (+9V, Gnd, sda, Scl, Pin11, Pin12)

Biraz lehimleme ve bu kadar!

Adım 4: Nasıl Çalışır?

O nasıl çalışır ?
O nasıl çalışır ?

vue iletişim noktasından:

  • Nano, I2C veri yolu yöneticisidir
  • Robot/Mega ve BNO055, I2C bağımlılarıdır
  • Nano, BNO055 kayıtlarını kalıcı olarak okur
  • Robot/Mega, kelimeyi Nano'dan istemek için sayısal bir sinyal verir.

vue hesaplama noktasından:BNO055 ile birleştirilmiş Nano şunları sunar:

  • Pusula yönü (yerelleştirme için kullanılır)
  • Göreceli bir başlık (dönüşleri kontrol etmek için kullanılır)
  • Mutlak yön ve konum (hareketleri kontrol etmek için kullanılır)

İşlevsel açıdan bakıldığında: Nano:

  • BNO055 kalibrasyonunu yönetir
  • BNO055 parametrelerini ve komutlarını yönetir

Nano ve BNO055 alt sistemi:

  • her robot tekerleği için mutlak yönü ve lokalizasyonu hesaplayın (bir ölçek faktörü ile)
  • robotun dönüşü sırasında göreceli yönü hesaplayın

Adım 5: Mimari ve Yazılım

Mimari ve Yazılım
Mimari ve Yazılım

Ana yazılım bir Arduino Nano üzerinde çalışıyor

  • Mimari, I2C iletişimine dayanmaktadır.
  • Robotu çalıştıran Atmega'nın zaten yüklü olması ve bu mimarinin başka yerlerde yeniden kullanmayı en kolay hale getirmesi nedeniyle bir Nano ayırmayı seçtim.
  • Nano, BNO055 kayıtlarını okur, kendi kayıtlarında başlık ve yerelleştirmeyi hesaplar ve saklar.
  • Robot kodunu çalıştıran Arduino Atmega, tekerlek kodlayıcı bilgilerini Nano'ya gönderir ve Nano kayıtlarının içindeki başlıkları ve yerelleştirmeyi okur.

Alt sistem (Nano) kodu burada GitHub'da mevcuttur

Adafruit kalibrasyon aracı, burada GitHub'daysa (kalibrasyon eeproom'da saklanacaktır)

Adım 6: Ne Öğrendim?

I2C ile ilgili

İlk olarak aynı bus üzerinde 2 master (Arduino) ve 1 slave (sensör) bulundurmaya çalıştım ama sonunda sadece Nano'yu master olarak ayarlamak ve 2 Arduino arasında "token istemek" için GPIO bağlantısını kullanmak mümkün ve kolay..

2D yönlendirme için BNO055 ile ilgili

3 farklı çalışma moduna odaklanabiliyorum: Robot boştayken NDOF (jiroskop, ivmeölçer ve Pusula kombinasyonu), robot hareket halindeyken IMU (jiroskop, ivmeölçer kombine) ve konum belirleme aşamasında Pusula. Bu modlar arasında geçiş yapmak kolay ve hızlıdır.

Kod boyutunu küçültmek ve çarpışmayı tespit etmek için BNO055 kesmesini kullanma olasılığını korumak için Adafruit kütüphanesini kullanmamayı ve kendi başıma yapmayı tercih ediyorum.

Önerilen: