Section outline

    • file pdf con sketch dei punti del robot (x forward, y leftward).

    • punti del robot nel sistema robot con asse x in avanti ed y verso sinistra (guardando il piano del robot dall'alto), fare cut&paste in mlab.

    • archi percorsi, costruiti un insieme di medesimi atti di moto alla volta. fare cut&paste in mlab.

    • La deadline per la consegna di questo esercizio è Domenica 1 alle 23:59.

      La valutazione verrà fatta non solo sulla funzionalità dimostrata dal codice, ma anche sulla sua leggibilità, anche in termini di commenti.

      Il codice dovrà calcolare la trasformazione one-period per ogni passo (combinando le "trasformazioni elementari") e quella globale per disegnare il robot nella nuova pose, senza cancellare il disegno precedente. Successivamente all'ultimo disegno dovrà stampare a video l'ultimo valore dei gradi di libertà. Il codice opererà partendo dagli archi (archi.m).

      Chi avesse delle difficoltà a consegnare nei tempi mi contatti via email per una proroga individuale.

      1. predisponete il vostro (unico!) file matlab;
      2. inserite nome, cognome, matricola e data in un commento nella prima riga del file;
      3. come nome del file usate "nome_cognome_matricola_lab1.m";
      4. fino a che non eseguite la "consegna" potrete modificarla, ma non dimenticatevi di eseguire la consegna finale.
    • Questa è una banale consegna di un testo che dovrà descrivere:

      1. le 2 modalità di disegno 3D messe a disposizione da patch;
      2. la motivazione di quale sia, a vostro parere, la scelta migliore;

      La ragione di una consegna così banale sta nel fatto che in passato ci sono stati casi di studenti che hanno cercato di usare "patch" senza guardarne prima la documentazione.

      La deadline per la consegna è per ora impostata a dddddd dd.mm.2022 alle 23:59.

      PS: si prega di NON dedurre che sia importante nella vita conoscere la funzione patch di mlab!

    • Il .m da sviluppare dovrà chiedere all'utente: di definire le dimensioni (larghezza - x, lunghezza - y ed altezza - z) di un parallelepipedo, si suggerisce di usare dimensioni molto diverse sui 3 assi, così da poterli distinguere visivamente.

      Successivamente dovrà effettuare:

      • il disegno del sistema di riferimento del corpo, considerando che il sistema di riferimento del corpo viene messo nel centro della faccia inferiore con l'asse z lungo l'altezza; inizialmente il sistema di riferimento del corpo coincide con il sistema di riferimento del mondo (usate pure la convenzione x-y-z => r-g-b);
      • il disegno del parallelepipedo.

      Poi dovrà chiedere all'utente:

      • se vuole effettuare una trasformazione rigida rispetto agli assi world oppure body;
      • di definire i parametri della roto-traslazione (gli angoli vanno chiesti all'utente in degs, please).

      Dovrà quindi:

      • effettuare il disegno degli assi del corpo e del parallelepipedo nella nuova pose (lasciando disegnato il sistema di riferimento ed il parallelepipedo nella pose precedente);
      • chiedere all'utente se vuole effettuare un'altra trasformazione e poi tornare in ciclo oppure uscire, a seconda delle risposta.

      Al termine, quando l'utente avrà risposto negativamente alla domanda se vuole effettuare ulteriori roto-traslazioni, il programma dovrà stampare a schermo i 6 DoF della pose finale nelle 2 seguenti versioni (gli angoli in degs, please):

      • [x,y,z,α,β,γ], con α,β,γ angoli di Eulero1 (Z Y' Z'');
      • [x,y,z,α,β,γ], con α,β,γ angoli di Eulero3 (roll pitch yaw).

      La deadline per la consegna è impostata a domenica 15.05.2022 alle 23:59.

    • Il .m da sviluppare dovrà chiedere all'utente di definire le dimensioni di un parallelepipedo "basamento". Si suggerisce di usare dimensioni molto estese sui 2 assi x (larghezza) ed y (lunghezza) ed una dimensione ridotta sulla z (altezza), cosicché questo parallelepipedo costituisca anche visivamente il basamento su cui viene costruito il resto del sistema. Lasciate il sistema di riferimento sullo spigolo del parallelepipedo come avviene di default con matlab (ovvero mettete tutta la larghezza, lunghezza ed altezza sui semiassi positivi). Successivamente il programma dovrà effettuare il disegno del basamento.

      Dovrà quindi essere chiesta all'utente una traslazione ed un orientamento (con RPY, angoli in degs) tra il sistema OXYZb ed il sistema di riferimento OXYZ0, quello attorno il cui (o lungo il cui) asse z ha luogo il movimento prodotto dal giunto 1 (la vita, per un braccio antropomorfo). Successivamente dovrà essere disegnato anche il sistema di riferimento OXYZ0. Questa interazione con l'utente seguita da disegno del sistema di riferimento OXYZ0 dovrà essere replicata finché l'utente non risulti soddisfatto delle sue scelte (ad ogni ripetizione del ciclo interazione - disegno si dovrà cancellare il disegno precedente).

      A questo punto il programma dovrà chiedere all'utente di definire un secondo parallelepipedo, che costituirà il "link0" (il torso, per un antropomorfo). Questo parallelepipedo verrà definito nel sistema di riferimento OXYZ0 come segue: all'utente verrà chiesta x (larghezza), y (lunghezza) e z (altezza); l'origine del sistema di riferimento del link0 sarà nel centro della faccia inferiore della base del parallelepipedo (larghezza - lunghezza); in altre parole metà larghezza sarà nel semiasse positivo e metà nel negativo e lo stesso accadrà per la lunghezza, mentre la altezza sarà tutta nel semiasse positivo delle z. Tutto il parallelepipedo (link0) sarà poi traslato rispetto al sistema OXYZ0 chiedendo all'utente le quantità di traslazione su x0, y0 e z0, che devono poter anche essere negative. Il link0, essendo solidale con OXYZ0, dovrà successivamente essere movimentato quando si muoverà il giunto 1. Successivamente dovrà essere effettuato il disegno dei 2 parallelepipedi (basamento e link0) nelle loro pose. Questa interazione con l'utente seguita da disegno per il link0 dovrà essere replicata finché l'utente non risulti soddisfatto delle sue scelte (ad ogni ripetizione del ciclo interazione - disegno si dovrà cancellare il disegno precedente). Non è importante che il link0 sia coerente con le dimensioni del basamento, se anche si compenetrassero o restassero spaziati sarebbero problemi dell'utente.

      A questo punto si chiederà all'utente se vuole muovere il giunto 1 e, se l'angolo richiesto dall'utente è diverso da 0, si effettuerà il disegno del basamento con link0 nella nuova pose. Quando l'utente richiederà un angolo nullo si procederà con le parti successive del programma.

      Il programma dovrà a questo punto chiedere all'utente di definire i parametri della pose 3D di un sistema di riferimento OXYZ1 rispetto al sistema OXYZ0 mediante i 4 parametri delle convenzioni DH (angoli in degs, please). Il sistema di riferimento OXYZ1 è quello attorno il cui (o lungo il cui) asse z ha luogo il movimento prodotto dal giunto 2 (la spalla, per un braccio antropomorfo). Successivamente dovrà essere disegnato anche il sistema di riferimento OXYZ1. Questa interazione con l'utente seguita da disegno dovrà essere replicata finché l'utente non risulti soddisfatto delle sue scelte (ad ogni ripetizione del ciclo interazione - disegno si dovrà cancellare il disegno precedente).

      A questo punto il programma dovrà chiedere all'utente di definire un terzo parallelepipedo, che costituirà il "link1" (il braccio, per un antropomorfo). Questo parallelepipedo verrà definito nel sistema di riferimento OXYZ1 come segue: all'utente verrà chiesta x (larghezza), y (lunghezza) e z (altezza); l'origine del sistema di riferimento del link1 sarà nel centro della faccia inferiore della base del parallelepipedo (larghezza - lunghezza); in altre parole metà larghezza sarà nel semiasse positivo e metà nel negativo e lo stesso accadrà per la lunghezza, mentre la altezza sarà tutta nel semiasse positivo delle z. Tutto il parallelepipedo (link1) sarà poi traslato rispetto al sistema OXYZ1 chiedendo all'utente le quantità di traslazione su x1, y1 e z1, che devono poter essere negative. Il link1, essendo solidale con OXYZ1, dovrà successivamente essere movimentato quando si muove il giunto 2. La variabile di giunto sarà di default "theta2"e non "d2", ma andrà chiesta conferma all'utente. Successivamente dovrà essere effettuato il disegno dei 3 parallelepipedi (basamento, link0 e link1) nelle loro pose. Questa interazione con l'utente seguita da disegno per il link1 dovrà essere replicata finché l'utente non risulti soddisfatto delle sue scelte (ad ogni ripetizione del ciclo interazione - disegno si dovrà cancellare il disegno precedente). Non è importante che il link1 sia coerente con le dimensioni del link0 e/o del basamento, se anche si compenetrassero o restassero spaziati sarebbero problemi dell'utente.

      A questo punto si chiederà all'utente se vuole muovere il giunto 1 e/o il giunto 2 e, se gli angoli richiesti dall'utente non fossero entrambi 0, si effettuerà il disegno del basamento con link0 e link1 nelle nuove pose. Quando l'utente richiederà angoli nulli si terminerà il programma.

      La deadline di consegna è impostata a domenica 05.06.2022 alle 23:59.