Guadagni:
- Capacità di impostare e risolvere problemi di cinematica diretta/inversa e di pianificazione della traiettoria con l'aiuto dell'intelligenza artificiale
- Capacità di produrre un'orbita sicura fornendo limiti articolari del robot, vincoli di velocità e accelerazione come contesto al prompt
- Capacità di verificare numericamente e fisicamente l'output cinematico e di traiettoria prodotto dall'IA
Portare la pinza all'estremità di un braccio robotico ad un certo punto nello spazio, con un certo orientamento; Sembra semplice, ma dietro ci sono equazioni cinematiche, limiti articolari, singolarità e pianificazione della traiettoria. Qui l'ingegnere meccatronico utilizza insieme trigonometria, algebra lineare e teoria del controllo. L’intelligenza artificiale è un potente aiuto in questo processo: può stabilire equazioni della cinematica diretta, suggerire approcci risolutivi per la cinematica inversa, parametrizzare una traiettoria in base a vincoli di velocità/accelerazione. Tuttavia, la robotica è uno dei settori della meccatronica con il rischio fisico più elevato; Se una sequenza angolare generata dall'intelligenza artificiale viene inviata al robot senza verifica, il braccio potrebbe colpire se stesso, l'ambiente o l'operatore. In questa unità vedremo come impostare e verificare la cinematica e la pianificazione della traiettoria con l'intelligenza artificiale.
Cinematica diretta e inversa
Cinematica diretta (FK): trovare la posizione e l'orientamento dell'effettore finale se gli angoli del giunto sono noti. La soluzione è una sola ed è diretta.
Cinematica inversa (IK): se la posizione desiderata della funzione finale è nota, trovare gli angoli articolari che la forniranno. Solitamente ha più di una soluzione (come gomito su/giù), a volte non ha soluzioni (punto irraggiungibile), a volte ha infinite soluzioni (singolarità).
concetto
ingresso
uscita
Numero di soluzioni
Cinematica diretta
angoli articolari
Posizione/orientamento estremo
singolo
Cinematica inversa
Posizione/orientamento estremo
angoli articolari
Multiplo/nessuno/infinito
Per un braccio planare a due articolazioni, la cinematica inversa può essere impostata nell'IA e verificata manualmente come segue:
import numpy as npdef inverse_kinematik_2r(x, y, L1, L2): """IK per braccio planare a 2 giunti. Restituisce angoli in radianti (soluzione gomito verso il basso).""" r2 = x**2 + y**2 # Controllo di accessibilità: il punto è nell'area di lavoro? if np.sqrt(r2) > (L1 + L2) or np.sqrt(r2) < abs(L1 - L2): raise ValueError("Il punto è fuori dallo spazio di lavoro accessibile") cos_t2 = (r2 - L1**2 - L2**2) / (2 * L1 * L2) cos_t2 = np.clip(cos_t2, -1.0, 1.0) # numericosicurezza t2 = np.arccos(cos_t2) # gomito verso il basso t1 = np.arctan2(y, x) - np.arctan2(L2*np.sin(t2), L1 + L2*np.cos(t2)) return np.degrees(t1), np.degrees(t2)# Validazione: L1=L2=1, target (1,1) -> previsto t2=90 gradistampa(cinema_inverso_2r(1.0, 1.0, 1.0, 1.0)) # ~ (0.0, 90.0)
Le linee critiche qui sono dove l'IA spesso salta: controllo di raggiungibilità (è il punto nell'area di lavoro) e `np.clip` (impedisce all'input arccos di andare oltre ±1 a causa di un errore di arrotondamento). Senza queste due protezioni, il codice produrrà NaN o si bloccherà in un punto non valido.
Suggerimento: quando si richiede la risoluzione IK, dire chiaramente all'IA di "aggiungere il controllo dell'accessibilità e limitare l'input arccos al clip". Queste due linee prevengono gli errori silenziosi che causano i maggiori grattacapi sul campo.
Limiti congiunti, singolarità e soluzioni multiple
Ciascun giunto di un robot reale ha un intervallo angolare (ad esempio da -170° a +170°), un limite di velocità e un limite di accelerazione. Anche se IK fornisce un angolo matematicamente valido, non può essere utilizzato se tale angolo è al di fuori dell'intervallo fisico dell'articolazione. Inoltre, in alcune configurazioni il robot cade nella singolarità: due assi sono allineati, un grado di libertà viene perso e le velocità articolari tentano di andare all'infinito per un piccolo movimento della punta.
Ecco perché la sola soluzione HR non è sufficiente; Ogni soluzione deve superare un filtro di accettabilità:
def soluzione_gecerli_mi(acilar_deg, limiti_deg): """dolori: [t1,t2,...], limiti: [(min,max),...]""" for dolore, (amin, amax) in zip(acilar_deg, limiti_deg): if not (amine <= dolore <= amax): return False, f"Limite articolare superato: {dolore:.1f} gradi ({amine},{amax}) tranne" return True, "OK"limits = [(-170, 170), (-120, 120)]print(cozum_valid_mi([0.0, 90.0], limiti)) # (True, 'OK')print(cozum_valid_mi([0.0, 150.0], limiti)) # (Falso, 'Limite comune superato...')
L'intelligenza artificiale può fornire la soluzione "matematica" di IK; ma i limiti congiunti e l'evitamento della singolarità sono specifici del tuo sistema e devono essere forniti come contesto al prompt.
Pianificazione dell'orbita
Portare il robot dal punto A al punto B non significa tracciare una linea retta tra due angoli. Il cambio improvviso di velocità crea shock meccanici e vibrazioni. Vengono invece utilizzati profili morbidi: profilo di velocità trapezoidale (accelerazione costante-velocità costante-decelerazione costante) o curva a S (più liscia, dove anche l'accelerazione è limitata). Quando si fa in modo che l'IA generi una traiettoria, è necessario fornire l'obiettivo, la durata e i vincoli.
import numpy as npdef trapez_yorung(q0, q1, v_max, a_max, dt=0.01): """Profilo di velocità trapezoidale per un singolo giunto. Viene restituito l'array di posizione.""" distance = abs(q1 - q0) direzione = np.sign(q1 - q0) t_speed = v_max / a_max distance_speed = 0.5 * a_max * t_speed**2 if 2 * distance_speed > distance: # profilo triangolare (v_max non raggiungibile) t_speed = np.sqrt(distance / a_max) t_constant = 0.0 v_peak = a_max * t_speed else: t_constant = (distance - 2 * distance_speed) / v_max v_peak = v_max T = 2 * t_accelerate + t_constant t = np.arange(0, T, dt) # ... calcolo della posizione per ogni t (basato sulle fasi di accelerazione/costante/decelerazione) return t, T, v_peak, durata, vz = trapezoidal_trajectory(0.0, 90.0, v_max=60.0, a_max=120.0)print(f"Durata totale: {duration:.3f} s, peak speed: {vz:.1f} deg/s")
La verifica logica qui è questa: se la distanza è breve, il motore non raggiungerà mai v_max e il profilo passerà da trapezoidale a triangolare. Se l'IA non rispetta questa condizione, verrà calcolata la durata errata per i movimenti brevi. Puoi verificarlo testando il codice con un valore noto (ad esempio, una distanza molto breve).
Prompt debole / Prompt forte
DEBOLE: "Scrivi una traiettoria che porta il braccio del robot da A a B." (Nessun vincolo: limite di velocità? insomma, rientra in un profilo triangolare. L'output di ogni giunto è Scrivere anche una funzione di verifica che controlli che non superi i limiti del giunto: {{table}}"
Verifica: dalla simulazione al robot
La traiettoria generata dall'IA viene verificata in questo ordine prima di raggiungere il robot:
- Numerico: l'angolo articolare, la velocità e l'accelerazione di ogni passo sono entro i limiti?
- Collisione: lungo la traiettoria, il braccio entra in collisione con se stesso o con l'ambiente (visualizza/simula se possibile)?
- Singolarità: l'orbita passa attraverso una regione di singolarità (il determinante Jacobiano si avvicina allo zero)?
- Test hardware lento: utilizzare il robot a bassa velocità (ad es. 10%) e monitorarlo visivamente.
- Aumento graduale della velocità: Una volta verificato tutto, la velocità aumenta gradualmente fino al valore nominale.
Attenzione: quando si avvia un robot con una nuova traiettoria per la prima volta, la velocità deve essere sempre bassa e l'arresto di emergenza deve essere disponibile. Anche se l'output dell'IA è "matematicamente corretto", un offset, un asse invertito o un intoppo del cavo nella configurazione fisica verranno rivelati solo con test lenti.
Mini custodia
L'ingegnere dell'automazione Ece chiede all'intelligenza artificiale un codice di traiettoria nello spazio articolare per un'applicazione pick-and-place. L'IA produce un profilo trapezoidale, ma quando Ece testa uno spostamento a breve distanza, vede che il tempo è negativo: il codice non ha gestito il caso del profilo triangolare in cui non è possibile raggiungere v_max. Ece corregge questo problema dicendo al prompt "se la distanza è breve, rientra nel profilo triangolare". Quindi analizza gli angoli dei giunti forniti dall'IA attraverso la sua funzione di convalida rispetto alla propria tabella dei limiti e scopre che il giunto 5 voleva +125° in un punto, mentre il limite era +120°. Ripianifica la traiettoria e la monitora, questa volta facendo funzionare il robot al 10% della velocità. Nel primo giro vede che la pinza si sta avvicinando troppo al tavolo e corregge l'offset Z. L'intelligenza artificiale ha restituito uno schema di lavoro in pochi minuti; ma tre convalide separate (profilo triangolare, limite articolare, test lento) hanno rilevato tre problemi reali separati.
Errori comuni
- Utilizzo della soluzione IK senza limiti articolari e controllo dell'accessibilità.
- Non ritaglia le voci arccos/arcsin ma produce NaN in caso di errore di arrotondamento.
- Richiedere l'orbita senza limitare velocità/accelerazione e creare shock meccanico.
- Ignorando le zone di singolarità e lasciando che le velocità congiunte salgano alle stelle.
- Saltare la transizione del profilo trapezoidale-triangolare in una breve distanza e calcolare il tempo sbagliato.
- Conduzione del primo test orbitale a piena velocità e senza accesso all'E-stop.
In sintesi
- La cinematica diretta ha un'unica soluzione; la cinematica inversa può produrre soluzioni multiple, inesistenti o infinite.
- Le soluzioni IK sono necessariamente filtrate in termini di limiti articolari, accessibilità e singolarità.
- Pianificazione della traiettoria; Utilizza profili morbidi e compatibili con i limiti come trapezoidale o curva a S.
- A breve distanza il profilo cambia da trapezoidale a triangolare; questo dovrebbe essere gestito nel codice.
- L’intelligenza artificiale accelera la matematica; I limiti e il contesto di installazione fisica dovrebbero essere inseriti nel prompt.
- La nuova traiettoria viene sempre percorsa per la prima volta con un rapporto di velocità basso e un arresto di emergenza accessibile.
Compito dell'applicazione
Seleziona un modello di braccio a due o tre giunti (con lunghezze di collegamento reali o immaginarie e limiti dei giunti). Chiedi all'intelligenza artificiale di generare una funzione cinematica inversa e un pianificatore di traiettoria in questo contesto. Quindi: (1) verificare manualmente l'output IK con un target noto (rimettere gli angoli indietro e tornare allo stesso punto dell'FK), (2) verificare che il codice li catturi fornendo almeno un punto inaccessibile e un limite congiunto superiore al target, (3) verificare che a breve distanza il tempo orbitale risulti ragionevole. Annota quanti problemi di convalida hai riscontrato nella prima versione del codice e quale livello li ha rilevati.