Spisu treści:

Sposób użycia bezwładnościowej jednostki miary?: 6 kroków
Sposób użycia bezwładnościowej jednostki miary?: 6 kroków

Wideo: Sposób użycia bezwładnościowej jednostki miary?: 6 kroków

Wideo: Sposób użycia bezwładnościowej jednostki miary?: 6 kroków
Wideo: Ponad 80 faktów, które dowodzą, że kosmos jest wspaniały i przerażający 2024, Listopad
Anonim
Sposób użycia bezwładnościowej jednostki miary?
Sposób użycia bezwładnościowej jednostki miary?

Kontekst:

Buduję dla zabawy robota, którym chcę autonomicznie poruszać się w domu.

To długa praca i robię krok po kroku.

Opublikowałem już 2 instrukcje na ten temat:

  • jeden o tworzeniu enkodera koła
  • jeden o połączeniu Wi-Fi?

Mój robot jest napędzany przez 2 silniki prądu stałego za pomocą mojego domowego enkodera koła.

Obecnie poprawiam sterowanie ruchem i spędziłem trochę czasu z żyroskopem, akcelerometrem i IMU. Z przyjemnością podzielę się tym doświadczeniem.

Chcesz wiedzieć więcej o lokalizacji ? Oto artykuł o tym, jak połączyć sztuczną inteligencję i ultradźwięki w celu zlokalizowania robota

Krok 1: Dlaczego warto używać bezwładnościowej jednostki miary?

Dlaczego warto używać bezwładnościowej jednostki miary?
Dlaczego warto używać bezwładnościowej jednostki miary?

Dlaczego więc użyłem IMU?

Pierwszym powodem było to, że jeśli enkoder koła jest wystarczająco precyzyjny, aby sterować ruchem prostym, to nawet po dostrojeniu nie byłem w stanie uzyskać precyzji obrotu mniejszej niż +- 5 stopni, a to nie wystarczy.

Więc wypróbowałem 2 różne czujniki. Najpierw używam magnetometru (LSM303D). Zasada była prosta: przed obrotem uzyskaj orientację północną, oblicz cel i dostosuj ruch, aż cel zostanie osiągnięty. Było trochę lepiej niż z enkoderem, ale ze zbyt dużą dyspersją. Potem próbowałem użyć żyroskopu (L3GD20). Zasadą było po prostu zintegrowanie prędkości obrotowej dostarczanej przez czujnik w celu obliczenia obrotu. I działało dobrze. Byłem w stanie kontrolować rotację na poziomie +- 1 stopnia.

Niemniej jednak byłem ciekaw, żeby spróbować IMU. Wybieram komponent BNO055. Spędziłem trochę czasu, aby zrozumieć i przetestować ten IMU. Na koniec zdecydowałem się wybrać ten czujnik z następujących powodów

  • Mogę sterować rotacją tak samo jak z L3GD20
  • Mogę wykryć lekki obrót, gdy poruszam się prosto
  • Muszę uzyskać orientację północną dla lokalizacji robota, a kalibracja kompasu BNO055 jest bardzo prosta

Krok 2: Jak używać BNO055 do lokalizacji 2D?

Jak używać BNO055 do lokalizacji 2D?
Jak używać BNO055 do lokalizacji 2D?

BNO055 IMU to inteligentny czujnik Bosch 9-osiowy, który może zapewnić bezwzględną orientację.

Arkusz danych zawiera kompletną dokumentację. Jest to zaawansowany technologicznie komponent, jest to dość złożony produkt i spędziłem kilka godzin, aby dowiedzieć się, jak działa i wypróbować różne sposoby jego użycia.

Myślę, że warto podzielić się tym doświadczeniem.

Najpierw skorzystałem z biblioteki Adafruit, która zapewnia dobre narzędzie do kalibracji i odkrywania czujnika.

Na koniec i po wielu testach postanowiłem

  • używaj biblioteki Adafruit tylko do zapisywania kalibracji
  • użyj 3 ze wszystkich możliwych trybów BNO055 (NDOF, IMU, Compss)
  • poświęcić Arduino Nano do obliczania lokalizacji w oparciu o pomiary BNO055

Krok 3: Punkt sprzętowy Vue

Punkt sprzętowy Vue
Punkt sprzętowy Vue
Punkt sprzętowy Vue
Punkt sprzętowy Vue
Punkt sprzętowy Vue
Punkt sprzętowy Vue

BNO055 to składnik I2C. Więc potrzebuje zasilania, SDA i SCL do komunikacji.

Po prostu zadbaj o napięcie Vdd zgodnie z zakupionym produktem. Układ Bosch działa w zakresie: od 2,4 V do 3,6 V i można znaleźć komponent 3,3 V i 5 V.

Nie ma trudności z połączeniem Nano i BNO055.

  • BNO055 jest zasilany przez Nano
  • SDA i SCL są połączone za pomocą rezystorów 2 x 2k pull-up.
  • 3 diody LED podłączone do Nano do diagnostyki (z rezystorami)
  • 2 złącza używane do zdefiniowania trybu po uruchomieniu
  • 1 złącze w kierunku BNO (Gnd, Vdd, Sda, Scl, Int)
  • 1 złącze w kierunku Robota/Mega (+9V, Gnd, sda, Scl, Pin11, Pin12)

Trochę lutowania i to wszystko!

Krok 4: Jak to działa?

Jak to działa ?
Jak to działa ?

Z punktu komunikacyjnego vue:

  • Nano jest mistrzem magistrali I2C
  • Robot/Mega i BNO055 są niewolnikami I2C
  • Nano na stałe odczytuje rejestry BNO055
  • Robot/Mega podnosi sygnał numeryczny, aby zażądać słowa od Nano

Z punktu obliczeniowego vue: Nano w połączeniu z BNO055 zapewnia

  • Kurs kompasu (używany do lokalizacji)
  • Nagłówek względny (używany do sterowania rotacjami)
  • Bezwzględny kurs i pozycja (używane do kontrolowania ruchów)

Z funkcjonalnego punktu widzenia: Nano:

  • zarządza kalibracją BNO055
  • zarządza parametrami i poleceniami BNO055

Podsystem Nano i BNO055:

  • oblicz dla każdego koła robota bezwzględny kurs i lokalizację (ze współczynnikiem skali)
  • obliczyć kurs względny podczas obrotu robota

Krok 5: Architektura i oprogramowanie

Architektura i oprogramowanie
Architektura i oprogramowanie

Główne oprogramowanie działa na Arduino Nano

  • Architektura oparta jest na komunikacji I2C.
  • Zdecydowałem się poświęcić Nano ze względu na fakt, że Atmega, która obsługuje robota, była już załadowana, a ta architektura ułatwia ponowne użycie w innym miejscu.
  • Nano odczytuje rejestry BNO055, oblicza i przechowuje nagłówek oraz lokalizację we własnych rejestrach.
  • Arduino Atmega, który uruchamia kod robota, wysyła informacje o koderach kół do Nano i odczytuje nagłówki oraz lokalizację wewnątrz rejestrów Nano.

Kod podsystemu (Nano) jest dostępny tutaj na GitHub

Narzędzie do kalibracji Adafruit, jeśli tutaj na GitHub (kalibracja będzie przechowywana w eeproom)

Krok 6: Czego się nauczyłem?

Odnośnie I2C

Najpierw próbowałem mieć 2 mastery (Arduino) i 1 slave (czujnik) na tej samej szynie, ale na koniec możliwe i najłatwiejsze jest ustawienie tylko Nano jako mastera i użycie połączenia GPIO między 2 Arduino, aby „zażądać tokena”.

Odnośnie BNO055 dla orientacji 2D

Mogę skoncentrować się na 3 różnych trybach pracy: NDOF (połączenie żyroskopu, akcelerometru i kompasu), gdy robot jest bezczynny, IMU (połączenie żyroskopu, akcelerometru), gdy robot jest w ruchu oraz Kompas podczas fazy lokalizacji. Przełączanie między tymi trybami jest łatwe i szybkie.

Aby zmniejszyć rozmiar kodu i zachować możliwość użycia przerwania BNO055 do wykrywania kolizji, wolę nie używać biblioteki Adafruit i robić to sam.

Zalecana: