Simulatore di braccio robotico: cinematica e ROS
Esplora limiti dei giunti, cinematica diretta e inversa e pianificazione sicura del movimento in un'anteprima del simulatore di braccio robotico nel browser.
- Categoria
- ROS
- Tempo
- 3–6 ore
- Piattaforma
- Browser · ROS 2
01 / Inizia qui
Introduzione
I bracci robotici trasformano i comandi dei giunti in un movimento preciso dell'utensile mediante geometria, retroazione e pianificazione. Questo simulatore introduce quella catena senza nascondere le parti difficili. Espone sistemi di riferimento, pose raggiungibili, limiti dei giunti e singolarità, così chi usa ROS e chi studia la robotica può capire perché un movimento richiesto riesce o fallisce.
Live lab / Forward & inverse kinematics · pick-and-place
Robot arm simulator
Pose the joints, drag a target and watch inverse kinematics solve it live, or set a pick-and-place task and run it — with honest reach, singularity, and limit reporting on a full 360° workspace.
The filled dot is the base at the centre; segments are links with round joints; the tool shows a small x/y frame. The shaded ring is the reachable workspace (between the two dashed circles). In inverse mode the cross-marker is the draggable target and the faint arm is the other elbow solution. In pick-and-place mode, drag the box (pick) and the dashed square (place), then press Run.
- Tool X
- 0 px
- Tool Y
- 0 px
- Tool angle
- 0°
- Status
- Reachable
- Reach
- 0 / 240 px
Keyboard: focus the workspace, then use Space to run a pick-and-place, R to reset, B to switch elbow, and F for full screen.
Controlli
Il simulatore fornisce cursori per i giunti, un bersaglio utensile trascinabile, sovrapposizioni di sistemi di riferimento e controlli delle dimensioni dei link, con la base centrata in modo che l’intero spazio di lavoro raggiungibile a 360° sia visibile. La modalità diretta calcola la posizione dell’utensile dagli angoli dei giunti impostati. La modalità inversa segue un bersaglio che trascini: risolve gli angoli dei giunti in tempo reale e segnala bersagli irraggiungibili o ambigui invece di spostarsi silenziosamente su un risultato. Una terza modalità di prelievo e posizionamento ti permette di posizionare un punto di raccolta e una destinazione, poi esegue l’intero compito: il braccio si muove verso l’oggetto, lo afferra, lo trasporta e lo rilascia nell’area di rilascio, il lavoro canonico per cui è costruito ogni manipolatore reale.
Teoria
Ogni giunto contribuisce con una trasformazione tra sistemi di riferimento. Moltiplicando queste trasformazioni dalla base all’utensile si ottiene la posizione cinematica diretta. La cinematica inversa lavora al contrario e può non avere soluzioni, averne una o averne diverse.
Vicino a una singolarità un piccolo movimento dell’utensile può richiedere un movimento enorme dei giunti. Un pianificatore deve inoltre rispettare i limiti di posizione, velocità, accelerazione, coppia e collisione. La sola raggiungibilità geometrica non rende sicura una traiettoria.
Algoritmo
- Definisci lunghezze dei link, assi dei giunti, trasformazioni iniziali e limiti dei giunti.
- Calcola la cinematica diretta per lo stato corrente dei giunti.
- Confronta la posizione corrente dell’utensile con il bersaglio richiesto.
- Usa un risolutore analitico o numerico per ridurre l’errore di posizione entro i limiti.
- Scarta i candidati in collisione o singolari e seleziona una soluzione continua.
- Parametrizza il percorso nel tempo e invia valori di riferimento sincronizzati ai controllori dei giunti.
Codice sorgente
Un braccio piano a due link ha un modello diretto compatto:
from math import cos, sin
def forward_kinematics(theta_1, theta_2, link_1, link_2):
elbow = (link_1 * cos(theta_1), link_1 * sin(theta_1))
tool = (
elbow[0] + link_2 * cos(theta_1 + theta_2),
elbow[1] + link_2 * sin(theta_1 + theta_2),
)
return elbow, tool
Per i bracci fisici, valida ogni traiettoria pianificata in un ambiente limitato e sensibile alle collisioni prima di abilitare l’alimentazione degli attuatori.
Ipotesi e differenze hardware
Il braccio è piano, con due o tre giunti rotativi, link perfettamente rigidi, risposta di velocità istantanea e nessuna gravità, dinamica o collisione: puoi passare da gomito in alto a gomito in basso senza limite di coppia. I servomotori reali hanno limiti di posizione e velocità, gioco di inversione del riduttore, coppia limitata dalla corrente e cedimento dipendente dal carico; inoltre un braccio a 6 assi deve gestire anche orientamento, singolarità e lavoro vicino ai limiti dei giunti. Questo laboratorio ti fa capire perché un bersaglio dentro l’anello può avere due soluzioni e perché un bersaglio sul bordo è singolare, prima di aggiungere le dinamiche che rendono difficili da mantenere quelle pose.
Schema elettrico
Separa l’alimentazione degli attuatori ad alta corrente da quella di calcolo, mantenendo i segnali di riferimento e sicurezza richiesti dall’hardware selezionato.
Esperimenti guidati
Trascinare un bersaglio è il modo più rapido per costruire l’intuizione su cose noiose da dimostrare su carta e costose da scoprire sull’hardware.
1. Trova la forma dello spazio di lavoro
Trascina lentamente il bersaglio verso l’esterno finché il risolutore non lo segnala irraggiungibile, poi segui quel bordo per tutto il giro. Ora trascinalo verso l’interno, in direzione della base.
Con lunghezze dei link diverse troverai due bordi: un cerchio esterno a L1 + L2 e uno interno a |L1 − L2|. Lo spazio di lavoro è un anello, non un disco, e al centro c’è un buco che il braccio non può raggiungere fisicamente.
| Link | Portata esterna | Buco interno | Forma |
|---|---|---|---|
| 100 + 90 | 190 | 10 | Anello con un piccolo buco |
| 100 + 50 | 150 | 50 | Anello con un grande buco |
| 100 + 100 | 200 | 0 | Un disco pieno: link uguali possono ripiegarsi su sé stessi |
L’ultima riga è un fatto di progettazione davvero utile: lunghezze uguali dei link eliminano completamente la zona morta. Se il tuo braccio deve lavorare vicino alla propria base, è questo il motivo per sceglierle.
2. Osserva le due soluzioni fondersi
Alterna tra i rami con gomito in alto e gomito in basso su un bersaglio vicino al centro dello spazio di lavoro: due pose del braccio chiaramente diverse che raggiungono lo stesso punto.
Ora trascina quel bersaglio verso l’esterno, in direzione del bordo. Le due pose convergono e, con l’estensione completa, diventano la stessa posizione. Questa è una singolarità, il punto in cui il braccio perde la possibilità di muovere l’utensile in una direzione, qualunque cosa facciano i giunti.
3. Senti quanto costa una singolarità
Trascina il bersaglio lungo una retta che passa vicino all’estensione completa, lentamente e con costanza. Osserva gli angoli dei giunti, non il braccio.
L’utensile si muove a velocità costante; i giunti no. Vicino al bordo un piccolo movimento dell’utensile richiede un movimento enorme dei giunti, quindi un percorso cartesiano fluido diventa un movimento brusco dei giunti. Sull’hardware questo è un servomotore che si porta al limite.
Mantieni i percorsi pianificati entro circa il 95% della portata massima e il problema scompare.
4. Attraversa il bordo di un ramo e osserva il salto
Imposta il risolutore perché scelga sempre il gomito in alto, poi trascina il bersaglio attraverso una regione in cui quel ramo incontra un limite del giunto e il risolutore cambia ramo. Il braccio compie un movimento ampio, rapido e completamente non pianificato.
Ecco perché il valore predefinito corretto è il movimento minimo: scegli il ramo più vicino alla posizione corrente, invece di scegliere sempre un ramo fisso. Un cambio di ramo silenzioso a metà percorso sull’hardware reale è allarmante e può essere distruttivo.
Cosa devi osservare
| Azione | Risultato previsto | Se vedi qualcos’altro |
|---|---|---|
Bersaglio oltre L1 + L2 |
Un chiaro «irraggiungibile» | Un NaN o uno scatto nella posizione significa che il risolutore verifica la raggiungibilità troppo tardi |
Bersaglio dentro |L1 − L2| |
Anch’esso irraggiungibile | Corretto: è il buco, non un bug |
| Bersaglio dietro la base | Raggiunto correttamente | Se viene riflesso, stai usando atan invece di atan2 |
| Alterna il ramo del gomito | Stessa posizione dell’utensile, giunti diversi | Entrambe sono valide; la scelta è tua |
| Trascina verso il bordo | Le velocità dei giunti aumentano bruscamente | Questa è la singolarità |
| Percorso di andata e ritorno con FK e poi IK | Gli angoli originali tornano indietro | Una discrepanza indica una convenzione di segno o offset incoerente |
Passaggio all’hardware
La geometria si trasferisce esattamente. Nient’altro, e il divario è dove il primo braccio costruito passa il tempo:
| Questo laboratorio | Un vero braccio con servomotori |
|---|---|
| I giunti vanno esattamente dove comandi | Il punto zero del servomotore è dove è stata montata la leva; alcuni ruotano nel verso opposto |
| Nessuna gravità | La spalla cede quando il braccio è esteso, peggio proprio dove serve più precisione |
| Nessun gioco di inversione | Diversi gradi di gioco, accumulati a ogni inversione |
| Movimento istantaneo | Un comando a gradino avviene alla velocità massima, con un picco di corrente |
| Lunghezze dei link perfette | Misura tra gli assi dei giunti, non tra i bordi delle staffe |
| Coppia infinita | Un SG90 al 58% della coppia di stallo non mantiene la posizione con precisione |
Due numeri rendono il punto. Quattro gradi di gioco alla spalla su una portata di 190 mm corrispondono a più di 13 mm alla pinza: un errore maggiore di qualsiasi errore introdotto dalla matematica. E una lunghezza di link misurata 10 mm più lunga su un link di 95 mm è un errore sistematico del 10% che nessuna regolazione rimuoverà.
La conseguenza pratica è che la precisione sull’hardware deriva da calibrazione e direzione di avvicinamento coerente, non da una cinematica migliore. Avvicinati sempre a un bersaglio dalla stessa direzione: il gioco di inversione diventa uno scostamento riproducibile che puoi sottrarre. Il risolutore completo, con tutti i casi di errore gestiti, è in cinematica inversa per un braccio a due link.
Checklist hardware
Componenti
- Braccio robotico a tre o più assi
- Controllore in grado di aggiornare i giunti in modo sincronizzato
- Retroazione dei giunti o servomotori intelligenti
- Base rigida e punto centrale dell'utensile definito
- Arresto di emergenza e alimentazione con limitazione di corrente
Esplora il grafo
Dove si usa questo simulatore
I progetti, i percorsi di apprendimento e i tutorial che si basano su questo laboratorio.
Continua a costruire
Scarica le risorse
Usa questi riferimenti nella pagina mentre lavori al progetto. I pacchetti di progetto scaricabili verranno aggiunti solo dopo la pubblicazione del loro codice sorgente e della loro versione.
Domande comuni
Domande frequenti
Qual è la differenza tra cinematica diretta e cinematica inversa?
La cinematica diretta calcola la posizione dell'utensile a partire dai valori noti dei giunti. La cinematica inversa parte da una posizione desiderata dell'utensile e cerca una o più configurazioni dei giunti che possano produrla.
Perché un braccio a 2 link ha due soluzioni, gomito in alto e gomito in basso?
Per la maggior parte degli obiettivi raggiungibili il gomito può piegarsi in entrambe le direzioni e comunque posizionare l'utensile nello stesso punto, dando una configurazione con gomito in alto e una con gomito in basso. Le due soluzioni derivano dal più o meno nel teorema del coseno per il secondo giunto. Coincidono solo in una singolarità, quando il braccio è completamente esteso o completamente piegato.
Come scelgo tra gomito in alto e gomito in basso?
Scegli la configurazione più sicura ed efficiente per il compito: quella che mantiene i giunti lontani dai loro limiti, riduce il movimento dalla posizione attuale o evita gli ostacoli. Questo simulatore ti permette di alternare i rami e mostra la soluzione alternativa come una posizione fantasma, così il compromesso è visibile.
Che cos'è una singolarità in un braccio robotico?
Una singolarità è una configurazione in cui il braccio perde la possibilità di muovere l'utensile in una direzione, in genere quando è completamente esteso o completamente piegato. Vicino a una singolarità un piccolo movimento dell'utensile può richiedere un movimento enorme dei giunti, quindi i pianificatori rallentano o aggirano queste pose. È anche il punto in cui le soluzioni con gomito in alto e in basso si fondono in una sola.
Quando la cinematica inversa non ha soluzioni?
Un bersaglio piano di un braccio a due link è raggiungibile solo all'interno dell'anello compreso tra la portata minima, data dalla differenza delle lunghezze dei link, e quella massima, data dalla loro somma. Un punto esterno a quell'anello non è raggiungibile con alcun angolo dei giunti. Una posizione può essere irraggiungibile anche perché richiede un angolo di giunto vietato, un orientamento che i giunti disponibili non possono ottenere o una configurazione che colliderebbe con il braccio stesso.
Perché usare la cinematica inversa analitica invece di un risolutore numerico?
Per un braccio piano a due o tre link la geometria ha una soluzione in forma chiusa, analitica, quindi puoi calcolare direttamente gli angoli esatti dei giunti in modo deterministico e rapido: ideale per insegnare e testare. I risolutori numerici servono per bracci ridondanti o spaziali in cui non esiste una forma chiusa, ma iterano, possono perdere soluzioni e sono più difficili da analizzare.
Per approfondire
Fonti
Fonti autorevoli per andare oltre il modello didattico, volutamente limitato, di questo simulatore.