Unité 2 / 9

Intelligence artificielle en robotique et contrôle de mouvement

Gains :

  • Capacité à configurer et à résoudre des problèmes de cinématique avant/inverse et de planification de trajectoire à l'aide de l'IA
  • Capacité à produire une orbite sûre en donnant aux robots les limites des articulations, les contraintes de vitesse et d'accélération comme contexte à l'invite
  • Capacité à vérifier numériquement et physiquement la sortie cinématique et de trajectoire produite par l'IA

Amener la pince à l'extrémité d'un bras de robot à un certain point de l'espace, dans une certaine orientation ; Cela semble simple, mais derrière cela se cachent des équations cinématiques, des limites d’articulation, des singularités et une planification de trajectoire. Ici, l'ingénieur mécatronique utilise ensemble la trigonométrie, l'algèbre linéaire et la théorie du contrôle. L'intelligence artificielle est une aide puissante dans ce processus : elle peut établir des équations de cinématique directe, suggérer des approches de solutions pour la cinématique inverse, paramétrer une trajectoire en fonction de contraintes de vitesse/accélération. Cependant, la robotique est l’un des domaines de la mécatronique présentant le risque physique le plus élevé ; Si une séquence d'angles générée par l'IA est envoyée au robot sans vérification, le bras peut se heurter lui-même, l'environnement ou l'opérateur. Dans cette unité, nous verrons comment mettre en place et vérifier la cinématique et la planification de trajectoire avec l'IA.

Cinématique avant et inverse

Cinématique avant (FK) : Trouver la position et l'orientation de l'effecteur terminal si les angles d'articulation sont connus. Il n'y a qu'une seule solution, elle est directe.

Cinématique inverse (IK) : Si la position souhaitée de la fonction finale est connue, trouver les angles d'articulation qui y parviendront. Il a généralement plus d'une solution (comme le coude haut/bas), parfois il n'a pas de solutions (point inaccessible), parfois il a des solutions infinies (singularité).

notion

entrée

sortie

Nombre de solutions

Cinématique avant

angles de jonction

Position/orientation extrême

célibataire

Cinématique inverse

Position/orientation extrême

angles de jonction

Multiple/aucun/infini

Pour un bras plan à deux articulations, la cinématique inverse peut être configurée dans l'IA et vérifiée manuellement comme suit :

import numpy as npdef inverse_kinematik_2r(x, y, L1, L2): """IK pour bras planaire à 2 articulations. Renvoie les angles en radians (solution coude vers le bas).""" r2 = x**2 + y**2 # Contrôle d'accessibilité : le point est-il dans l'espace de travail ? si np.sqrt(r2) > (L1 + L2) ou np.sqrt(r2) < abs(L1 - L2) : raise ValueError("Le point est en dehors de l'espace de travail accessible") cos_t2 = (r2 - L1**2 - L2**2) / (2 * L1 * L2) cos_t2 = np.clip(cos_t2, -1.0, 1.0) # digitalsecurity t2 = np.arccos(cos_t2) # coude vers le bas t1 = np.arctan2(y, x) - np.arctan2(L2*np.sin(t2), L1 + L2*np.cos(t2)) return np.degrees(t1), np.degrees(t2)# Validation : L1=L2=1, cible (1,1) -> attendu t2=90 degrésprint(inverse_kinematik_2r(1.0, 1.0, 1.0, 1.0)) # ~ (0.0, 90.0)

Les lignes critiques ici sont celles où l'IA saute souvent : la vérification de l'accessibilité (est le point dans l'espace de travail) et « np.clip » (empêche l'entrée arccos d'aller au-delà de ±1 en raison d'une erreur d'arrondi). Sans ces deux protections, le code produira du NaN ou plantera à un point invalide.

Astuce : lorsque vous demandez une résolution IK, dites clairement à l'IA "d'ajouter un contrôle d'accessibilité et de limiter l'entrée arccos au clip". Ces deux lignes évitent les erreurs silencieuses qui causent le plus de maux de tête sur le terrain.

Limites conjointes, singularité et solutions multiples

Chaque articulation d'un vrai robot a une plage d'angle (par exemple -170° à +170°), une limite de vitesse et une limite d'accélération. Même si IK donne un angle mathématiquement valide, il ne peut pas être utilisé si cet angle est en dehors de la plage physique de l'articulation. De plus, le robot tombe dans la singularité dans certaines configurations : deux axes sont alignés, un degré de liberté est perdu et les vitesses articulaires tentent d'aller à l'infini pour un petit mouvement de pointe.

C'est pourquoi une solution RH seule ne suffit pas ; Chaque solution doit passer un filtre d'acceptabilité :

def solution_gecerli_mi(acilar_deg, limites_deg): """douleurs: [t1,t2,...], limites: [(min,max),...]""" pour la douleur, (amin, amax) dans zip(acilar_deg, limites_deg): sinon (amine <= douleur <= amax): return False, f"Limite articulaire dépassée: {pain:.1f} deg ({amine},{amax}) except" return True, "OK"limits = [(-170, 170), (-120, 120)]print(cozum_valid_mi([0.0, 90.0], limites)) # (Vrai, 'OK')print(cozum_valid_mi([0.0, 150.0], limites)) # (False, 'Limite conjointe dépassée...')

L'IA peut donner la solution « mathématique » du CI ; mais les limites conjointes et l'évitement des singularités sont spécifiques à votre système et doivent être donnés comme contexte à l'invite.

Planification de l'orbite

Amener le robot du point A au point B ne consiste pas à tracer une ligne droite entre deux angles. Un changement soudain de vitesse crée des chocs mécaniques et des vibrations. Au lieu de cela, des profils souples sont utilisés : profil de vitesse trapézoïdal (accélération constante – vitesse constante – décélération constante) ou courbe en S (plus douce, où l'accélération est également limitée). Lorsque vous faites générer une trajectoire à l’IA, vous devez donner la cible, la durée et les contraintes.

import numpy as npdef trapez_yorunge(q0, q1, v_max, a_max, dt=0.01): """Profil de vitesse trapézoïdale pour une seule articulation. Le tableau de positions est renvoyé.""" distance = abs(q1 - q0) direction = np.sign(q1 - q0) t_speed = v_max / a_max distance_speed = 0.5 * a_max * t_speed**2 if 2 * distance_speed > distance : # profil triangulaire (v_max non accessible) 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) # ... calcul de position pour chaque t (basé sur les phases d'accélération/constante/décélération) return t, T, v_peak, durée, vz = trapezoidal_trajectory(0.0, 90.0, v_max=60.0, a_max=120.0)print(f"Durée totale : {duration:.3f} s, vitesse de pointe : {vz:.1f} deg/s")

Le contrôle logique ici est le suivant : si la distance est courte, le moteur n'atteindra jamais v_max et le profil passera de trapézoïdal à triangulaire. Si l'IA manque cette condition, une mauvaise durée sera calculée pour les mouvements courts. Vous pouvez le vérifier en testant le code avec une valeur connue (par exemple, une très courte distance).

Invite faible/Invite forte

FAIBLE : "Écrivez une trajectoire qui emmène le bras du robot de A à B." (Aucune contrainte : limite de vitesse ? la distance est courte, tombe dans un profil triangulaire. Le résultat de chaque joint est Écrivez également une fonction de vérification qui vérifie qu'elle ne dépasse pas les limites du joint : {{table}}"

Vérification : de la simulation au robot

La trajectoire générée par l'IA est vérifiée dans cet ordre avant de se diriger vers le robot :

  1. Numérique : L'angle d'articulation, la vitesse et l'accélération de chaque pas sont-ils dans les limites ?
  2. Collision : Le long de la trajectoire, le bras entre-t-il en collision avec lui-même ou avec l'environnement (visualiser/simuler si possible) ?
  3. Singularité : L'orbite passe-t-elle par une région de singularité (le déterminant jacobien s'approche-t-il de zéro) ?
  4. Test matériel lent : faites fonctionner le robot à faible vitesse (par exemple 10 %) et surveillez-le visuellement.
  5. Augmentation progressive de la vitesse : Une fois tout vérifié, la vitesse augmente progressivement jusqu'à la valeur nominale.
Attention : lors du premier démarrage d'un robot avec une nouvelle trajectoire, la priorité de vitesse doit toujours être faible et l'arrêt d'urgence doit être disponible. Même si la sortie de l'IA est « mathématiquement correcte », un décalage, un axe inversé ou un accroc de câble dans la configuration physique ne sera révélé qu'avec des tests lents.

Mini-étui

L'ingénieur en automatisation Ece demande à l'IA un code de trajectoire dans l'espace commun pour une application pick-and-place. L'IA produit un profil trapézoïdal, mais lorsque Ece teste un déplacement sur courte distance, elle constate que le temps est négatif : le code n'a pas géré le cas du profil triangulaire où v_max ne peut pas être atteint. Ece corrige cela en disant "si la distance est courte, tombez dans le profil triangulaire". Il compare ensuite les angles d'articulation donnés par l'IA via sa fonction de validation à son propre tableau de limites et constate que l'articulation 5 voulait +125° en un point, alors que la limite était de +120°. Il replanifie la trajectoire et la surveille, cette fois en faisant tourner le robot à une vitesse de 10 %. Au premier tour, il constate que la pince se rapproche trop de la table et corrige le décalage Z. L'IA a renvoyé un plan de travail en quelques minutes ; mais trois validations distinctes (profil triangulaire, limite commune, test lent) ont détecté trois problèmes réels distincts.

Erreurs courantes

  • Utilisation de la solution IK sans limites communes ni contrôle d'accessibilité.
  • Ne pas couper les entrées arccos/arcsin mais produire NaN en cas d'erreur d'arrondi.
  • Demander l'orbite sans limiter la vitesse/accélération et créer de choc mécanique.
  • Ignorer les zones de singularité et laisser les vitesses des articulations monter en flèche.
  • Sauter la transition de profil trapézoïdal-triangulaire sur une courte distance et calculer le mauvais moment.
  • Réalisation du premier test orbital à pleine vitesse et sans accès E-stop.

En résumé

  • La cinématique avant a une solution unique ; la cinématique inverse peut produire des solutions multiples, inexistantes ou infinies.
  • Les solutions CI sont nécessairement filtrées en termes de limites communes, d’accessibilité et de singularité.
  • Planification de trajectoire ; Il utilise des profils souples et compatibles avec les limites, tels que le trapèze ou la courbe en S.
  • À courte distance, le profil passe de trapézoïdal à triangulaire ; cela devrait être géré dans le code.
  • L'IA accélère les mathématiques ; Les limites et le contexte d'installation physique doivent apparaître dans l'invite.
  • La nouvelle trajectoire est toujours parcourue pour la première fois avec un rapport de vitesse faible et un arrêt d'urgence accessible.

Tâche de candidature

Sélectionnez un modèle de bras à deux ou trois articulations (avec des longueurs de liaison réelles ou imaginaires et des limites d'articulation). Demandez à l'IA de générer une fonction cinématique inverse et un planificateur de trajectoire avec ce contexte. Ensuite : (1) vérifiez manuellement la sortie IK avec une cible connue (est-ce que vous remettez les angles et revenez au même point que le FK), (2) testez que le code les capture en donnant au moins un point inaccessible et une limite commune dépassant la cible, (3) vérifiez qu'à courte distance le temps orbital s'avère raisonnable. Notez le nombre de problèmes de validation que vous avez trouvés dans la première version du code et quelle couche a détecté chacun d'entre eux.