Con un robot a 6 assi, data la posizione dell'effettore finale e la gamma di orientamenti, come trovare valori articolari ottimali


10

Dato un braccio robotico articolato a sei assi che tiene uno strumento nella sua estremità di effetto, se ho una posizione e un orientamento dello strumento desiderati, ci sarà esattamente 1 soluzione all'equazione cinematica inversa affinché il robot raggiunga quella posizione.
(o meglio fino a 16 diverse soluzioni, a seconda della gamma delle articolazioni)

http://en.wikipedia.org/wiki/Robotic_arm

Ma se il robot tiene in mano qualcosa di simile a una penna e voglio che il robot segni un punto specifico con quella penna sul bersaglio, allora non mi interessa come è orientata la penna, purché sia ​​perpendicolare alla superficie segnata.

Quindi l'equazione cinematica inversa avrà infinite soluzioni.

Come posso scegliere tra queste soluzioni la configurazione congiunta più vicina alla configurazione attuale: quella che richiederà il minor numero di movimenti per raggiungere?
(o la configurazione del giunto che è ottimale secondo alcuni altri criteri simili, come ad esempio che tutti gli angoli del giunto sono più lontani dal loro massimo e minimo?)

Risposte:


9

Innanzitutto, dobbiamo definire ottimale . Dal momento che non dici ciò che ritieni ottimale, la maggior parte delle persone sceglie un'espressione quadratica. Ad esempio, supponiamo che i tuoi angoli articolari attuali siano indicati dal vettore . Possiamo considerare di ridurre al minimo il movimento richiesto - con un errore , puoi definire una funzione di costo per un po 'di matrice . Normalmente utilizziamo una matrice diagonale, ma qualsiasi matrice definita positiva lo farà.x =α -α startJαx=ααstart QJ=XTQXQ

In un esempio semplificato con due angoli comuni, se il giunto avesse un motore più economico (forse più vicino all'effettore finale), potremmo avere una funzione di costo diun'

baJ=[Xun'XB][1002][Xun'XB] , vale a dire. lo spostamento dell'articolazione è due volte più costoso rispetto all'articolazione .Bun'

Ora, l'equazione cinematica è una formula di matrice, e nella notazione di Denavit-Hartenberg potrebbe essere:

(x,y,z)ΠTio=[100X010y001z0001] , dove il lato destro rappresenta la posizione e l'orientamento (attualmente impostato come rotazione zero), dati gli angoli dei giunti.(X,y,z)

Poiché non ci interessa l'orientamento e solo la posizione, possiamo troncare le prime 3 colonne dell'ultima matrice di trasformazione e l'ultima riga della prima matrice di trasformazione. Possiamo esprimere equivalentemente questa formula come:

[100001000010]ΠTio[0001]=[Xyz]

Moltiplicando il lato sinistro, otteniamo tre equazioni. Se i parametri fossero lineari, sarebbe semplice da risolvere. Questo è il caso se tutti gli attuatori sono attuatori lineari. In questo caso, il problema è in realtà un programma quadratico . Possiamo riorganizzare il lato sinistro per ottenere l'equazione:

KKX=[Xyz] , per qualche matrice .K

Un programma quadratico è un problema che può essere espresso nella forma:

Riduci a iconaJ=12XTQX+cTX

Con riserva di , E UNXBEX=d

Per risolvere questo, ci sono un certo numero di algoritmi che puoi usare, ad esempio punto interno, set attivo, .... Basta trovare una libreria adatta e la risolverà per te.

Un sistema non lineare di equazioni è più difficile da risolvere. Questa si chiama programmazione non lineare , ma è ciò che hai se hai giunti rotanti.

In sostanza, al posto delle equazioni di matrice, si hanno funzioni non lineari.

Riduci a icona soggetto a , (riorganizza se necessario per rendere zero l'RHS dei vincoli)h ( x ) = 0 g ( x ) 0f(X)h(X)=0g(X)0

Gli algoritmi utilizzati per risolvere questo problema sono ancora più complessi, ma comprendono algoritmi riflettenti per punto interno, programmazione quadratica sequenziale (SQP), Active-set, Trust-region. Ovviamente, la spiegazione di come funzionano questi algoritmi è molto lunga e la lascerò fuori dallo scopo di questa risposta. Basti dire che la quantità di contenuto sugli algoritmi utilizzati per la sola programmazione quadratica potrebbe essere un intero corso da solo.

Dovresti semplicemente trovare una libreria per risolvere il problema, impiegare molto tempo a codificare un'implementazione efficiente e implementazioni efficienti possono gestire 100 (o più) variabili alla volta. Ad esempio, se si utilizza MATLAB, è disponibile la documentazione su come utilizzare la funzione fmincon dalla Casella degli strumenti di ottimizzazione.

Per risolverlo online, potresti volere C ++ o altra implementazione nativa, ad esempio NLopt. Si noti che questo potrebbe non essere qualcosa che un microcontrollore può risolvere rapidamente e che molte librerie potrebbero avere altre dipendenze che non sono facili da usare su un microcontrollore (poiché sono destinate a un computer).


Se non sei preoccupato dell'efficienza e desideri semplicemente qualcosa che puoi codificare da solo, supponendo che ci sia una funzione che puoi chiamare per risolvere il problema cinematico inverso , puoi semplicemente fare un metodo di discesa del gradiente. Ad esempio, scegliendo arbitrariamente un orientamento iniziale casuale, risolvi il problema inverso, quindi controlla la funzione di costo. Quindi è possibile utilizzare l'analisi delle perturbazioni per verificare come è necessario variare l'orientamento. Ad esempio, se si controllano orientamenti simili attorno al proprio orientamento corrente (ovvero 8 punti in una griglia cubica), è possibile ottenere un'approssimazione del secondo ordine di come varia la funzione di costo in ciascuna direzione.

Utilizzando l'approssimazione del secondo ordine (nota come matrice hessiana poiché multivariata - tridimensionale per l'orientamento), è possibile trovare l'attraversamento zero del gradiente della funzione di costo (ovvero i minimi locali previsti).

Con il nuovo orientamento previsto, basta inserirlo nuovamente nel solutore inverso e ripetere fino a quando l'accuratezza non è sufficiente.

Si noti che questo probabilmente non sarà altrettanto efficiente, poiché il problema cinematico inverso stesso deve essere risolto iterativamente (quindi si utilizza ripetutamente una funzione che a sua volta richiede un po 'di tempo per risolversi). Inoltre, il codice in questione potrebbe essere inferiore a un algoritmo di ottimizzazione completo, ma è ancora abbastanza sostanziale e non un investimento di tempo insignificante.


Utilizzando entrambi i metodi (risolvendo formalmente come un programma non lineare o utilizzando iterativamente una funzione per risolvere il problema inverso), la soluzione potrebbe non essere ottimale se vi sono più minimi locali. In questo caso, puoi provare a trovare i minimi globali usando vari approcci. Anche con un solutore di programmazione non lineare, ci si aspetta che lo seeding con valori iniziali (ad es. Angoli dei giunti). Puoi eseguire ripetutamente entrambi i metodi con il seme generato in vari modi:

  • riavvio casuale (viene generato in modo casuale)
  • Basato griglia

o altri metodi personalizzati.

Tuttavia, tieni presente che se ci sono molti minimi, non esiste un buon modo per garantire che troverai i minimi globali. Puoi solo migliorare le tue possibilità.


2

Dato che la domanda riguarda un robot industriale, probabilmente non abbiamo un modello della dinamica del robot, quindi presumo che stiamo cercando soluzioni che ottimizzino solo un criterio cinematico.

Il robot ha una soluzione a forma chiusa per la sua cinematica inversa, ma sfortunatamente l'effettore finale ha un ulteriore grado di libertà di rotazione, il che significa che il robot ha essenzialmente 7 gradi di libertà. Ma poiché questo è solo un altro dof , non è tanto un problema come si potrebbe pensare.

Un trucco comune per tali robot quasi non ridondanti è quello di bloccare i gradi extra di libertà e risolvere analiticamente i rimanenti valori dei giunti. Diciamo che scriviamo un risolutore IK in forma chiusa per il robot 6 dof che restituisce soluzioni in media ms. Esaminando da a è quindi possibile trovare la soluzione ottimale per una discretizzazione dell'angolo della penna di in circa ms, il che, dato che l'applicazione è probabilmente più che adeguata.0.05360 1 181360118

Se la maggior parte delle volte la penna si muove solo leggermente (ad esempio quando si disegna una linea), un altro trucco per accelerare la ricerca consiste nell'utilizzare IK numerico, ad esempio il metodo pseudoinverso:

Lascia che sia la configurazione corrente del robot, che sia il suo giacobino e che sia lo spostamento del bersaglio rispetto all'attuale trasformazione dell'effettore finale. Risolvi per e calcola una nuova configurazione . Sto saltando i dettagli qui, ma la soluzione dovrebbe minimizzareper una metrica scelta correttamente. J Δ x Δ x = Jq1JΔXΔ q q 2 = q 1ΔX=JΔqΔqq2=q1+ΔqΔqΔq

Questo viene fatto per il robot 7 dof e di nuovo dovrebbe richiedere solo frazioni di millisecondo. Sebbene potrebbe non essere una configurazione valida (i valori dei giunti possono essere fuori dai limiti) e potrebbe non essere una soluzione IK accurata (è possibile eseguire più passaggi pseudoinverso), il più delle volte sarà un buon punto di partenza per un cerca usando il solutore a forma chiusa.q2


1

C'è un bel modulo chiuso a questo. Diciamo che non ci importa cosa sia (cioè non ci importa come lo cambiamo ).rz

J-1X˙=Θ˙=[j1j2j3j4j5j6][X˙y˙z˙rX˙ry˙rz˙]=[θ1˙θ2˙θ3˙θ4˙θ5˙θ6˙]
Dove è la colonna di . Possiamo suddividere nella porzione che dipende da e dalla porzione che non lo fa. jioiothJ-1Θ˙rz˙
Θ˙=Θ˙X˙...ry˙+Θ˙rz˙Θ˙rz˙=j6rz˙
Quindi ora il gioco è diventato, minimizziamo per una matrice diagonale come ha detto ronalchn sopra. Ho intenzione di utilizzare e per una visualizzazione più semplice.
(Θ˙X˙...ry˙+Θ˙rz˙)TD(Θ˙X˙...ry˙+Θ˙rz˙)
DUN=Θ˙X˙...ry˙B=Θ˙rz˙*

Possiamo estenderlo a

UNTDUN+2BTDUN+BTDBoUNTDUN+2rz˙j6TDUN+rz˙2j6TDj6

Ora abbiamo una semplice equazione per differenziare su . Troviamo la derivata rispetto a e la impostiamo su . Questo minimizza l'angolo "articolazione" tra le tue due pose.rz˙rz˙0

2j6TDUN+2rz˙j6TDj6=0rz˙=-j6TDUNj6TDj6
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.