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
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.
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?
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.
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];
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
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.
comunque, a parte il fatto che io avrei compilato la matrice elemento per elemento (ma questo non cambia il risultato), a prima vista mi sembra corretta.
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.
io inizializzo così "la canvas grafica":
h=axes; xlim(h,[-20 +20]) ylim(h,[-20 +20]) axis equal
io ho questo problema che riguarda la parte di curva per il robot che non capisco cosa sbaglio nel fare la traslazione
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".
Ri: Re: Ri: Dubbi prima esercitazione
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
Ri: Re: Ri: Dubbi prima esercitazione
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.
Ri: Re: Ri: Dubbi prima esercitazione
Re: Ri: Re: Ri: Dubbi prima esercitazione
- 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?)
- 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.
- 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".
- 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).
per tutti: per favore, NON CONSEGNATE SCHIFEZZE, chiedete una proroga, anche più volte!
Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione
Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione
- 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!
- 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.
- 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").
- 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).
- per disegnare il robot rispetto al mondo le manca il passaggio al punto 3 del mio ultimo messaggio.
Ri: Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione
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
Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione
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).
Ri: Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione
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
Re: Ri: Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione
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 \)).
Ri: Re: Ri: Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione
Re: Ri: Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione
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.
Ri: Re: Ri: Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione
Re: Ri: Re: Ri: Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione
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.
Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione
buongiorno professore
vorrei un proroga per la consegna dell'esercitazione 1.
Re: Ri: Re: Ri: Re: Ri: Dubbi prima esercitazione
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)
Re: Ri: Dubbi prima esercitazione
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.