
Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-23 15:02

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 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?

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



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?

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

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:
Jak poddać recyklingowi telefony z Androidem do BOINC lub składanego zestawu bez użycia baterii: 8 kroków

Jak oddać telefony z systemem Android do recyklingu do BOINC lub składanego zestawu bez użycia baterii: OSTRZEŻENIE: W ŻADNYM WYPADKU NIE ODPOWIADAM ZA USZKODZENIA SPRZĘTU WYKONANE PRZEZ NINIEJSZY PRZEWODNIK. Ten przewodnik jest bardziej skuteczny dla użytkowników BOINC (osobisty wybór/powody), może być również używany do SKŁADANIA Ponieważ nie mam zbyt dużo czasu, będę
Kartonowa maszyna Gumball bez użycia rąk: 18 kroków (ze zdjęciami)

Bezdotykowa maszyna Gumball Cardboard: Stworzyliśmy bezdotykową maszynę Gumball przy użyciu micro:bit, płytki bitowej Crazy Circuits, czujnika odległości, serwa i kartonu. Stworzenie go i korzystanie z niego było „BLAST”! ? ? Kiedy umieścisz rękę w podstawie rakiety, czujnik odległości
Sterowanie oświetleniem w pomieszczeniu bez użycia rąk: 10 kroków

Sterowanie oświetleniem w pomieszczeniu bez użycia rąk: jak w filmie „Mission Impossible” mówi „ Desperackie czasy wymagają desperackich środków " mój brat, który jest w klasie 10, wpadł na pomysł, aby sterować oświetleniem w kuchni za pomocą telefonu zamiast za pomocą przełączników i powód
Łatwy sposób użycia Makey Makey z Tech Deckiem: 5 kroków

Prosty sposób na wykorzystanie Makey Makey z Tech Deckiem: Cześć. Niedawno widziałem w tym konkursie program makey z talii technicznej, który był naprawdę fajny, ale wydawał się trudny, więc stworzyłem łatwy sposób na granie w gry z talią techniczną. Jeśli podoba Ci się mój instruktaż, zagłosuj na niego w konkursie Makey Makey
HC - 06 (Moduł Slave) Zmiana "NAZWY" bez użycia "Monitor szeregowy Arduino" który "działa łatwo": bezbłędny sposób!: 3 kroki

HC - 06 (Moduł Slave) Zmiana "NAZWY" bez użycia "Monitor szeregowy Arduino"… który "Działa łatwo": Bezbłędny sposób!: Po " Długi czas " próba zmiany nazwy na HC - 06 (moduł podrzędny), używając " szeregowy monitor Arduino, bez " Sukces ", znalazłem inny łatwy sposób i udostępniam teraz ! Miłej zabawy kumple