Magiczna różdżka AI z TensorFlow Lite dla mikrokontrolerów i Arduino

1. Wprowadzenie

Co utworzysz

W tym ćwiczeniu nauczymy się używać TensorFlow Lite For Microcontrollers do uruchamiania modelu deep learning na Arduino Nano 33 BLE. Mikrokontroler zamienia się w cyfrową „magiczną różdżkę”, którą użytkownik może machać i rzucać różne zaklęcia. Gdy użytkownik porusza różdżką, te złożone, wielowymiarowe dane z czujnika, które byłyby niezrozumiałe dla człowieka, są przekazywane jako dane wejściowe do modelu. Model zwraca prostą klasyfikację, która informuje nas, czy nastąpił jeden z kilku ruchów.

9208eb1207211349.gif

Uczenie maszynowe na mikrokontrolerach

Systemy uczące się mogą być wykorzystywane do tworzenia inteligentnych narzędzi, które ułatwiają użytkownikom życie, takich jak Asystent Google. Często jednak wymagają one dużej mocy obliczeniowej lub zasobów, takich jak wydajny serwer w chmurze lub komputer stacjonarny. Obecnie jednak wnioskowanie uczenia maszynowego można przeprowadzać na małych urządzeniach o niskim poborze mocy, takich jak mikrokontrolery.

Mikrokontrolery są bardzo popularne, tanie, wymagają bardzo mało energii i są bardzo niezawodne. Są one częścią różnego rodzaju urządzeń domowych, takich jak sprzęt AGD, samochody i zabawki. Każdego roku produkuje się około 30 miliardów urządzeń z mikrokontrolerami.

1914a419dfacf0b5.jpeg

Dzięki zastosowaniu uczenia maszynowego w przypadku małych mikrokontrolerów możemy zwiększyć inteligencję miliardów urządzeń, których używamy w życiu codziennym, bez konieczności korzystania z drogiego sprzętu czy niezawodnych połączeń internetowych. Wyobraź sobie inteligentne urządzenia, które dostosowują się do Twojej codziennej rutyny, inteligentne czujniki przemysłowe, które odróżniają problemy od normalnej pracy, oraz magiczne zabawki, które pomagają dzieciom uczyć się w zabawny i przyjemny sposób.

TensorFlow Lite For Microcontrollers (oprogramowanie)

864114d0c2b4c919.png

TensorFlow to platforma uczenia maszynowego typu open source od Google, która służy do trenowania i uruchamiania modeli. TensorFlow Lite to platforma oprogramowania, zoptymalizowana wersja TensorFlow, przeznaczona do uruchamiania modeli TensorFlow na małych, stosunkowo słabych urządzeniach, takich jak telefony komórkowe.

TensorFlow Lite For Microcontrollers to platforma oprogramowania, zoptymalizowana wersja TensorFlow, która umożliwia uruchamianie modeli TensorFlow na małych, energooszczędnych urządzeniach, takich jak mikrokontrolery. Spełnia ona wymagania dotyczące tych środowisk wbudowanych, tzn.ma mały rozmiar binarny, nie wymaga obsługi systemu operacyjnego, żadnych standardowych bibliotek C ani C++ ani dynamicznej alokacji pamięci itp.

Arduino Nano 33 BLE (sprzęt)

bcd452d4d660efa9.jpeg

Arduino to popularna platforma open source używana do tworzenia projektów elektronicznych. Składa się z:

  1. Fizyczna programowalna płytka obwodu (często mikrokontroler), np. Arduino Nano 33 BLE używana w tym ćwiczeniu.
  2. Środowisko programistyczne Arduino (IDE), czyli oprogramowanie służące do pisania i przesyłania kodu komputerowego na płytkę.

Arduino Nano 33 BLE to platforma oparta na mikrokontrolerze, czyli mały komputer na jednej płytce drukowanej. Ma procesor, pamięć i sprzęt wejścia/wyjścia, który umożliwia wysyłanie i odbieranie sygnałów cyfrowych do innych urządzeń. W przeciwieństwie do komputera mikrokontroler nie jest wydajny i zwykle nie ma systemu operacyjnego. Zamiast tego mają małe procesory i niewiele pamięci, a napisane przez Ciebie programy działają bezpośrednio na sprzęcie. Ponieważ są one zaprojektowane tak, aby były jak najprostsze, mikrokontroler może zużywać bardzo mało energii.

Co musisz zrobić

  • Skonfiguruj mikrokontroler Arduino Nano 33 BLE i przekształć go w cyfrową „magiczną różdżkę”.
  • Skonfiguruj Arduino IDE i zainstaluj wymagane biblioteki.
  • Wdrażanie programu na urządzeniu
  • Rzucaj różne zaklęcia, machając magiczną różdżką, i sprawdzaj przewidywania.

Czego potrzebujesz

  • laptop z systemem Linux, macOS lub Windows;
  • Arduino Nano BLE Sense 33 (bez złączy)
  • Kabel micro USB (jeśli masz laptopa z portem USB-C, zamiast tego kup kabel USB-C na micro USB).
  • (opcjonalnie) patyk o długości około 30 cm,
  • (opcjonalnie) taśma klejąca,

2. Konfigurowanie mikrokontrolera Arduino

Rozpakuj Arduino

Wyjmij go z pudełka i wyciągnij z pianki. Jest przewodzący i może powodować problemy.

6ed84a651c871a58.jpeg

Podłącz go do laptopa

  • Podłącz kabel micro USB do gniazda na chipie.
  • Drugi koniec kabla podłącz do gniazda USB na laptopie.
  • Dioda LED w lewym dolnym rogu Arduino (w lewym górnym rogu na poniższym obrazie) powinna się zaświecić.

c6936696f9659104.jpeg

Zapoznaj się z przepływem pracy

99852afbed7e78b0.png

Jak widać na powyższym diagramie, interpreter TFLite na Arduino okresowo uruchamia wnioskowanie na podstawie modelu. Model wykorzystuje przetworzone dane z akcelerometru jako dane wejściowe i zwraca prognozę, która wskazuje najbardziej prawdopodobny gest. Następnie drukowany jest pożądany wynik i zapala się odpowiednia dioda LED.

3. Konfigurowanie Arduino IDE

1. Pobierz Arduino IDE

Aby wdrożyć program na mikrokontrolerze Arduino, używamy środowiska Arduino IDE.

Po pobraniu zainstaluj i otwórz Arduino IDE, klikając aplikację, której ikona wygląda tak: 75717f13527f36b9.png

Początkowa strona docelowa otworzy się w ten sposób:

933c91e6e1997c61.png

2. Konfigurowanie Menedżera tablic

  1. W menu Arduino wybierz Tools -> Board: "Arduino .." —> Boards Manager.
  2. Wyszukaj "Arduino Nano 33 BLE" i zainstaluj Arduino nRF528x Boards (Mbed OS). Dzięki temu nasz mikrokontroler Arduino Nano 33 BLE będzie obsługiwany przez Arduino IDE. 817c63346152eda9.png
  1. W menu Arduino wybierz Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE".

9357691e1a1348eb.png

  1. Na koniec sprawdź, czy w prawym dolnym rogu środowiska IDE wybrano płytkę „Arduino Nano 33 BLE”.

aa08706bb84fa9b2.png

3. Skonfiguruj Port

W menu Arduino wybierz Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE). Powinien pojawić się ekran podobny do tego:

8c25990d0c6fb6f8.png

4. Sprawdź połączenie z tablicą

W menu Arduino wybierz Tools -> Get Board Info. Powinien pojawić się ekran podobny do tego:

ccd8f5305be6cf59.png

4. Instalowanie bibliotek

1. Biblioteka TensorFlow Arduino

Ta biblioteka zawiera wszystkie przykłady TensorFlow Lite dla mikrokontrolerów, w tym kod źródłowy magicznej różdżki wymagany w tym ćwiczeniu.

  1. W menu Arduino wybierz Sketch -> Include Library -> Add .ZIP Library....
  2. Dodaj pobraną bibliotekę TensorFlow Arduino Library .zip.

2. LSM9DS1 Arduino Library

Ta biblioteka umożliwia odczytywanie wartości akcelerometru, magnetometru i żyroskopu z jednostki IMU LSM9DS1 na płytce Arduino Nano 33 BLE Sense.

  1. W menu Arduino wybierz Sketch -> Include -> Manage Libraries....
  2. Wyszukaj i zainstaluj "Arduino_LSM9DS1". ac2f78a737c5f233.png

5. Wczytywanie i kompilowanie przykładu

1. Wczytaj przykład

W menu Arduino wybierz File -> Examples -> Arduino_TensorFlowLite -> magic_wand, aby wczytać przykładowy kod.

de349f2d3cb49b98.png

Spowoduje to wczytanie kodu źródłowego magicznej różdżki.

cda8c35a597b0798.png

2. Tworzenie przykładu

W oknie szkicu kliknij przycisk Upload.

71cb1474d5e14669.png

Po kilku minutach powinien pojawić się czerwony tekst informujący o zakończeniu flashowania. Podczas przesyłania prawa dioda LED powinna pulsować, a po zakończeniu przesyłania zgasnąć.

3df1d0858c6e40a4.png

6. Prezentacja

Magiczna różdżka może obecnie wykrywać 3 gesty, jak pokazano poniżej: 99a607da66af9fc8.png

  1. Skrzydło: zacznij od lewego górnego rogu i przez 2 sekundy rysuj literę „W”.
  2. Okrąg: zacznij w pozycji wyprostowanej i przez sekundę wykonuj różdżką okrężne ruchy zgodnie z ruchem wskazówek zegara.
  3. Pochylenie: zacznij od trzymania urządzenia skierowanego do góry, z diodami LED skierowanymi w Twoją stronę. Przesuń różdżkę w dół pod kątem w lewo, a następnie poziomo w prawo przez sekundę.

Ilustracja poniżej przedstawia 2 gesty. Najpierw Slope, a potem Wing (użyj tego jako punktu odniesienia w demonstracji).

9208eb1207211349.gif

Aby uruchomić wersję demonstracyjną, wykonaj te czynności:

  1. Po podłączeniu USB wybierz Tools -> Serial Monitor w menu Arduino. Początkowo otworzy się pusty ekran bez żadnych danych wyjściowych.

38e8d53652eb28f2.png

  1. Przesuń mikrokontroler Arduino, aby dokładnie odtworzyć każdy z powyższych kształtów, i sprawdź, czy monitor szeregowy wykrywa gest.

60b8a0017bcae419.png

  1. Z danych wyjściowych w monitorze szeregowym widać, że magiczna różdżka wykryła wszystkie kształty. Zauważysz też, że prawa dioda LED się zaświeci.

7. Następne kroki

Gratulacje! Udało Ci się zbudować pierwszą „magiczną różdżkę” rozpoznającą gesty na mikrokontrolerze Arduino.

Mamy nadzieję, że to krótkie wprowadzenie do programowania z użyciem TensorFlow Lite dla mikrokontrolerów było dla Ciebie przydatne. Koncepcja deep learningu na mikrokontrolerach jest nowa i ekscytująca, dlatego zachęcamy do eksperymentowania.

Dokumentacja

647c3ef0dc103804.png

Dziękujemy i życzymy udanego budowania!