Microcontrollore / CPU per una rapida trigonometria nel robot?


15

Ciò riguarda l'hardware che pesa poco, perché un robot ambulante (gatto grasso, 6 gambe con 3 DOF) dovrebbe portarlo in giro. A causa di quella camminata dovrà fare molta trigonometria (usando la matrice matematica o non ne sono ancora sicuro) ed è qui che nasce questa domanda.

PIC, Arduino o AVR economico non sono abbastanza veloci per calcolare tutto 100 / secondo e tenere a mente cose come inerzia ed evitamento di ostacoli, o anche percorsi / andature bruteforce.

  • Il piano A è di trasportare il cervello sul robot. Che si tratti di microprocessore, micro ITX, nettop o altro; qual è l'hardware efficiente per eseguire velocemente trigonometria / matrice matematica?

    Ho cercato online e mi aspettavo di scoprire microcontrollori AVR, x86 o ARM specializzati in questo, ma senza fortuna.

  • Il piano B è quello di avere una macchina x86 connessa tramite WiFi per eseguire il sollevamento di carichi pesanti. Ottimo anche per la prototipazione, ma mi piacerebbe che questo migrasse al piano A alla fine quando l'hardware miniaturizza. Ma anche allora, quale CPU desktop può fare la trigonometria il più velocemente?

  • Il piano C è distribuire il carico e disporre di un microcontrollore / core ad alta efficienza energetica per ogni gamba, anche se questa non è la soluzione migliore per molte ragioni, mi piace la sua capacità di estensione.

Non ho ancora deciso il linguaggio e / o la libreria utilizzati, ma preferisco Pascal e C ++.

(suggerimenti per tag più adatti sono benvenuti, sono nuovo qui)


11
la matematica in virgola mobile non è un must. È sempre possibile creare tabelle sinusoidali (o qualsiasi altra funzione), inserirle nel flash di un AVR e interpolare tra i valori con calcoli a virgola fissa. Questo potrebbe essere abbastanza veloce per le tue esigenze.
Christoph,

3
Invece di perdere la matematica pesante in tempo reale, una soluzione comune è pre-calcolare tabelle di valori e quindi cercare la risposta. Anche l'idea di distribuire il lavoro tra più CPU è buona, ad esempio una potente CPU master e quindi un processore per gamba.
John U

2
Potresti anche considerare di porre questo tipo di domanda sul sito Stackexchange di Robotica .
Rocketmagnet

1
Il piano B eseguirà il calcolo abbastanza velocemente, ma la comunicazione tramite WiFi probabilmente ucciderà il miglioramento delle prestazioni. Hai preso in considerazione l'utilizzo di un telefono Android collegato tramite USB? È molta più potenza di calcolo senza ritardo del wifi
stefan

1
Una scheda STM32F4 con unità a virgola mobile sembra essere sufficiente per l'applicazione. Ha 128k SRAM con 64k CCM. Può funzionare a 168MHz. Una moltiplicazione in virgola mobile a 32 bit richiede solo 1 ciclo della CPU.
richieqianle

Risposte:


16

Non sembra che la tua applicazione sia davvero molto intensiva. Un dsPIC, ad esempio, può eseguire 400 k di istruzioni per ciascuna delle tue iterazioni. Questo è molto. Sarà utile, tuttavia, avere buone capacità di I / O di basso livello, generatori PWM, timer e simili.

Seno e coseno non sono poi così difficili da fare in una macchina intera come un dsPIC. L'ho fatto alcune volte da solo. Il trucco è scegliere la giusta rappresentazione per gli angoli. I radianti possono essere carini da un punto di vista teorico, ma è scomodo dal punto di vista computazionale. Degress sono artificiali e solo stupidi. Usa l'intera gamma di qualunque sia il tuo intero di dimensione macchina per rappresentare una rotazione completa. Ad esempio, su un dsPIC, che è un processore a 16 bit, una rotazione completa è 65536 conteggi, che è molto più precisione e risoluzione di quanto sia necessario per controllare un robot o che si può misurare comunque.

Un vantaggio di questa rappresentazione è che tutto il wrapping avviene automaticamente solo a causa del modo in cui le aggiunte e i sottratti integer senza segno funzionano. Un altro vantaggio significativo è che questa rappresentazione si presta particolarmente bene all'utilizzo di tabelle di ricerca per seno e coseno. Hai solo bisogno di conservare 1/4 di ciclo. I primi due bit dell'angolo indicano in quale quadrante ci si trova, il che indica se indicizzare nella tabella in avanti o all'indietro e se negare il risultato o meno. I successivi N bit inferiori vengono utilizzati per indicizzare nella tabella, con la tabella con 2 N segmenti (2 N +1 punti). Si noti che l'indicizzazione nella tabella all'indietro sta solo completando i bit di indice della tabella.

Puoi assegnare al tavolo abbastanza punti in modo che la scelta della risposta più vicina sia abbastanza buona. Ad esempio, se la tabella ha 1024 segmenti, allora seno e coseno verranno calcolati al 1/4096 più vicino di un cerchio. Sarà abbastanza per controllare un robot. Se si desidera maggiore precisione, è possibile ingrandire la tabella o utilizzare i bit inferiori rimanenti dell'angolo per interpolare linearmente tra le voci della tabella adiacenti.

Ad ogni modo, il punto è che i requisiti per questo processore non corrispondono al problema dichiarato. Probabilmente userei un dsPIC33F. È certamente piccolo, leggero e molto più efficiente dal punto di vista energetico rispetto a un processo di elaborazione generalizzato come un x86 su un computer a scheda singola.


Ho sempre avuto l'impressione che un PIC dovesse rallentare anche solo per la cinematica inversa, ma potrei aver bisogno di ripensarci. È possibile eseguire una cinematica inversa per 6 legs di 3DOF almeno 100 / secondo? Questa è la cinematica inversa 6x3x100 solo per ottenere i movimenti delle gambe dal vivo. In ogni caso ho bisogno che la cinematica inversa si verifichi sulla stessa piattaforma durante l'esecuzione dell'algoritmo, quindi non devo reimplementare queste parti due volte. L'algoritmo sarebbe più impegnativo e certamente non sarà in grado di funzionare su una scheda PIC o Arduino.
Barry Staes,

9

Hai a che fare con molti segnali in ingresso. Non è necessariamente necessaria una CPU con un throughput elevato; molti segnali possono essere elaborati in parallelo. Questo è il tipico territorio DSP. Naturalmente, vuoi anche funzionalità CPU generali. Questo non è un problema. Ci sono molte CPU con DSP integrato.

Un tipico chip design per tali applicazioni è un Cortex-M4. Questo viene fornito con un DSP integrato e le versioni -M4F hanno anche una FPU. Questo potrebbe non essere necessario, la trigonometria può essere facilmente eseguita in matematica a virgola fissa.


La matematica matrix avrebbe un vantaggio sul Cortex-M4F? (nel caso mi avventuri lì, prototipazione)
Barry Staes

3
Giusto per essere un po 'pedanti: il core del processore Cortex-M4 non ha un DSP integrato, ha un grado di funzionalità DSP incorporato nel suo core del processore principale. Le estensioni DSP sono l'aggiunta di istruzioni moltiplicate / accumulate che facilitano le tipiche funzioni DSP come il filtro e le trasformazioni.
uɐɪ

6

Alcune osservazioni:

  1. Non è necessario elaborare le operazioni di trigonometria sulla stessa CPU che esegue l'evitamento degli ostacoli. È possibile dividere le attività tra due microcontrollori e utilizzare un protocollo di comunicazione per farli parlare.

  2. Per un esperimento ho implementato un algoritmo AHRS con un filtro Kalman in un microcontrollore ARM Cortex M0 (era un STM32, non ricordo esattamente il resto ma penso che fosse 32 MHz), e usando la matematica a punto fisso potrei correre a circa 40 campioni / secondo. Con un controller più veloce dovresti essere in grado di trasportarlo facilmente e, naturalmente, puoi provare il modo FPGA o DSP.

  3. Direi che il controllo delle gambe non richiede molta CPU e puoi controllare tutte le gambe insieme, magari separatamente dalle operazioni di trigonometria e di prevenzione degli ostacoli (vedi 1)


I servi sono controllati in serie tramite controller o bus dinamixel, quindi praticamente già scaricati. Il problema è che il software deve eseguire molti più calcoli della cinematica inversa di quanto richiesto solo per la posa / andatura dal vivo.
Barry Staes,

5

La trigonometria è complicata, ma ci sono scorciatoie. Se hai poca potenza di elaborazione, considera l'algoritmo CORDIC.

È fondamentalmente una tabella di valori per [ad esempio] seno. Gli angoli possono essere in gradi, radianti, qualunque cosa tu voglia. Il punto è che il SINE di questi valori è 1/2 (0,5), 1/4 (0,25), 1/8, 1/16 ..... a qualunque frazione di grado il tuo robot possa usare.

Inserisci il tuo angolo, sottrai il valore della prima tabella, imposta il risultato sul primo risultato (0,5). Se, sottraendo, l'angolo diventa negativo, allora AGGIUNGI il valore successivo (e sottrai 0,25). Altrimenti, continuare a sottrarre angoli e aggiungere risultati.

Quando arrivi alla fine della tabella, tutto ciò che hai fatto è aggiungere e sottrarre, ma sei molto vicino. C'è un "fattore di violino" finale da moltiplicare per.

L'accuratezza [e la velocità] del risultato dipende dalla dimensione [e dalla risoluzione] della tabella di ricerca.


CORDIC sembra carino ma lo userò solo se renderà il robot più veloce (questo è un requisito).
Barry Staes,

3

Puoi prendere in considerazione l'utilizzo di una scheda Raspberry Pi che esegue un sistema GNU / Linux generico. Il Raspberry Pi ha diversi pin GPIO che possono essere utilizzati per collegare servi robot o schede di estensione.

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

Il modello A Raspberry Pi può eseguire fino a 24 GFLOP di calcolo a virgola mobile per scopi generici utilizzando la sua GPU utilizzando OpenGL ES 2 pur rimanendo con un budget di risparmio di 2,5 W.

http://elinux.org/RPi_Hardware

Esempio: un'impostazione di robot alimentata a batteria implementata utilizzando Raspberry Pi.

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

Esempio 2: un robot a 6 zampe controllato da un lampone pi:

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

Esempio 3: un robot a pendolo rovesciato a 2 ruote autobilanciato controllato da un lampone pi:

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


2

Per i robot con le gambe è possibile creare alcune sequenze predefinite di movimento delle gambe e "riprodurle". L'eliminazione degli ostacoli in tempo reale può essere fatta con fuzzy logicun'implementazione leggera in cui tutto è di nuovo in formato tabella e tutto ciò che devi fare è scegliere il giusto valore da esso e usarlo per il defuzzyficationprocesso.

Tutto può essere fatto in C su un processore in qualche modo più veloce come ARM7. L'ho provato AVRe fallito, dopo aver trascorso molto tempo a trasformare tutto in fixed point arithmetics.


La riproduzione di animazioni di andatura è esattamente ciò che non voglio. L'algoritmo che voglio implementare capisce cosa fare con le sue gambe da solo, e questo algoritmo è il motivo per cui ho bisogno di una trigonometria veloce. Mi mancava di chiarire questo aspetto nella mia domanda. E vedendo che così tanti rinvii a questo, sarei un disastro a modificare la domanda. Chiederò ed essere più specifico, a tempo debito.
Barry Staes,

In tal caso, sceglierei il sistema servo leg. Ogni gamba ha il suo controller. Approccio basato sull'agente.
Gossamer,

1

La piattaforma Stellaris di Texas Instruments ha un'unità a virgola mobile integrata per impostazione predefinita. Non sono sicuro che il controller ARM con clock a 80 MHz sia abbastanza veloce per la tua applicazione, ma una scheda di sviluppo LaunchPad è piuttosto economica: http://www.ti.com/ww/it/launchpad/stellaris_head.html

È programmabile tramite USB, sono disponibili toolchain gratuiti per almeno Windows e Linux, misura circa 4 × 6 cm e ha oltre 30 pin GPIO (se ho contato correttamente).


0

È possibile incorporare la scheda CPU x86 power pc nell'applicazione robotica con l'aiuto di AVR per controllare le unità del robot come una scheda di interfaccia. La soluzione più rapida ed economica del tuo problema. Ma sì, devi confondere un sacco di codice nell'architettura x86, ma per fortuna puoi cogliere un sacco di codice dai codici del sistema operativo open source. (Se la tua costruzione meccanica può sopportare questo peso)


4
"x86" e "power pc" sono due architetture concorrenti completamente diverse (e almeno in alcuni punti della storia).
Chris Stratton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.