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)
źródło
Odpowiedzi:
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.
źródło
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.
źródło
Kilka uwag:
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ć.
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.
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)
źródło
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.
źródło
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
źródło
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 logic
implementacji, w której wszystko jest znowu w formacie tabeli, a wszystko, co musisz zrobić, to wybrać odpowiednią wartość z niej i wykorzystać ją wdefuzzyfication
procesie.Wszystko można zrobić w C na jakimś szybszym procesorze, takim jak
ARM7
. PróbowałemAVR
i nie udało mi się, po spędzeniu dużo czasu na przekształcaniu wszystkiegofixed point arithmetics
.źródło
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).
źródło
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)
źródło