Dubbi prima esercitazione

Dubbi prima esercitazione

di Jacopo Carlo Adamoli -
Numero di risposte: 30

Salve, il mio dubbio consiste nell'applicare la matrice di rototraslazione ottenuta sul disegno del robot per ottenere la nuova pose. Non riesco quindi a capire come applicare la matrice 3x3 ottenuta al disegno del robot. Grazie

In riposta a Jacopo Carlo Adamoli

Re: Dubbi prima esercitazione

di Domenico Giorgio Sorrenti -

Innanzitutto la ringrazio per aver posto una domanda, non credo che i suoi silenti colleghi siano particolarmente più brillanti di lei.

Si tratta comunque di una domanda che non sono sicuro di aver compreso perché la risposta di per sé è banale: facendo il prodotto... E mi pare strano che avendo parlato di vettore trasformato = prodotto di matrice per il vettore da trasformare fino ad ora lei abbia questo dubbio.

Ipotizzo quindi che i suoi dubbi riguardino il fatto che "il robot" è costituito da più punti che rappresentano i vertici di una sagoma, da disegnarsi chiamando la funzione "patch" di matlab e rispondo su questo, semmai risponda specificando ancora cosa non le è chiaro.

Come prima cosa deve guardare come funziona patch: apre editor di matlab, scrive patch, ci mette il cursore sopra e preme F1. Dopo aver fatto qualche prova passiamo alla questione trasformazione dei punti del robot, che sono noti nel sistema di riferimento attaccato al corpo (sistema mobile).

Se mette tutti i punti del robot (sono 3 poligoni: il corpo e le 2 ruote) uno accanto all'altro ottiene una matrice unica (o 3 matrici, se vuole tenere i 3 poligoni distinti) di coordinate di punti dei (o del) poligoni(o). Questa matrice la deve trasformare con la matrice che rappresenta la roto-traslazione al tempo corrente e dopo usare la matrice di punti trasformati per disegnare il robot nella nuova pose.

In riposta a Jacopo Carlo Adamoli

Ri: Dubbi prima esercitazione

di Andrea Gusmara -
Salve a tutti . Volevo condividere qui sul forum un dubbio riguardo all'esercitazione. Dopo aver applicato la mia trasformazione omogenea le coordinate dei tre poligoni ruotano , apparentemente in modo corretto , ma non traslano nello spazio. Chiedo quindi qualche suggerimento che mi aiuti a risolvere il mio problema , grazie in anticipo .
In riposta a Andrea Gusmara

Ri: Dubbi prima esercitazione

di Domenico Giorgio Sorrenti -

Innanzitutto la ringrazio per fare la domanda, come dicevo nell'intervento prima, non credo che tutti quelli che tacciono lo fanno perché per loro non ci sono problemi.

Come è fatta la matrice di rototraslazione che sta usando? Metta magari qui qualche punto nel sistema body-attached-frame e la matrice di trasformazione, così possiamo capire meglio dove potrebbe essere il problema.

Circa lo scarso uso del forum, se gli interventi fossero anonimi (o magari sottomettibili come anonimi con una scelta da prendere al momento della sottomissione) pensate che potrebbe essere meno sofferto l;uso del forum?

In riposta a Domenico Giorgio Sorrenti

Ri: Dubbi prima esercitazione

di Fabio D'Elia -

Rispondo alla sua ultima domanda riguardo l'utilizzo del forum. 

A mio parere si è ancora fatto troppo poco per giustificare un utilizzo massiccio del forum. 

Con Marchese oggi abbiamo fatto un bel passo. Quindi tenendo conto questo, più la scadenza per la consegna, immagino che ci sarà un incremento di interventi sul forum.

Detto questo, aspetto la replica di chi ha fatto l'intervento, perché anch'io sto sbattendo la testa su Matlab non capendo dove possa essere il mio errore.

In riposta a Domenico Giorgio Sorrenti

Ri: Dubbi prima esercitazione

di Andrea Gusmara -
b=0.6;
SDX SSX sono simboli il qui valore cambia in base t-esima trasformazione.
d = SDX*b / (SSX-SDX);
deltaT = (SSX-SDX)/b;
mER = [ cos(- deltaT) -sin(- deltaT) ; sin(- deltaT) cos(- deltaT)];
transition=[0 d+b/2]; i2 = eye(2,2); i0 = zeros(1,2);
OT1 = [i2 transition' ; 0 0 1 ];
OT2 = [ mER i0' ; 0 0 1];
OT3 = [i2 -transition' ; 0 0 1];
one_p = OT1*OT2*OT3;
per quanto riguarda i punti del body-attached-frame , se ho capito bene cosa intende , le metto i suoi di partenza .
a1=0.3; a2=0.1; a3=0.2; a4=0.05;
xBodyPoints = [ -a1 -a1 a1 a1+a2 a1];
yBodyPoints = [ a1 -a1 -a1 0 a1];
In riposta a Andrea Gusmara

Ri: Dubbi prima esercitazione

di Luca Brandalese -
salve professore 
pure io sto cercando di capire il come si può fare la parte la traslazione del robot
quando esegue la curva ma non riesco a capire che valori devo dare alla matrice per traslarla nella nuova posizione 
In riposta a Andrea Gusmara

Re: Ri: Dubbi prima esercitazione

di Domenico Giorgio Sorrenti -

scusate il ritardo, ma avevo aperto matlab ancora l'altro giorno, ma questa storia covid mi ha bloccato (bandi per attività di ricerca da applicare... "domani", es. sanificazione robotizzata delle parti "toccate" dalle manacce sporche delle persone). spero di rispondervi prestissimo, altrimenti spostiamo la deadline.

In riposta a Andrea Gusmara

Re: Ri: Dubbi prima esercitazione

di Domenico Giorgio Sorrenti -

mi viene in mente una cavolatina: gli assi del disegno matlab li avete messi fissi, con scala identica su entrambi gli assi? di default matlab potrebbe centrare il disegno sul patch che state disegnando correntemente, traslando lui l'origine e rendendo non percepibile la traslazione.

In riposta a Andrea Gusmara

Re: Ri: Dubbi prima esercitazione

di Domenico Giorgio Sorrenti -

io inizializzo così "la canvas grafica":

h=axes;
xlim(h,[-20 +20])
ylim(h,[-20 +20])
axis equal
In riposta a Domenico Giorgio Sorrenti

Ri: Re: Ri: Dubbi prima esercitazione

di Luca Brandalese -

io ho questo problema che riguarda la parte di curva per il robot che non capisco cosa sbaglio nel fare la traslazione

Allegato Cattura.JPG
In riposta a Andrea Gusmara

Re: Ri: Dubbi prima esercitazione

di Domenico Giorgio Sorrenti -

allora, questo errore l'ho già visto, ma ci sono un tale numero di modi in cui nel passato ho visto sbagliare che non sono in grado di affermare, guardando al disegno, cosa sia sbagliato. come potete intuire se ricordate quanto detto sulle ruote, in particolare sul fatto che costituiscano un vincolo anolonomo "da ruota", questo tipo di atti di moto non sono realizzabili. se potesse saltare sarebbe un'altra storia.

posso solo suggerire di verificare che l'ordine di moltiplicazione sia corretto, magari riscrivendosi le matrici con sia il riferimento in basso a destra che quello in alto a destra e verificando il prodotto con la usuale semplificazione da in basso a sinistra ad in alto a destra.

provo a ritrovare il mio codice e metto un disegno del "percorso giusto".

In riposta a Domenico Giorgio Sorrenti

Ri: Re: Ri: Dubbi prima esercitazione

di Jacopo Carlo Adamoli -

Anch'io condivido lo stesso problema nella parte in cui il robot curva. Ho verificato e le moltiplicazioni delle matrici sono nell'ordine giusto, infatti credo che il mio errore stia quando verifico di quanto deve avanzare il robot secondo gli archi sxx e sdx. In questo punto io verifico se i due archi siano uguali oppure no, quando sono uguali effettuo un avanzamento in avanti, mentre quando sono diversi non so esattamente come applicare gli archi per far si che effettui in movimento lecito senza violare il vincolo anolonomo delle ruote

In riposta a Jacopo Carlo Adamoli

Ri: Re: Ri: Dubbi prima esercitazione

di Domenico Giorgio Sorrenti -

uummhh... quanto detto nel testo dell'esercizio si riferisce al caso in cui gli archi non sono uguali ovvero non si va dritti. non mi è quindi ben chiaro quello che dice quando dice "non so esattamente come applicare gli archi" avendo poco prima detto "le moltiplicazioni delle matrici sono nell'ordine giusto", infatti l'altro caso (andare dritti) non l'ho nemmeno trattato perché "le matrici" sono "una sola matrice di traslazione" (peraltro lungo l'altro asse). mi aiuti a capire cosa non le è chiaro.

In riposta a Domenico Giorgio Sorrenti

Ri: Re: Ri: Dubbi prima esercitazione

di Jacopo Carlo Adamoli -
Quando gli archi sono della stessa dimensione (ovvero si va dritti) io sposto il robot in avanti sommando alla matrice dei punti del robot (questo dopo aver calcolato la matrice di rototraslazione e dopo averla moltiplicata per la matrice dei punti del robot), nella riga dell'asse delle x, il valore di ssx o di sdx, questo per ottenere la traslazione in avanti. Invece quando i valori di ssx e sdx sono diversi non so come trattare il caso, infatti se sommo questi valori ai punti come facevo nell'altro caso ottengo un movimento del robot che viola i sui vincoli. Mi chiedo quindi come poter risolvere la cosa
In riposta a Jacopo Carlo Adamoli

Re: Ri: Re: Ri: Dubbi prima esercitazione

di Domenico Giorgio Sorrenti -

  1. andare dritti: non si fa come ha detto! non mi consegni il codice che ha descritto perché sarebbe gravemente insufficiente. si deve moltiplicare ciascun punto del robot (un vettore colonna che. se vuole, può mettere accanto agli altri vettori colonna degli altri punti del robot per formare la "matrice dei punti del robot") a sinistra per la matrice di roto-traslazione in cui i valori sono quelli di una pura traslazione. se non sa come costruire questa matrice batta un colpo (ma la risposta è: ha letto le poche pagine del libro sulle rototraslazioni?)
  2. andare lungo una circonferenza con centro nel CIR e raggio=(b/2+d): qui penso che lei non abbia seguito il secondo incontro sulla prima esercitazione; in questo incontro abbiamo chiarito quanto solo accennato nel testo dell'esercizio: si ottiene la trasformazione che rappresenta la pose del robot al tempo t rispetto alla pose del robot al tempo (t-1) nel modo seguente: prodotto di 3 trasformazioni elementari (elementare è il termine usato sul libro per indicare le trasformazioni lungo un solo asse alla volta): la prima dall'origine del sistema di riferimento del robot al tempo (t-1) al CIR traslando lungo l'asse y, la seconda una pura rotazione attorno all'asse z del sistema nel CIR, la terza una traslazione opposta alla prima sempre lungo l'asse y che porti all'origine del sistema di riferimento del robot al tempo t.
  3. avendo questa trasformazione poi la si deve combinare con quella che rappresenta la pose del robot al tempo (t-1) rispetto alla pose del robot al tempo 0 (zero), che prendiamo come sistema di riferimento "mondo".
  4. si disegna il robot sempre rispetto al mondo, altrimenti non si vede che si muove, si vederebbe solo il suo cambio di orientamento (e questo potrebbe spiegare altre richieste di chiarimento in modo alternativo a quella di matlab che tiene centrato il sistema di riferimento sul robot).
mi faccia sapere se adesso è più chiaro e non si faccia scrupoli di chiedere una proroga.

per tutti: per favore, NON CONSEGNATE SCHIFEZZE, chiedete una proroga, anche più volte!

In riposta a Domenico Giorgio Sorrenti

Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione

di Jacopo Carlo Adamoli -
Le lezioni le ho seguite e la teoria l'ho capita, ma mi trovo comunque in difficoltà a venire a capo di questo problema. La matrice dei punti del robot che costruisco è una 3x13 poiché la creo omogenea, poi ad ogni iterazione del ciclo calcolo i valori d e theta e con questi costruisco le tre matrici elementari e le moltiplico per ottenere la matrice di rototraslazione. Una volta ottenuta la matrice di rototraslazione la moltiplico per la matrice dei punti del robot. Se mi fermo a questo punto il disegno che ottengo è un robot che ruota su se stesso senza effettuare nessuna traslazione e, da quanto ho capito nel suo messaggio, i passaggi da effettuare sono questi
In riposta a Jacopo Carlo Adamoli

Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione

di Domenico Giorgio Sorrenti -

  1. molto bene, quello che ha fatto è allora diverso da quello che mi aveva indciato per il caso di andare dritti e mi sembra corretto, ma non è tutto!
  2. se ho ben capito quello che ha detto nell'ultimo messaggio, il problema che sta descrivendo non è quello del disegno allegato dal suo collega: nel disegno del suo collega il robot non segue il movimento corretto, ma si muove comunque rispetto al mondo, mentre da quello che dice lei il robot sta fermo rispetto all'origine del sistema di riferimento del disegno mentre va dritto e poi cambia solo orientamento quando gli archi non sono uguali. vediamo una possibile spiegazione.
  3. la matrice di rototraslazione che ha ottenuto dal prodotto delle 3 matrici elementari costituiscono quella che nel testo dell'esercizio ho chiamato (con un nome non particolarmente felice) "one-period" (speravo di richiamare "un intervallo di simulazione", "un passo di simulazione", "un periodo di simulazione").
  4. per vedere il robot muoversi nel mondo lei deve vedere che i suoi (del robot) punti assumono posizioni diverse nel corso della simulazione, quindi "si deve muovere rispetto al mondo"; se lei applica la "one-period" e disegna il robot non sta disegnando il robot rispetto al mondo, ma rispetto al tempo (t-1).
  5. per disegnare il robot rispetto al mondo le manca il passaggio al punto 3 del mio ultimo messaggio.
mi faccia sapere se questo risolve il problema.
In riposta a Domenico Giorgio Sorrenti

Ri: Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione

di Jacopo Carlo Adamoli -

Ho rivisto il codice e applicato la matrice di pura traslazione, che modifica le x, quando ssx e sdx sono uguali. Quando invece sono diversi e deve compiere la rototraslazione mi viola il vincolo anolonomo e mi riconduce al problema dell'immagine del mio collega. Le allego l'immagine che mi restituisce il codice

In riposta a Domenico Giorgio Sorrenti

Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione

di Domenico Giorgio Sorrenti -

Il disegno non soltanto viola il vincolo di anolonimia, ma modifica la sagoma del robot, che invece non deve cambiare in quanto il movimento è di un corpo rigido. Verifichi se prima di disegnare trasforma esattamente i punti del robot nel sistema robot (i punti originalmente inseriti nel suo codice, quelli presi dal testo dell'esercizio) o una qualche sua variazione. Se parte sempre dai punti originali del robot (coordinate nel sistema robot), allora c'è qualche errore nella composizione delle matrici, non saprei dire dal solo disegno se si tratta di un errore relativo alla composizione interna (gli elementi delle matrici) o alla loro composizione esterna (la posizione delle matrici nei prodotti).

In riposta a Domenico Giorgio Sorrenti

Ri: Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione

di Jacopo Carlo Adamoli -
Per il caso in cui ssx e sdx sono uguali allora costruisco la matrice 3x3 che è costruita cosi [1 0 ssx(c); 0 1 0; 0 0 1], mentre nel caso in cui ssx e sdx siano diversi utilizzo le tre matrici elementari che avevamo costruito nella videolezione con lei, che riscrivo per maggiore sicurezza
M1=[1 0 0; 0 1 -b/2-d; 0 0 1];
M2=[cos(-theta) -sin(-theta) 0; sin(-theta) cos(-theta) 0; 0 0 1];
M3=[1 0 0; 0 1 b/2+d; 0 0 1];
infine queste tre matrici le moltiplico tra loro, ovvero M1*M2*M3, per ottenere la matrice di rototraslazione
In riposta a Jacopo Carlo Adamoli

Re: Ri: Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione

di Domenico Giorgio Sorrenti -

Per rispondere preferisco dare degli alltri nomi alle 3 matrici che lei nomina: \( \text{M1}=T_{CIR_{t-1}}^{R_{t-1}}\text{, M2}=T_{CIR_t}^{CIR_{t-1}}\text{, M3}=T_{R_t}^{CIR_t} \).

Il prodotto \( T_{CIR_{t-1}}^{R_{t-1}} \cdot T_{CIR_t}^{CIR_{t-1}} \cdot T_{R_t}^{CIR_t}=T_{R_t}^{R_{t-1}} \), ma a noi serve \( T_{R_t}^0 \), che poi chiamiamo anche \( T_{R_t}^W \), dove W sta per world.

Ci serve quindi il passo 3 della risposta che avevo dato ieri o ieri l'altro: il prodotto della matrice "one-period" (\( T_{R_t}^{R_{t-1}} \)) con il risultato del calcolo incrementale della pose del robot svolto nei periodi precedenti (\( T_{R_{t-1}}^W \)).

In riposta a Domenico Giorgio Sorrenti

Ri: Re: Ri: Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione

di Jacopo Carlo Adamoli -
Io dopo aver trovato la matrice di rototraslazione come moltiplicazione delle tre matrici elementari, che io chiamo MRT, la moltiplico per MR, ovvero la matrice 3x13 dei punti del robot che si aggiorna ad ogni passo del ciclo for, quindi la mi istruzione sarà MR=MRT*MR. Così facendo però il risultato che ottengo è quello che le avevo inviato in precedenza che risulta non corretto.
In riposta a Domenico Giorgio Sorrenti

Re: Ri: Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione

di Domenico Giorgio Sorrenti -

Scusi, mi deve seguire però, semmai mi dica che quello che io dico non va bene o non lo capisce, non vada però per la sua strada per poi chiedermi perché la sua strada non va bene...

In particolare, le dicevo che per disegnare il robot che si sposta nel mondo le serve partire dai punti del robot originali (nel sistema robot). Questi punti li moltiplica per la matrice che trasforma le coordinate di quei punti (noti dall'inizio, nel sistema robot) nelle coordinate nel sistema mondo (cambiano ad ogni periodo di simulazione, ogni atto di moto, perché il robot si muove). Faccia così, anche per decomporre il problema del disegno da quello della determinazione delle coordinate, del resto se moltiplica ad ogni periodo le coordinate per la matrice "sbagliata" per forza che non viene un disegno del movimento corretto.

Veniamo allora adesso al problema della determinazione delle coordinate: se le 3 matrici elementari sono ok ed il loro prodotto è pure ok, allora le manca un pezzo per avere la trasformazione del robot al tempo attuale rispetto al mondo. Questo pezzo è quello che è stato calcolato al tempo precedente come pose del robot al tempo attuale rispetto al mondo...

Spero adesso sia più chiaro, ma se non lo fosse chieda ancora! E tutti i suoi colleghi che pure non hanno la questione chiara chiedano pure loro. Mi raccomando di non consegnare orrori, chiedete una proroga.

In riposta a Domenico Giorgio Sorrenti

Ri: Re: Ri: Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione

di Jacopo Carlo Adamoli -
Ok finalmente ho capito, ho capito quale fosse lo stupido errore che commettevo e la ringrazio per la sua pazienza. Solo un'ultima cosa, il DoF che rappresenta l'orientamento va calcolato attraverso gli angoli di Eulero e sarebbe la rotazione che avviene attorno all'asse z, è esatto?
In riposta a Jacopo Carlo Adamoli

Re: Ri: Re: Ri: Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione

di Domenico Giorgio Sorrenti -

Dal momento che siamo nel piano, con un slo DoF di orientamento, c'è poco da scegliere su quali angoli di eulero... c'è un solo angolo. quello che chiedo è che partiate dalla matrice pose del robot al tempo t rispetto al mondo. da questa matrice dovete tirare fuori e stampare a video i 3DoF.

In riposta a Domenico Giorgio Sorrenti

Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione

di Luca Brandalese -

buongiorno professore 

vorrei un proroga per la consegna dell'esercitazione 1.

In riposta a Luca Brandalese

Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione

di Domenico Giorgio Sorrenti -

nessun problema, non so se mi faccio troppi scrupoli, ma già fate pochi interventi sul forum... ma per queste questioni personali vi invito a contattarmi via email istituzionale (nome.cognome@unimib.it)

In riposta a Domenico Giorgio Sorrenti

Re: Ri: Dubbi prima esercitazione

di Domenico Giorgio Sorrenti -

Questo è il percorso corretto con il file degli archi che vi ho dato... Notate nella seconda figura che alla prima curva la sagoma del robot resta invariata, è tutta la sagoma che cambia orientamento. Non consegnate se non avete questi risultati. Avere questi risultati è una condizione necessaria per la sufficienza, una condizione sufficiente per la sufficienza però richiede anche che il codice sia "da robotici", non "da pasticcioni cui è andata bene". "da robotici" significa che dentro al codice si vedono le matrici, che queste hanno elementi ragionevoli e che la loro composizione è ragionevole.

pecorso corretto

ingrandimento prima curva percorso corretto