Mikrokontroler / procesor do szybkiej trygonometrii w robocie?


15

Dotyczy to sprzętu, który waży niewiele, ponieważ robot chodzący (gruby kot, 6 nóg z 3 DOF) powinien go nosić ze sobą. Z powodu tego chodzenia będzie musiał wykonać wiele trygonometrii (używając matematyki macierzy lub nie, nie jestem jeszcze pewien) i stąd pochodzi to pytanie.

PIC, Arduino lub tani AVR nie są wystarczająco szybkie, aby obliczyć wszystko 100 / sekundę i mieć na uwadze takie rzeczy, jak bezwładność i unikanie przeszkód, a nawet ścieżki / chody brutalnej siły.

  • Plan A polega na przeniesieniu mózgu na robota. Czy to mikroprocesor, micro ITX, nettop czy inny; jaki jest wydajny sprzęt do szybkiego wykonywania trygonometrii / matematyki macierzy?

    Szukałem online i spodziewałem się dowiedzieć o specjalistycznych mikrokontrolerach AVR, x86 lub ARM, ale nie mam szczęścia.

  • Plan B polega na podłączeniu maszyny x86 za pośrednictwem Wi-Fi do wykonywania ciężkich zadań. Świetne również do prototypowania, ale chciałbym, aby to zmigrować, aby ostatecznie plan A, gdy sprzęt zminiaturyzuje się. Ale nawet wtedy, jaki procesor pulpitu może najszybciej przeprowadzić trygonometrię?

  • Plan C polega na rozłożeniu obciążenia i posiadaniu jednego energooszczędnego mikrokontrolera / rdzenia na każdą nogę, chociaż nie jest to najlepsze rozwiązanie z wielu powodów lubię jego rozszerzalność.

Nie zdecydowałem się jeszcze na język i / lub bibliotekę, ale wolę Pascal i C ++.

(mile widziane sugestie dotyczące bardziej odpowiednich tagów, jestem tutaj nowy)


11
matematyka zmiennoprzecinkowa nie jest koniecznością. Zawsze możesz budować tabele sinusoidalne (lub dowolne inne funkcje), umieszczać je we flashu AVR i interpolować wartości za pomocą obliczeń o stałym punkcie. To może być wystarczająco szybkie dla twoich potrzeb.
Christoph

3
Zamiast tracić ciężką matematykę w czasie rzeczywistym, powszechnym rozwiązaniem jest wstępne obliczenie tabel wartości, a następnie poszukiwanie odpowiedzi. Pomysł rozdzielenia pracy między wiele procesorów jest również dobry, na przykład jeden potężny główny procesor, a następnie jeden procesor na nogę.
John U

2
Możesz również rozważyć zadawanie tego rodzaju pytań na stronie Robotics Stackexchange .
Magnes rakietowy

1
Plan B wykona obliczenia dość szybko, ale komunikacja przez WiFi najprawdopodobniej zabije wzrost wydajności. Czy rozważałeś użycie telefonu z Androidem podłączonego przez USB? To o wiele większa moc obliczeniowa bez opóźnienia Wi
Stefan

1
Płyta STM32F4 z urządzeniem zmiennoprzecinkowym wydaje się być wystarczająca do zastosowania. Ma 128k SRAM z 64k CCM. Może pracować z częstotliwością 168 MHz. 32-bitowe mnożenie zmiennoprzecinkowe zajmuje tylko 1 cykl procesora.
richieqianle

Odpowiedzi:


16

Nie brzmi to tak, jakby Twoja aplikacja wymagała tak dużej mocy obliczeniowej. Na przykład dsPIC może wykonać instrukcję 400 k dla każdej z twoich iteracji. To dużo. Przydatne będzie jednak posiadanie dobrych możliwości we / wy niskiego poziomu, generatorów PWM, timerów i tym podobnych.

Sinus i cosinus nie są tak trudne do zrobienia w maszynie do liczb całkowitych, jak dsPIC. Zrobiłem to sam kilka razy. Sztuką jest wybranie odpowiedniej reprezentacji kątów. Radiany mogą być ładne z teoretycznego punktu widzenia, ale są niewygodne obliczeniowo. Degresja jest sztuczna i po prostu głupia. Użyj pełnego zakresu dowolnej liczby całkowitej maszyny, aby reprezentować jeden pełny obrót. Na przykład na dsPIC, który jest 16-bitowym procesorem, liczy się jeden pełny obrót, który wynosi 65536, co oznacza znacznie większą dokładność i rozdzielczość niż potrzeba do sterowania robotem lub którą można zmierzyć i tak.

Jedną z zalet tej reprezentacji jest to, że całe zawijanie odbywa się automatycznie tylko ze względu na sposób, w jaki liczba całkowita bez znaku dodaje i odejmuje. Inną znaczącą zaletą jest to, że ta reprezentacja nadaje się szczególnie dobrze do używania tabel odnośników dla sinusa i cosinusa. Musisz tylko zapisać 1/4 cyklu. Dwa górne bity kąta mówią ci, w której ćwiartce się znajdujesz, co mówi ci, czy indeksować do tabeli do przodu, czy do tyłu i czy negować wynik, czy nie. Następne N niższych bitów służy do indeksowania tabeli, przy czym tabela ma 2 N segmentów (2 N +1 punktów). Zauważ, że indeksowanie do tabeli od tyłu uzupełnia bity indeksu tabeli.

Możesz dać tabeli wystarczającą liczbę punktów, aby wybranie najbliższej odpowiedzi było wystarczające. Na przykład, jeśli tabela ma 1024 segmenty, wówczas sinus i cosinus zostaną obliczone z dokładnością do 1/4096 okręgu. To wystarczy do kontrolowania robota. Jeśli chcesz uzyskać większą dokładność, możesz powiększyć tabelę lub użyć pozostałych niższych bitów kąta do liniowej interpolacji między sąsiednimi wpisami tabeli.

W każdym razie chodzi o to, że twoje wymagania dotyczące tego procesora nie są zgodne z podanym problemem. Prawdopodobnie użyłbym dsPIC33F. Jest z pewnością niewielki, lekki i znacznie bardziej energooszczędny niż w pełni funkcjonalny proces obliczeniowy ogólnego przeznaczenia, taki jak x86 na komputerze jednopłytkowym.


Zawsze miałem wrażenie, że PIC ma spowolnić nawet dla odwrotnej kinematyki, ale być może będę musiał ponownie rozważyć. Czy można wykonać odwrotną kinematykę dla 6 nóg 3DOF co najmniej 100 / sekundę? To odwrotna kinematyka 6x3x100 tylko po to, aby uzyskać ruchy nóg na żywo. W każdym razie potrzebuję odwrotnej kinematyki na tej samej platformie, na której działa algorytm, aby nie musiałem ponownie implementować tych części dwa razy. Algorytm byłby bardziej wymagający i na pewno nie byłby w stanie działać na płycie PIC lub Arduino-isch.
Barry Staes

9

Będziesz miał do czynienia z wieloma sygnałami wejściowymi. Nie potrzebujesz procesora o wysokiej przepustowości; wiele sygnałów może być przetwarzanych równolegle. Jest to typowe terytorium DSP. Oczywiście chcesz także ogólnej funkcjonalności procesora. To nie jest problem. Istnieje wiele procesorów ze zintegrowanymi procesorami DSP.

Typowym układem do takich zastosowań jest Cortex-M4. Jest wyposażony w zintegrowany procesor DSP, a wersje -M4F mają również FPU. Może to nie być konieczne, trygonometrię można łatwo wykonać w matematyce stałoprzecinkowej.


Czy matematyka macierzy miałaby przewagę na Cortex-M4F? (na wypadek, gdybym się tam wybrał, prototypowanie)
Barry Staes

3
Po prostu trochę pedantyczny - rdzeń procesora Cortex-M4 nie ma zintegrowanego procesora DSP, ale ma stopień możliwości DSP wbudowany w główny rdzeń procesora. Rozszerzenia DSP to dodawanie instrukcji mnożenia / akumulacji, które ułatwiają typowe funkcje DSP, takie jak filtrowanie i transformacje.
uɐɪ

6

Kilka uwag:

  1. Nie musisz przetwarzać operacji trygonometrii na tym samym CPU, który wykonuje unikanie przeszkód. Możesz podzielić zadania między dwa mikrokontrolery i użyć protokołu komunikacyjnego, aby je porozmawiać.

  2. Do eksperymentu zaimplementowałem algorytm AHRS z filtrem Kalmana w mikrokontrolerze ARM Cortex M0 (był to STM32, nie pamiętam dokładnie reszty, ale myślę, że był to 32 MHz) i używając matematyki stałoprzecinkowej mogłem uruchomić przy około 40 próbkach na sekundę. Dzięki szybszemu kontrolerowi powinieneś być w stanie z łatwością go przenosić i oczywiście możesz wypróbować FPGA lub DSP.

  3. Powiedziałbym, że kontrola nóg nie wymaga dużego obciążenia procesora i można kontrolować wszystkie nogi razem, być może niezależnie od trygonometrii i operacji omijania przeszkód (patrz 1)


Serwa są kontrolowane szeregowo za pośrednictwem kontrolera lub magistrali dynamixel, więc w zasadzie już są obciążone. Problem polega na tym, że oprogramowanie musi wykonać znacznie więcej obliczeń odwrotnej kinematyki niż jest to wymagane tylko w przypadku pozy / chodu na żywo.
Barry Staes

5

Trygonometria jest trudna, ale istnieją skróty. Jeśli nie masz wystarczającej mocy obliczeniowej, rozważ algorytm CORDIC.

Zasadniczo jest to tabela wartości dla [na przykład] sinusa. Kąty mogą być wyrażone w stopniach, radianach, co tylko chcesz. Chodzi o to, że SINE tych wartości to 1/2 (0,5), 1/4 (0,25), 1/8, 1/16 ..... do dowolnego ułamka stopnia, jakiego może użyć twój robot.

Wprowadź kąt, odejmij pierwszą wartość tabeli, ustaw wynik na pierwszy wynik (0,5). Jeśli podciągając, twój kąt stał się ujemny, DODAJ następną wartość (i odejmij 0,25). W przeciwnym razie kontynuuj odejmowanie kątów i dodawanie wyników.

Gdy dotrzesz do końca tabeli, wszystko, co zrobiłeś, to dodawać i odejmować, ale jesteś już blisko. Istnieje jeszcze „czynnik skrzypiec”, przez który należy pomnożyć.

Dokładność [i szybkość] wyniku zależy od rozmiaru [i rozdzielczości] tabeli odnośników.


CORDIC wygląda ładnie, ale użyję go tylko wtedy, gdy przyspieszy robota (jest to wymóg).
Barry Staes

3

Możesz rozważyć użycie płyty Raspberry Pi z systemem GNU / Linux ogólnego przeznaczenia. Raspberry Pi ma kilka pinów GPIO, które można wykorzystać do podłączenia serwomechanizmów lub kart rozszerzeń.

http://www.youtube.com/watch?v=RuYLTudcOaM

Model A Raspberry Pi może wykonać do 24 GFLOP obliczeń zmiennoprzecinkowych ogólnego zastosowania przy użyciu swojego procesora graficznego przy użyciu OpenGL ES 2, pozostając przy mocy poniżej 2,5 W.

http://elinux.org/RPi_Hardware

Przykład: konfiguracja robota zasilanego bateryjnie za pomocą Raspberry Pi.

http://www.homofaciens.de/technics-robots-R3-construction_en_navion.htm

Przykład 2: sześcionożny robot kontrolowany przez Raspberry Pi:

http://www.youtube.com/watch?v=Yhv43H5Omfc

Przykład 3: samobalansujący robot wahadłowy z dwoma kołami sterowany przez Raspberry Pi:

http://www.youtube.com/watch?v=n-noFwc23y0


2

W przypadku robota z nogami możesz utworzyć wstępnie zdefiniowane sekwencje ruchów nóg i „odtwarzać je”. Unikania przeszkód w czasie rzeczywistym można dokonać za pomocą lekkiej fuzzy logicimplementacji, w której wszystko jest znowu w formacie tabeli, a wszystko, co musisz zrobić, to wybrać odpowiednią wartość z niej i wykorzystać ją w defuzzyficationprocesie.

Wszystko można zrobić w C na jakimś szybszym procesorze, takim jak ARM7. Próbowałem AVRi nie udało mi się, po spędzeniu dużo czasu na przekształcaniu wszystkiego fixed point arithmetics.


Odtwarzanie animacji chodu jest dokładnie tym, czego nie chcę. Algorytm, który chcę wdrożyć, sam zastanawia się, co zrobić z nogami, i właśnie dlatego potrzebuję szybkiej trygonometrii. Nie wyjaśniłem tego jednak w swoim pytaniu. Biorąc pod uwagę, że jest w tym tyle głosów, nie powinienem edytować pytania. Zapytam i sprecyzuję we właściwym czasie.
Barry Staes

W takim przypadku wybrałbym system serwonapędów. Każda noga ma własny kontroler. Podejście oparte na agentach.
Gossamer

1

Platforma Texas Instruments Stellaris ma domyślnie na pokładzie jednostkę zmiennoprzecinkową. Nie jestem pewien, czy taktowany kontrolerem ARM 80 MHz jest wystarczająco szybki dla twojej aplikacji, ale płytka rozwojowa LaunchPad jest dość tania: http://www.ti.com/ww/en/launchpad/stellaris_head.html

Jest programowalny przez USB, dostępne są bezpłatne łańcuchy narzędzi dla systemów Windows i Linux, ma wymiary około 4 × 6 cm i ma ponad 30 pinów GPIO (jeśli poprawnie policzyłem).


0

Za pomocą AVR możesz osadzić płytę CPU komputera PC x86 power pc za pomocą AVR do sterowania napędami robota jako kartą interfejsu. Najszybszym i najtańszym rozwiązaniem Twojego problemu. Ale tak, trzeba dużo popsuć w architekturze x86, ale na szczęście możesz uchwycić dużo kodowania z kodów systemu operacyjnego open source. (Jeśli Twoja konstrukcja mechaniczna jest w stanie wytrzymać ten ciężar)


4
„x86” i „power pc” to dwie całkowicie różne (i przynajmniej w niektórych punktach historii) architektury konkurujące ze sobą.
Chris Stratton
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.