Spisu treści:

Robotyczna kontrola ręczna z EMG: 7 kroków
Robotyczna kontrola ręczna z EMG: 7 kroków

Wideo: Robotyczna kontrola ręczna z EMG: 7 kroków

Wideo: Robotyczna kontrola ręczna z EMG: 7 kroków
Wideo: Ramię robota 6osi sterowanie potencjometry, przenoszenie. arduino 2024, Lipiec
Anonim
Image
Image
Akwizycja sygnału
Akwizycja sygnału

Ten projekt pokazuje kontrolę robotycznej ręki (za pomocą opensource hand inMoov) za pomocą 3 opensource'owych urządzeń uECG używanych do pomiaru i przetwarzania aktywności mięśni (elektromiogram, EMG). Nasz zespół ma długą historię z rękami i ich kontrolą, a to dobry krok we właściwym kierunku:)

Kieszonkowe dzieci

3x urządzenia uECG1x Arduino (używam Nano, ale większość innych zadziała)1x moduł nRF24 (dowolny rodzajowy wystarczy)1x sterownik serwo PCA9685 lub podobny1x inMoov hand5x duże serwa (patrz instrukcje inMoov dla kompatybilnych typów)1x zasilacz 5V zdolny 5A lub więcej prądu

Krok 1: Akwizycja sygnału

Kontrola opiera się na EMG - elektrycznej aktywności mięśni. Sygnał EMG jest odbierany przez trzy urządzenia uECG (wiem, ma to być monitor EKG, ale ponieważ bazuje na generycznym ADC, może mierzyć dowolne biosygnały – w tym EMG). Do przetwarzania EMG uECG ma specjalny tryb, w którym wysyła dane z 32-binowego widma i średnią „okno mięśniowe” (średnie natężenie widmowe między 75 a 440 Hz). Obrazy widma wyglądają jak niebiesko-zielone wzory, które zmieniają się w czasie. Tutaj częstotliwość jest na osi pionowej (na każdym z 3 wykresów, niska częstotliwość na dole, wysoka na górze - od 0 do 488 Hz z krokami ~15 Hz), czas jest na poziomie (stare dane po lewej ogólnie tutaj wynosi około 10 sekund na ekranie). Intensywność kodowana jest kolorem: niebieski - niski, zielony - średni, żółty - wysoki, czerwony - jeszcze wyższy.

Krok 2: Uproszczony sygnał

Uproszczony sygnał
Uproszczony sygnał

Do niezawodnego rozpoznawania gestów wymagane jest odpowiednie przetwarzanie tych obrazów widmowych na komputerze. Ale do prostej aktywacji palców dłoni robota wystarczy użyć uśrednionej wartości na 3 kanałach - uECG wygodnie dostarcza ją w określonych bajtach pakietu, aby szkic Arduino mógł ją przeanalizować. Te wartości wyglądają na znacznie prostsze - załączyłem wykres surowych wartości z plotera szeregowego Arduino. Czerwone, zielone, niebieskie wykresy to surowe wartości z 3 urządzeń uECG na różnych grupach mięśniowych, gdy odpowiednio ściskam kciuk, palec serdeczny i środkowy. Dla naszego oka te przypadki są wyraźnie różne, ale musimy zmienić te wartości w "wynik palca", aby program mógł wyprowadzać wartości do serw ręcznych. Problem w tym, że sygnały z grup mięśni są „mieszane”: w pierwszym i trzecim przypadku intensywność sygnału niebieskiego jest mniej więcej taka sama, natomiast czerwony i zielony różnią się. W drugim i trzecim przypadku sygnały zielone są takie same, natomiast niebieski i czerwony różnią się.

Krok 3: Przetwarzanie sygnału

Przetwarzanie sygnałów
Przetwarzanie sygnałów

Aby „rozmieszać” te sygnały, użyłem stosunkowo prostej formuły:

S0=V0^2 / ((V1 *a0 +b0)(V2 * c0+d0)), gdzie S0 - wynik dla kanału 0, V0, V1, V2 - wartości surowe dla kanałów 0, 1, 2 i a, b, c, d - współczynniki, które dostosowałem ręcznie (a i c wynosiły od 0,3 do 2,0, b i d to 15 i 20, i tak musiałbyś je zmienić, aby dostosować się do konkretnego położenia czujnika). Ten sam wynik został obliczony dla kanałów 1 i 2. Po tym wykresy stały się niemal idealnie rozdzielone. Dla tych samych gestów (tym razem palec serdeczny, środkowy, a następnie kciuk) sygnały są wyraźne i można je łatwo przełożyć na ruchy serwa, po prostu porównując z progiem

Krok 4: Schematy

Schematy
Schematy

Schemat jest dość prosty, wystarczy tylko moduł nRF24, sterownik PCA9685 lub podobny I2C PWM oraz zasilacz 5V o dużej mocy, który wystarczyłby do jednoczesnego przeniesienia wszystkich tych serw (a więc wymaga co najmniej 5A mocy znamionowej do stabilnej pracy).

Lista połączeń: nRF24 pin 1 (GND) - Arduino GNDnRF24 pin 2 (Vcc) - Arduino 3.3vnRF24 pin 3 (Chip Enable) - Arduino D9nRF24 pin 4 (SPI:CS) - Arduino D8nRF24 pin 5 (SPI:SCK) - Arduino D13nRF24 pin 6 (SPI:MOSI) - Arduino D11nRF24 pin 7 (SPI:MISO) - Arduino D12PCA9685 SDA - Arduino A4PCA9685 SCL - Arduino A5PCA9685 Vcc - Arduino 5vPCA9685 GND - wzmacniacz GND + GNDCA VNDCA High Vcc PCA kanały 0-4, w mojej notacji kciuk - kanał 0, palec wskazujący - kanał 1 itd.

Krok 5: Umieszczenie czujników EMG

Rozmieszczenie czujników EMG
Rozmieszczenie czujników EMG
Rozmieszczenie czujników EMG
Rozmieszczenie czujników EMG

Aby uzyskać rozsądne odczyty, ważne jest umieszczenie w odpowiednich miejscach urządzeń uEKG, które rejestrują aktywność mięśni. Chociaż możliwe jest tutaj wiele różnych opcji, każda z nich wymaga innego podejścia do przetwarzania sygnału - więc przy moim kodzie najlepiej jest użyć rozmieszczenia podobnego do moich zdjęć. Może to być sprzeczne z intuicją, ale sygnał mięśni kciuka jest lepiej widoczny po przeciwnej stronie ramienia, a więc jeden z czujników jest tam umieszczony, a wszystkie są blisko łokcia (mięśnie mają większość ciała w tym obszarze, ale chcesz sprawdzić, gdzie dokładnie znajdują się twoje - jest dość duża różnica indywidualna)

Krok 6: Kod

Przed uruchomieniem programu głównego będziesz musiał znaleźć identyfikatory poszczególnych urządzeń uECG (odkomentowanie linii 101 i włączanie urządzeń jeden po drugim, zobaczysz między innymi identyfikator bieżącego urządzenia) i wypełnić je tablica identyfikatorów_jednostek (wiersz 37). Poza tym chcesz pobawić się współczynnikami formuł (linie 129-131) i sprawdzić, jak to wygląda na seryjnym ploterze przed przymocowaniem go do dłoni robota.

Krok 7: Wyniki

Przy niektórych eksperymentach, które trwały około 2 godzin, udało mi się uzyskać całkiem niezawodną pracę (film pokazuje typowy przypadek). Zachowuje się nie idealnie i dzięki temu przetwarzaniu rozpoznaje tylko otwarte i zamknięte palce (a nawet nie każdą z 5, wykrywa tylko 3 grupy mięśni: kciuk, wskazujący i środkowy razem, serdeczny i mały palec razem). Ale „AI”, które analizuje sygnał, zajmuje tutaj 3 linijki kodu i używa jednej wartości z każdego kanału. Uważam, że można zrobić o wiele więcej, analizując 32-binowe obrazy spektralne na komputerze lub smartfonie. Ponadto ta wersja wykorzystuje tylko 3 urządzenia uECG (kanały EMG). Przy większej liczbie kanałów powinno być możliwe rozpoznawanie naprawdę skomplikowanych wzorców - ale cóż, o to właśnie chodzi w projekcie, aby dać punkt wyjścia dla wszystkich zainteresowanych:) Sterowanie ręczne nie jest z pewnością jedyną aplikacją dla takiego systemu.

Zalecana: