Dans le développement des robots quadrupèdes, des robots humanoïdes ou des bras robotiques haute performance, les modes de contrôle traditionnels indépendants de la position, de la vitesse et du couple ne sont souvent pas en mesure de répondre aux exigences du contrôle dynamique haute fréquence de l'ensemble du robot en raison des limitations de la fréquence des trames de communication. Par conséquent, le MIT Mode est devenu la méthode de contrôle privilégiée par les développeurs.
Ce tutoriel vous guidera pas à pas pour configurer et contrôler le CubeMars AK60-6 (KV80) Robotic Actuator en MIT Mode à l'aide de C++ via un bus CAN. En suivant ce guide, vous maîtriserez la logique fondamentale du protocole de communication sous-jacent et exploiterez pleinement les performances de contrôle à haute réactivité et à faible latence de l'actionneur.
Avant de commencer à écrire votre code C++, assurez-vous de disposer de l'environnement matériel et logiciel suivant :
Matériel principal : CubeMars AK60-6 (KV80) Robotic Actuator, une interface de communication CAN fiable (par exemple un adaptateur USB-to-CAN, CANoe ou une carte de développement équipée d'une interface CAN).
Environnement logiciel : Un compilateur C++ (tel que GCC ou MSVC), ainsi qu'une bibliothèque de communication CAN tierce (telle que PCAN-Basic, SocketCAN, etc.).
Logiciel utilitaire : Le logiciel officiel de configuration CubeMars (utilisé pour la configuration initiale des paramètres).
Avant d'écrire le moindre code, il est important de comprendre pourquoi le MIT Mode est utilisé. Les modes de contrôle traditionnels ne permettent d'envoyer qu'un seul paramètre à la fois (par exemple la position ou la vitesse). En revanche, le MIT Mode permet de regrouper les cinq paramètres essentiels suivants dans une seule trame CAN standard de 8 octets :
Position cible
Vitesse cible
Couple cible (Torque / Kt × I)
Gain PD de position (Kp)
Gain PD de vitesse (Kd)
Cette structure de message unifiée réduit considérablement la latence de communication et constitue la base du contrôle locomoteur haute fréquence ainsi que du contrôle de force en conformité des robots.
Avant d'exécuter le code, assurez-vous que l'actionneur est correctement connecté et configuré :
Câblage matériel : Connectez les bornes CAN_H et CAN_L de votre interface CAN aux bornes CAN_H et CAN_L de l'actionneur AK60-6 respectivement. Assurez-vous que tous les appareils partagent une masse commune.
Configuration via le logiciel CubeMars :
Connectez l'actionneur à l'aide du logiciel de configuration CubeMars.
Définissez l'ID CAN de l'actionneur sur la valeur souhaitée (par exemple 0x01) et mémorisez-la, car elle sera utilisée dans votre programme C++.
Réglez le débit en bauds (Baud Rate) sur 1 Mbps (1000 kbps), qui est le débit recommandé pour le MIT Mode.
Cliquez sur le bouton « Enter MIT Mode ». Une fois le mode activé avec succès, vous ressentirez une résistance électromagnétique notable lorsque vous ferez tourner l'arbre de l'actionneur à la main.
Dans un environnement C++, la logique de contrôle de l'AK60-6 peut être divisée en trois étapes essentielles (veuillez télécharger la pièce jointe ci-dessous pour obtenir le projet complet et les fonctions de conversion des données) :
Envoyer la commande Enable : Après être passé en MIT Mode, l'actionneur reste par défaut dans un état de protection. Avant d'envoyer toute commande de contrôle, vous devez d'abord envoyer une trame Enable dédiée (généralement une trame de 8 octets remplie de 0x00, ou une autre trame Enable définie par le protocole) afin de déverrouiller l'actionneur. L'actionneur est correctement activé uniquement après avoir émis le bip de confirmation.
Conversion des nombres à virgule flottante en entiers non signés : Il s'agit de l'algorithme le plus important de l'implémentation C++ du MIT Mode. Étant donné que les trames CAN ne peuvent transmettre que des valeurs entières, les grandeurs physiques (par exemple une position cible de -12.5 rad) doivent être converties en entiers non signés de 16 ou 12 bits.
Logique : Utilisez la fonction de conversion linéaire float_to_uint(x, x_min, x_max, bits).
Opération : Limitez la position cible, la vitesse, le couple, Kp et Kd aux plages autorisées par l'actionneur, puis convertissez-les proportionnellement en valeurs hexadécimales correspondantes.
Assembler et envoyer une trame CAN de 8 octets : Regroupez les cinq paramètres entiers obtenus à l'étape précédente dans un tableau de 8 octets (64 bits) conformément à l'organisation des bits définie par le protocole de communication CubeMars. Enfin, utilisez votre bibliothèque CAN pour envoyer cette trame à l'actionneur avec l'ID CAN configuré. Dès réception de la trame, l'actionneur l'analyse immédiatement et exécute la commande.
Après avoir compilé et exécuté (ou téléchargé) votre programme C++, mettez l'actionneur AK60-6 sous tension.
Lancez votre programme C++. Vous devriez voir l'actionneur réagir de manière extrêmement fluide et rapide en fonction des valeurs de position, de vitesse et de couple définies dans votre code.Vous pouvez également modifier dynamiquement les valeurs de Kp et Kd afin d'observer directement les variations de rigidité et de compliance de l'actionneur.
Q1 : L'actionneur ne répond pas ou signale une erreur après l'envoi des trames CAN ?
R : Veuillez vérifier les points suivants :
La commande Enable a-t-elle bien été envoyée ?
L'ID CAN utilisé dans votre code C++ correspond-il exactement à celui configuré sur l'actionneur ?
Les valeurs de commande respectent-elles les limites définies par le protocole (telles que P_MAX et V_MAX) ? Les valeurs dépassant ces limites seront rejetées par l'actionneur.
Q2 : Comment gérer l'ordre des octets (Byte Order) dans le code ?
R : Le protocole CAN de CubeMars utilise généralement le format Big-Endian. Lors de la construction de la trame CAN de 8 octets en C++, veillez attentivement à l'ordre des octets MSB (Most Significant Byte) et LSB (Least Significant Byte). Un ordre incorrect entraînera des erreurs dans les valeurs de position et de couple. Veuillez suivre strictement la disposition des octets définie dans le Manuel du protocole de communication.
Q3 : Comment calibrer la position zéro (Zero Position) de l'actionneur ?
R : En MIT Mode, envoyez la commande CAN dédiée « Set Current Position as Zero » (consultez le Manuel du protocole de communication pour connaître l'ID CAN et la trame de données correspondants). L'actionneur enregistrera alors la position actuelle du rotor comme position mécanique zéro. Il est recommandé d'effectuer cette calibration à chaque initialisation du système après la mise sous tension.
Grâce à sa bride compacte de 60 mm et à ses excellentes performances dynamiques, l'AK60-6 (KV80) constitue une solution idéale pour les bras robotiques légers, les systèmes de nacelle (gimbal) et les articulations des pattes de robots quadrupèdes.
[En savoir plus sur le CubeMars AK60-6 (KV80), y compris ses spécifications détaillées et ses dimensions.]