ELAI S.r.l.

Insegnare la punta al robot: perché molte pose possono non bastare

Una punta resta sullo stesso punto, ma il suo offset può rimanere indeterminato. Geometria, rango e rumore spiegati con una calibrazione TCP sintetica.

Insegnare la punta al robot: perché molte pose possono non bastare

Il problema: la flangia non è la punta

Un robot conosce la posizione della propria flangia, la superficie su cui è montato l’utensile. Per portare una punta su un foro deve conoscere anche lo spostamento dalla flangia alla punta. Un metodo intuitivo consiste nel tenere la punta sullo stesso riferimento e cambiare orientamento dell’utensile. Ma raccogliere quattro, dieci o cento pose garantisce di aver trovato lo spostamento corretto? No: conta quali movimenti rendono visibili le coordinate sconosciute, non soltanto quante righe contiene il file.

Abstract. Ricaviamo un modello lineare della calibrazione del Tool Center Point, abbreviato TCP: qui riguarda solo la posizione della punta, non l’orientamento completo dell’utensile. Costruiamo un caso con residuo quasi nullo ma errore di 225 mm sulla coordinata verticale, poi un caso identificabile ma molto sensibile al rumore. Infine confrontiamo geometrie con 20.000 repliche sintetiche. Non sono prove su un robot, né una ricostruzione dell’algoritmo interno di un produttore; sono calcoli che spiegano che cosa rende informativa una misura.

Due sistemi di riferimento, una sola punta

Chiamiamo t il vettore dalla flangia alla punta, espresso negli assi della flangia. È costante se l’utensile è rigido e non si sposta nel fissaggio. Nella posa i, Rᵢ è la matrice di rotazione che porta quei vettori negli assi della base; pᵢ è la posizione della flangia nella base. Il punto fisso c è anch’esso espresso nella base ed è inizialmente sconosciuto. Le tre posizioni t, p e c sono in millimetri; R contiene numeri senza unità. La punta nella base si ottiene prima ruotando t, poi aggiungendo pᵢ.

Rᵢ t + pᵢ = c [Rᵢ −I] [t; c] = −pᵢ

La prima riga dice che ogni posa deve riportare la medesima punta sul medesimo punto. Nella seconda abbiamo spostato c a sinistra e p a destra: è la stessa relazione, organizzata per risolvere sei incognite, tre di t e tre di c. I è la matrice identità, che lascia invariato un vettore. Impilando le relazioni di tutte le pose otteniamo Hx=b, con x=[t;c]. Quattro pose danno dodici equazioni, ma dodici equazioni non significano necessariamente dodici informazioni diverse.

Un esempio completo senza rumore

Scegliamo t=(30,−20,150) mm e c=(500,200,300) mm. Sono valori sintetici noti al generatore dei dati, ma nascosti alla procedura di stima. Per ogni rotazione costruiamo pᵢ=c−Rᵢt, così la punta resta esattamente ferma. Con R=I otteniamo p=(470,220,150). Ruotando di 90° intorno all’asse z, R t=(20,30,150) e p=(480,170,150). Il dato cambia, ma la componente verticale del vettore ruotato rimane 150: questo dettaglio annuncia il problema.

Completiamo quattro pose con rotazioni z di 0°, 90°, 180° e 270°. Se aggiungiamo 100 mm sia a t_z sia a c_z, tutte le posizioni pᵢ restano identiche. Infatti ogni rotazione intorno a z lascia invariato il vettore (0,0,100). Non esiste un esperimento statistico che distingua quei due utensili usando soltanto queste equazioni: i dati non contengono quella differenza. Questo si chiama non identificabilità, e non si risolve chiedendo più precisione al calcolatore.

Un residuo nullo può accompagnare un risultato sbagliato

Il residuo è Hx−b: misura quanto la soluzione ricostruisce i dati di calibrazione. Risolvendo il sistema con i minimi quadrati NumPy otteniamo t=(30,−20,−75) mm, con norma del residuo circa 3,4×10⁻¹³ mm. La coordinata z è distante 225 mm dalla verità, ma i dati sono riprodotti quasi perfettamente. La procedura sceglie una soluzione di norma minima tra infinite soluzioni: è una convenzione matematica, non una conoscenza fisica della lunghezza dell’utensile.

Il rango di H conta quante combinazioni indipendenti delle incognite sono vincolate. Qui è cinque invece di sei: manca una direzione. Ripetere cento volte le stesse pose non cambia il rango; può ridurre rumore nelle direzioni già osservabili, ma non rivelare quella assente. Con quattro pose tutte identiche il rango scende a tre: conosciamo solo la differenza tra punta ruotata e punto fisso. Il numero delle misure e la loro diversità sono risorse diverse.

Essere identificabile non significa essere stabile

Possiamo rendere il sistema di rango sei aggiungendo rotazioni intorno ad assi diversi. Ma una differenza piccolissima tra le pose può lasciare un problema quasi indistinguibile da quello precedente. Confrontiamo due gruppi di quattro orientamenti: identità più rotazioni di 1° intorno a x, y e z; identità più rotazioni di 90° intorno agli stessi assi. Sono costruzioni matematiche, non istruzioni per muovere un robot reale. Raggiungibilità, collisioni, contatto e limiti meccanici non sono rappresentati nel modello.

Per capire la sensibilità scomponiamo H in tre operazioni: ruotare le coordinate delle incognite, moltiplicare ciascuna direzione per un fattore e ruotare nelle coordinate dei dati. Questa è la decomposizione ai valori singolari, SVD. Un fattore nullo significa che una direzione scompare dai dati; un fattore molto piccolo significa che quella direzione lascia una traccia debolissima. Ricostruire l’incognita richiede dividere per quel fattore e amplifica anche gli errori presenti nella traccia.

H = U Σ Vᵀ x̂ = Σⱼ vⱼ (uⱼᵀ b) / sⱼ (sⱼ > 0) κ₂(H) = s_max / s_min (rank H = 6)

Le colonne uⱼ e vⱼ indicano le direzioni dei dati e delle incognite; sⱼ sono i valori singolari, senza unità in questa parametrizzazione. La somma ricostruisce la soluzione lungo le direzioni osservate. Se una direzione manca, ometterla produce la soluzione di norma minima, non una misura della coordinata mancante. Il numero di condizionamento κ confronta il fattore maggiore con il minore: vale circa 205 con rotazioni di 1° e 2,22 con quelle di 90°. Non è una precisione in millimetri, né un punteggio universale: dipende dalla matrice, dalle unità e dalla parametrizzazione scelte.

Quanto rumore viene amplificato?

Introduciamo un errore gaussiano indipendente in ciascuna coordinata di p, con media zero e deviazione standard di 0,2 mm. Le rotazioni restano perfette. Per ciascuna delle due geometrie identificabili generiamo 20.000 calibrazioni; in ogni replica risolviamo tutte le pose insieme. Misuriamo la radice della media del quadrato della distanza tra punta stimata e punta vera: RMSE tridimensionale, in millimetri. Non va confusa con l’errore massimo o con la deviazione standard di una singola coordinata.

OrientamentiRangoκ₂RMSE punta (mm)
I × 43∞—
Rz(0°,90°,180°,270°)5∞—
I, Rx(1°), Ry(1°), Rz(1°)6204.98716.6504
I, Rx(90°), Ry(90°), Rz(90°)62.215250.220980

Con piccole rotazioni, due decimi di millimetro nelle coordinate della flangia si trasformano in circa 16,65 mm di errore quadratico medio sulla punta; con orientamenti diversificati, circa 0,221 mm. È un risultato della geometria e del modello sintetico, non un rapporto di miglioramento trasferibile a qualsiasi robot. I trattini indicano casi non identificabili, per i quali non riportiamo una precisione inventata. Il generatore NumPy usa seed 20260929, prima la geometria a piccoli angoli e poi quella diversificata; codice, versioni e risultati sono scaricabili.

A sinistra i sei valori singolari: uno zero indica una direzione invisibile. A destra RMSE sintetico della punta, con asse logaritmico in mm: barre dieci volte più alte in valore sono separate da un intervallo uguale. Non sono misure su hardware.
A sinistra i sei valori singolari: uno zero indica una direzione invisibile. A destra RMSE sintetico della punta, con asse logaritmico in mm: barre dieci volte più alte in valore sono separate da un intervallo uguale. Non sono misure su hardware.

Possiamo anche prevedere la dispersione senza simulare. Con H esatta, rango sei e rumore indipendente di varianza σ², la covarianza della stima è σ²H⁺(H⁺)ᵀ, dove H⁺ è la pseudoinversa. La radice dei primi tre elementi diagonali dà la deviazione standard delle coordinate della punta. Otteniamo circa 9,588 mm per coordinata nel caso a piccoli angoli e 0,1277 mm nel caso diversificato: le dispersioni osservate nelle repliche sono coerenti. La distanza tridimensionale combina le tre componenti, perciò il suo RMSE è maggiore della deviazione di una sola coordinata.

La stessa formula non autorizza a dichiarare incertezza nulla nella direzione mancante di un sistema di rango cinque: la pseudoinversa ha scelto una convenzione per quella direzione, mentre i dati non la vincolano. Inoltre, se sono incerte anche le rotazioni, è H a essere rumorosa e non soltanto b. Il semplice modello precedente non basta più. Un piccolo errore angolare produce uno spostamento della punta che cresce con la distanza dalla flangia; utensili lunghi rendono questo limite particolarmente rilevante.

Dal sistema lineare a una verifica credibile

Il codice usa minimi quadrati tramite una decomposizione numericamente stabile. Scrivere esplicitamente l’inversa di HᵀH è meno prudente: il condizionamento della matrice dei prodotti è il quadrato di quello di H e può aggravare la perdita di precisione. Con m pose e sei incognite, la matrice ha 3m righe e sei colonne; una fattorizzazione densa costa nell’ordine di m·6² operazioni, trascurando costanti. In questo problema piccolo, la geometria informativa conta normalmente più del risparmio di poche moltiplicazioni.

Il confronto utile è con metodi che aggiungono informazione fisica. Se c è misurato indipendentemente, una singola posa permette formalmente t=Rᵀ(c−p), perché una rotazione si inverte trasponendola. Ma l’incertezza della misura di c resta nel risultato: non abbiamo ottenuto precisione gratuita. Se imponiamo una lunghezza nota o una regolarizzazione, restringiamo le soluzioni grazie a un vincolo esterno. Bisogna dichiararlo e verificarlo, altrimenti si attribuisce alla calibrazione informazione proveniente da un’ipotesi.

Una verifica sul dispositivo dovrebbe usare pose diverse da quelle impiegate nella stima e, quando possibile, un riferimento metrologico indipendente. Servirebbe separare ripetibilità, cioè dispersione di prove ripetute, e accuratezza rispetto a un riferimento; quantificare deformazione dell’utensile, gioco nel fissaggio, slittamento sul punto e incertezza della cinematica del robot. Queste verifiche sono proposte, non eseguite qui. Un residuo basso sulle pose usate per adattare il modello resta un controllo interno: non è una certificazione di precisione né di sicurezza.

La documentazione Universal Robots consultata descrive l’apprendimento della posizione TCP con tre o quattro posizioni e orientamenti differenti sullo stesso punto, e segnala il problema di pose insufficientemente diverse. Questo sostiene la rilevanza pratica della domanda, ma non prova che il produttore usi esattamente il nostro modello, il nostro risolutore o la nostra gestione del rumore. Abbiamo analizzato un modello esplicito e riproducibile, non validato un prodotto commerciale.

Che cosa abbiamo imparato sulla punta

Molte pose non bastano se raccontano tutte la stessa informazione. Per determinare la punta occorrono variazioni che rendano osservabili tutte le coordinate; per determinarla in modo stabile, quelle variazioni devono anche lasciare tracce sufficientemente grandi rispetto agli errori di misura. Il nostro esempio ha separato tre domande spesso confuse: esiste una soluzione unica, quanto è sensibile al rumore, e quanto è affidabile sul dispositivo? Rango, condizionamento e validazione indipendente rispondono rispettivamente a queste domande, senza sostituirsi l’uno all’altro.

Per EL-AI, la robotica industriale e collaborativa è una direzione che l’azienda intende esplorare. Questa monografia contribuisce alla comprensione del problema: non annuncia un servizio di calibrazione, un’installazione o risultati sperimentali aziendali. Il caso resta aperto sul piano applicativo proprio dove il modello ideale termina: qualità dei riferimenti, incertezza angolare e verifica della punta nelle condizioni di lavoro reali.

Fonti e riproducibilità

Universal Robots — PolyScope X, SW10.12, Teaching TCP Position.

Il programma seguente riproduce il controesempio con rotazioni intorno a un solo asse. Rᵀ non compare perché risolviamo tutte le pose impilate; lstsq restituisce anche il rango, che qui vale cinque. L’archivio contiene inoltre l’esperimento completo, le 20.000 repliche per geometria, il codice delle figure e i risultati. Le espressioni e gli esempi sono un’analisi didattica svolta qui, non risultati originali sottoposti a peer review.

import numpy as np
I = np.eye(3)
Rz = np.array([[0.,-1,0],[1,0,0],[0,0,1]])
t = np.array([30.,-20,150]); c = np.array([500.,200,300])
Rs = [I, Rz, Rz@Rz, Rz@Rz@Rz]
H = np.vstack([np.hstack([R,-I]) for R in Rs])
b = -np.concatenate([c-R@t for R in Rs])
x, _, rank, _ = np.linalg.lstsq(H,b,rcond=None)
print("rank:", rank, "estimated tip mm:", x[:3])
print("residual mm:", np.linalg.norm(H@x-b))
# Zero residual does not identify the missing direction.

Codice, dati e istruzioni · JSON. Calcoli didattici eseguiti con Python 3.14.0; figure con Matplotlib 3.11.2. Analisi con assistenza AI, senza dichiarare peer review o revisione umana. Copertina originale ImageGen, illustrativa: non documenta persone, sedi o installazioni EL-AI. Fonti consultate il 29 settembre 2026.