🔷 INFORMATIONS GÉNÉRALES
Champ Détail
Nom du script script_302cvmn_302.py
Version 1.0.0
Date de création 09/03/2026
Auteur / Demandeur IA Générée (Gemini)
Objectif principal Simuler et visualiser le mouvement d’un bras articulé via l’algorithme de cinématique inverse FABRIK.
🎯 DESCRIPTION FONCTIONNELLE
📌 Que fait ce script ?
Ce script implémente un solveur de cinématique inverse utilisant l’algorithme FABRIK (Forward And Backward Reaching Inverse Kinematics). Il calcule la position des articulations d’un bras robotisé pour que son extrémité atteigne une cible en mouvement circulaire, le tout visualisé par une animation en temps réel.
📌 Problème résolu
Il résout le problème de la Cinématique Inverse (IK) : déterminer les angles ou positions des segments intermédiaires d’une chaîne cinématique pour atteindre des coordonnées spécifiques (x,y) de manière efficace et sans calculs trigonométriques complexes et coûteux.
⚙️ SPÉCIFICATIONS TECHNIQUES
🐍 Environnement
Élément Valeur
Version Python 3.x
OS cible Tous (Windows / Linux / MacOS)
Mode d’exécution Interface Graphique (Matplotlib Animation)
📦 Dépendances / Librairies
Librairies standard (built-in) : Aucune.
Librairies externes :
numpy : Calculs matriciels et vectoriels.
matplotlib : Génération du graphique et de l’animation.
📥 ENTRÉES (INPUTS)
# Nom Type Obligatoire Description Exemple
1 joint_lengths list ✅ Oui Longueurs des segments du bras. [2.0, 1.5, 1.0]
2 origin tuple ❌ Non Point d’ancrage du bras (x, y). (0, 0)
3 target array ✅ Oui Coordonnées de la cible à atteindre. [2.5, 1.2]
📤 SORTIES (OUTPUTS)
# Nom Type Description Exemple
1 self.joints ndarray Coordonnées (x, y) de chaque articulation. [[0,0], [2,0], …]
2 ani FuncAnimation Objet d’animation visuelle affiché à l’écran. Fenêtre interactive
🧱 STRUCTURE DU SCRIPT
script_302cvmn_302.py
│
├── 📌 IMPORTS (numpy, matplotlib)
├── 📌 CLASSE FABRIKSolver (Logique métier)
│ ├── __init__() → Initialisation du bras
│ └── solve() → Algorithme IK (Forward/Backward)
├── 📌 SIMULATION & VISUALISATION
│ ├── update() → Mise à jour de la cible et du bras par frame
│ └── MAIN → Initialisation FuncAnimation et plt.show()
🔧 Détail des fonctions principales
Fonction Paramètres Retour Rôle
solve(target) target: list/array None Met à jour les positions self.joints pour atteindre la cible.
update(frame) frame: int tuple Calcule la nouvelle position de la cible et rafraîchit le graphique.
🔄 LOGIQUE / ALGORITHME
Vérification de portée : Si la cible est plus loin que la somme des segments, le bras s’étend en ligne droite vers elle.
Itération FABRIK (si à portée) :
ÉTAPE 1 (Backward) : On place l’effecteur final sur la cible, puis on réaligne chaque segment vers l’origine.
ÉTAPE 2 (Forward) : On replace la base à l’origine, puis on réaligne chaque segment vers la cible.
Condition d’arrêt : L’algorithme s’arrête si l’extrémité est assez proche de la cible (tolerance) ou si le nombre max_iter est atteint.
🚨 GESTION DES ERREURS
Division par zéro : Le script ne gère pas explicitement le cas où deux articulations sont exactement au même endroit (vecteur nul lors de la normalisation de la direction).
Convergence : Limité à 10 itérations par frame pour garantir la performance au détriment d’une précision absolue.
✅ CONTRAINTES & RÈGLES MÉTIER
Règle 1 : La longueur des segments est fixe (corps rigides).
Règle 2 : Le point d’origine est fixe (sauf si réinitialisé).
Règle 3 : Le mouvement est restreint au plan 2D.
🧪 TESTS ATTENDUS
# Cas de test Entrée Résultat attendu Statut
1 Cible hors de portée target = [10, 10] Bras tendu au maximum vers la cible ⬜ À tester
2 Cible sur l’origine target = [0, 0] Bras replié sur lui-même ⬜ À tester
3 Segments de longueur nulle lengths = [0] Risque d’erreur de calcul ⬜ À tester
📝 EXEMPLE D’UTILISATION
▶️ Lancement direct
Bash
python script_302cvmn_302.py
(Une fenêtre Matplotlib s’ouvrira montrant un bras articulé vert suivant un point rouge circulant autour de lui.)



Avis
Il n’y a pas encore d’avis.