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

1. Wprowadzenie

Co utworzysz

W ramach tego ćwiczenia w programie nauczymy się, jak używać TensorFlow Lite dla mikrokontrolerów do uruchomienia modelu deep learning w architekturze Arduino Nano 33 BLE. Mikrokontroler zmienia się w cyfrową „magiczną różdżkę” machać i rzucać różne zaklęcia. Gdy użytkownik porusza batutą, te złożone, wielowymiarowe dane z czujników, których człowiek nie dałoby się ocenić, są przekazywane do modelu jako dane wejściowe. Na tej podstawie powstaje prosta klasyfikacja informująca o wystąpieniu jednego z kilku ruchów.

9208eb1207211349.gif

Systemy uczące się na mikrokontrolerach

Uczenie maszynowe można wykorzystać do tworzenia inteligentnych narzędzi, tak jak Asystent Google. Często jednak wymagają one dużych nakładów obliczeniowych lub zasobów, którymi może być potężny serwer w chmurze lub komputer. Jednak obecnie możliwe jest wnioskowanie przez systemy uczące się na małych urządzeniach o niskiej mocy, np. mikrokontrolerach.

Mikrokontrolery są niezwykle powszechne, tanie, bardzo niezawodne i wymagają niewiele energii. Są częścią wszelkiego rodzaju urządzeń domowych: urządzeń, samochodów i zabaw. Każdego roku produkowane jest około 30 miliardów urządzeń zasilanych z mikrokontrolerów.

1914a419dfacf0b5.jpeg

Dzięki wprowadzeniu systemów uczących się w małych mikrokontrolerach możemy zwiększyć inteligencję miliardów urządzeń, których używamy w życiu, bez konieczności korzystania z drogiego sprzętu czy niezawodnego połączenia z internetem. Wyobraź sobie inteligentne urządzenia, które dostosowują się do codziennych czynności, inteligentne czujniki przemysłowe, które rozumieją różnice między problemami a normalnym działaniem, oraz magiczne zabawki, które pomagają dzieciom podczas nauki przez zabawny i przyjemny sposób.

TensorFlow Lite do mikrokontrolerów (oprogramowanie)

864114d0c2b4c919.png

TensorFlow to opracowana przez Google platforma systemów uczących się typu open source do trenowania i uruchamiania modeli. TensorFlow Lite to platforma oprogramowania, zoptymalizowana wersja TensorFlow, przeznaczona do uruchamiania modeli Tensorflow na małych urządzeniach o słabej wydajności, takich jak telefony komórkowe.

TensorFlow Lite For Microcontrollers to platforma oprogramowania, zoptymalizowana wersja TensorFlow, przeznaczona do uruchamiania modeli Tensorflow na niewielkich urządzeniach o niskim poborze energii, takich jak mikrokontrolery. Jest ona zgodna z ograniczeniami wymaganymi w tych osadzonych środowiskach – ma mały rozmiar pliku binarnego, nie wymaga obsługi systemu operacyjnego, żadnych standardowych bibliotek C lub C++, dynamicznego przydzielania pamięci itp.

Arduino Nano 33 BLE (sprzęt)

bcd452d4d660efa9.jpeg

Arduino to popularna platforma open source wykorzystywana do tworzenia projektów elektronicznych. Oto elementy składowe:

  1. W tym ćwiczeniu z programowania została użyta fizyczna programowalna płytka obwodu (często mikrokontroler), np. Arduino Nano 33 BLE.
  2. Arduino IDE (Zintegrowane środowisko programistyczne) służące do pisania i przesyłania kodu komputerowego na płytkę fizyczną.

Arduino Nano 33 BLE to platforma oparta na mikrokontrolerach – niewielkim komputerze na płycie obwodu drukowanego. Ma procesor, pamięć i sprzęt I/O, które pozwalają wysyłać sygnały cyfrowe do innych urządzeń i je odbierać. W przeciwieństwie do komputera mikrokontroler nie jest wydajny i zwykle nie obsługuje systemu operacyjnego. Zamiast tego mają małe procesory, mało pamięci i napisane przez Ciebie programy są uruchamiane bezpośrednio na sprzęcie. Zaprojektowano je tak, aby były jak najprostsze, dlatego mikrokontroler może zużywać bardzo mało energii.

Co trzeba zrobić

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

Czego potrzebujesz

  • Laptop z systemem Linux, macOS lub Windows
  • Arduino Nano BLE Sense 33 (bez nagłówków)
  • Kabel Micro USB (jeśli używasz laptopa ze złączem USB-C, użyj kabla USB-C na micro USB).
  • (opcjonalnie) Pałeczka samoprzylepna o długości 30 cm.
  • (opcjonalnie) Taśma samoprzylepna

2. Konfigurowanie mikrokontrolera Arduino

Rozpakuj Arduino

Wyjmij go z pudełka i wyjmij z pianki. Przewodzi prąd i w innym przypadku może powodować problemy.

6ed84a651c871a58.jpeg

Podłącz go do laptopa

  • Podłącz kabel micro USB do gniazda w układzie czipu.
  • Podłącz drugi koniec do gniazda USB w laptopie.
  • Lewa dolna dioda LED na platformie Arduino (na lewym górnym rogu na ilustracji poniżej) powinna się świecić.

c6936696f9659104.jpeg

Zapoznaj się z procesem pracy

99852afbed7e78b0.png

Jak widać na powyższym schemacie, interpreter TFLite na platformie Arduino okresowo uruchamia wnioskowanie na podstawie modelu. Jako dane wejściowe model wykorzystuje przetworzone dane z akcelerometru i generuje prognozę, która sugeruje gest, który najprawdopodobniej wystąpił. Następnie wymagane jest wydrukowanie odpowiedniego wyjścia i zapalenie się odpowiednich diod LED.

3. Konfigurowanie Arduino IDE

1. Pobierz Arduino IDE

Do wdrożenia programu w mikrokontrolerze Arduino korzystamy ze środowiska Arduino IDE.

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

Początkowa strona docelowa otworzy się w następujący sposób:

933c91e6e1997c61.png

2. Skonfiguruj menedżera zarządu

  1. W menu Arduino wybierz Tools -> Board: "Arduino .." —> Boards Manager
  2. Wyszukaj hasło "Arduino Nano 33 BLE" i zainstaluj: Arduino nRF528x Boards (Mbed OS). Dzięki temu Twój 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 wybrana płyta to „Arduino Nano 33 BLE” w prawym dolnym rogu IDE.

aa08706bb84fa9b2.png

3. Skonfiguruj port

W menu Arduino wybierz Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE). Zobaczysz tekst podobny do tego:

8c25990d0c6fb6f8.png

4. Sprawdź połączenie płytki

W menu Arduino wybierz Tools -> Get Board Info. Zobaczysz tekst podobny do tego:

ccd8f5305be6cf59.png

4. Zainstaluj biblioteki

1. Biblioteka TensorFlow Arduino

Ta biblioteka zawiera wszystkie przykłady użycia TensorFlow Lite dla mikrokontrolerów, w tym kod źródłowy magicznej różdżki wymagany do tego ćwiczenia z programowania.

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

2. Biblioteka Arduino LSM9DS1

Ta biblioteka umożliwia odczytywanie wartości z akcelerometru, magnetometru i żyroskopu z modułu LSM9DS1 IMU na urządzeniu 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. Utwórz przykład

Kliknij przycisk Upload w oknie szkicu.

71cb1474d5e14669.png

Po kilku minutach powinien pojawić się czerwony tekst informujący o zakończeniu migania. Podczas przesyłania dioda LED powinna migać, a na końcu zgasnąć.

3df1d0858c6e40a4.png

6. Wersja demonstracyjna

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

  1. Skrzydło: zacznij od lewego górnego rogu i dokładnie odrysuj literę „W”. na dwie sekundy.
  2. Pierścień: uruchom pionowo różdżkę i poruszaj nią po okręgu przez 1 sekundę.
  3. Nachylenie: zacznij od trzymania różdżki w górę i skieruj diody LED do siebie. Przesuń batutę w dół pochyłości w lewo, a potem w poziomie w prawo przez 1 sekundę.

Ilustracja poniżej przedstawia 2 gesty. Najpierw skoś, a następnie skrzydło (użyj tego jako punktu odniesienia w prezentacji).

9208eb1207211349.gif

Aby uruchomić wersję demonstracyjną, postępuj zgodnie z poniższymi instrukcjami:

  1. Po podłączeniu USB wybierz Tools -> Serial Monitor z menu Arduino. Początkowo wyświetla się pusty ekran, bez którego nie ma danych wyjściowych.

38e8d53652eb28f2.png

  1. Przesuwaj mikrokontroler Arduino, aby dokładnie śledzić każdy z tych kształtów, i sprawdź, czy monitor szeregowy wykrywa gest.

60b8a0017bcae419.png

  1. Na podstawie danych wyjściowych na monitorze szeregowym można zauważyć, że magiczna różdżka rzeczywiście wykryła wszystkie kształty. Zaświeci się też dioda LED z prawej strony.

7. Dalsze kroki

Gratulacje. Udało Ci się utworzyć pierwszą gest rozpoznający „magiczną różdżkę” na mikrokontrolerze Arduino.

Mamy nadzieję, że podobało Ci się to krótkie wprowadzenie do programowania z użyciem TensorFlow Lite dla mikrokontrolerów. Idea deep learning na mikrokontrolerach jest nowa i ekscytująca, dlatego zachęcamy do eksperymentowania.

Dokumentacja

647c3ef0dc103804.png

Dziękujemy i życzymy udanej zabawy podczas budowania!