Problema di singolarità al risolutore cinematico inverso


9

Sto lottando con questo problema da giorni. Spero davvero che qualcuno possa darmi un suggerimento sul problema.

Il robot è composto da 5 assi. Il primo asse ruota attorno all'asse z e altri 4 assi ruotano attorno all'asse y. E il risolutore in pratica funziona.

Ecco cosa ho fatto finora:

  1. Calcolo il fattore di manipolabilità con la mia matrice giacobina (solo la parte traslazionale, poiché qui viene tracciata solo la posizione. In realtà, ho anche provato con una matrice giacobina combinata, quindi non solo la parte traslazionale ma anche la parte rotazionale. Ma il movimento a scatti c'era Comunque):

  2. Quindi il fattore di smorzamento è:

    inserisci qui la descrizione dell'immagine

  3. Il fattore di smorzamento viene quindi integrato nel calcolo pseudo inverso:

inserisci qui la descrizione dell'immagine

Come puoi vedere, questo è solo un classico risolutore cinematico pseudo inverso con metodo smorzato del minimo quadrato. Il fattore di manipolabilità secondo il secondo movimento (problema) è: inserisci qui la descrizione dell'immagine La manipolabilità diminuisce all'inizio del video. Ma perché? Per quanto ne so, questo fattore di manipolabilità indica la dipendenza lineare degli assi. Per me gli assi non sembrano essere linearmente dipendenti nella parte iniziale.

Questo movimento a scatti mi fa impazzire. Come puoi vedere nella prima animazione, il solutore sembra funzionare correttamente. Cosa mi sto perdendo qui?


1
Benvenuto in Robotica , Joe! Questa è una domanda fantastica, ma sfortunatamente non credo che ci siano abbastanza dettagli per rispondere alla domanda. Quando un sistema passa a una singolarità, mi aspetto che un asse di movimento compia un'oscillazione selvaggia, come un asse che oscilla di 180 gradi perché un altro sta cercando di andare da 89 a 91 gradi (se 90 gradi era la singolarità). Non vedo davvero quel comportamento qui. Mi chiedo se si tratti più di un problema di implementazione, come l'utilizzo di qualcosa del tipo atananziché atan2, ecc. Potresti modificare la domanda per pubblicare il codice che stai utilizzando?
Chuck

1
@ Chuck, ho modificato la domanda in modo che lo "swing selvaggio" possa essere visto. (guarda l'animazione 2. aggiornata)
Joe

Risposte:


1

Come altri hanno già sottolineato, ci deve essere un problema con l'implementazione dell'algoritmo IK poiché non ci deve essere alcun comportamento singolare nelle descrizioni fornite.

Ora hai due alternative: o inizi a eseguire il debug del codice o potresti voler sfruttare il fatto che il problema può essere facilmente suddiviso in due sottoproblemi per i quali puoi prontamente impiegare la maggior parte del codice scritto finora.

Dato il target 3D desiderato , è semplice osservare che il valore desiderato del primo giunto è: .(xd,yd,zd)θ1d=arctan(ydxd)

La legge di controllo per guidare il primo giunto del manipolatore su può essere semplice come:θ1d

θ1˙=K1(θ1dθ1).

Quindi, lascia che sia la matrice che rappresenta la rotazione di attorno all'asse :RSO(3)θ1dz

R=(cosθ1dsinθ1d0sinθ1dcosθ1d0001).

Tramite , otterrai il nuovo target che stabilirà un nuovo problema planare 2D 2D nel piano .R(xd,0,zd)1=RT(xd,yd,zd)Txz

A questo punto, puoi risolvere per usando il giacobino del rimanente manipolatore 4-DOF.(xd,zd)1


Penso che non sia necessario abbattere il problema nei sottoproblemi. Poiché la dichiarazione del vettore unità indica già ciò che hai appena descritto.
Joe,

La suddivisione è un semplice suggerimento per consentire di riutilizzare il 4 DOF Jacobian, che è la parte del codice che funziona senza problemi, come riportato all'inizio del tuo post.
Ugo Pattacini,

0

Penso che tu abbia introdotto una singolarità algoritmica al primo asse del polso. Mi sembra che, quando raggiunge i 90 gradi "in basso", che invece di andare a 91 cerca di tornare indietro di zero a -269 gradi.

Naturalmente questo è speculativo senza vedere il codice.

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.