Bei der Entwicklung von Quadruped-Robotern, humanoiden Robotern oder leistungsstarken Roboterarmen können herkömmliche, voneinander unabhängige Steuerungsmodi für Position, Geschwindigkeit und Drehmoment aufgrund der begrenzten Kommunikationsrate häufig die Anforderungen an eine hochfrequente Ganzkörper-Dynamikregelung nicht erfüllen. Daher ist der MIT Mode zur bevorzugten Steuerungsmethode vieler Entwickler geworden.
Dieses Tutorial zeigt Ihnen Schritt für Schritt, wie Sie den CubeMars AK60-6 (KV80) Robotic Actuator im MIT Mode mithilfe von C++ über den CAN-Bus konfigurieren und steuern. Mit diesem Tutorial lernen Sie die Kernlogik des zugrunde liegenden Kommunikationsprotokolls kennen und nutzen das hohe Ansprechverhalten sowie die geringe Latenz des Aktuators optimal aus.
Bevor Sie mit der Programmierung in C++ beginnen, stellen Sie bitte sicher, dass die folgende Hard- und Softwareumgebung vorbereitet ist: Kernhardware: CubeMars AK60-6 (KV80) Robotic Actuator, eine zuverlässige CAN-Kommunikationsschnittstelle (z. B. USB-to-CAN-Adapter, CANoe oder ein Entwicklungsboard mit CAN-Schnittstelle).
Softwareumgebung: Ein C++-Compiler (z. B. GCC oder MSVC) sowie eine CAN-Kommunikationsbibliothek eines Drittanbieters (z. B. PCAN-Basic, SocketCAN usw.).
Hilfssoftware: Offizielle CubeMars-Konfigurationssoftware (für die initiale Parametrierung).
Bevor Sie mit dem Schreiben des Codes beginnen, sollten Sie verstehen, warum der MIT Mode verwendet wird. Herkömmliche Steuerungsmodi können jeweils nur einen Parameter gleichzeitig senden (z. B. Position oder Geschwindigkeit). Im Gegensatz dazu ermöglicht der MIT Mode das gleichzeitige Verpacken der folgenden fünf wichtigen Parameter in einem einzigen standardmäßigen 8-Byte-CAN-Frame:
Zielposition
Zielgeschwindigkeit
Zieldrehmoment (Torque / Kt × I)
Positions-PD-Verstärkung (Kp)
Geschwindigkeits-PD-Verstärkung (Kd)
Diese einheitliche Nachrichtenstruktur reduziert die Kommunikationslatenz erheblich und bildet die Grundlage für hochfrequente Roboterbewegungen sowie nachgiebige Kraftregelung.
Bevor Sie den Code ausführen, stellen Sie sicher, dass der Aktuator korrekt angeschlossen und konfiguriert ist:
Hardwareanschluss: Verbinden Sie CAN_H und CAN_L Ihrer CAN-Schnittstelle jeweils mit CAN_H und CAN_L des AK60-6-Aktuators. Stellen Sie sicher, dass alle Geräte eine gemeinsame Masse verwenden.
Konfiguration über die CubeMars-Software:
Verbinden Sie den Aktuator mit der CubeMars-Konfigurationssoftware.
Legen Sie die CAN-ID des Aktuators auf den gewünschten Wert fest (z. B. 0x01) und merken Sie sich diese, da sie im C++-Programm verwendet wird.
Stellen Sie die Baudrate auf 1 Mbps (1000 kbps) ein. Dies ist die empfohlene Baudrate für den MIT Mode.
Klicken Sie auf die Schaltfläche „Enter MIT Mode“. Nach erfolgreicher Aktivierung ist beim manuellen Drehen der Aktuatorwelle ein deutlicher elektromagnetischer Widerstand spürbar.
In einer C++-Umgebung lässt sich die Steuerlogik des AK60-6 in die folgenden drei Hauptschritte unterteilen (den vollständigen Projektcode sowie die Datenkonvertierungsfunktionen finden Sie im untenstehenden Download):
Enable-Befehl senden: Nach dem Wechsel in den MIT Mode befindet sich der Aktuator standardmäßig in einem geschützten Zustand. Bevor Steuerbefehle gesendet werden können, muss zunächst ein spezieller Enable-Frame (normalerweise ein 8-Byte-Frame mit ausschließlich 0x00 oder ein protokollspezifischer Enable-Frame) gesendet werden, um den Aktuator freizuschalten. Erst nach dem Bestätigungston ist der Aktuator erfolgreich aktiviert.
Umwandlung von Fließkommazahlen in vorzeichenlose Ganzzahlen: Dies ist der wichtigste Algorithmus der C++-Implementierung des MIT Mode. Da CAN-Frames nur Ganzzahlen übertragen können, müssen physikalische Werte (z. B. eine Zielposition von -12.5 rad) in 16-Bit- oder 12-Bit-vorzeichenlose Ganzzahlen umgewandelt werden.
Logik: Verwenden Sie die lineare Abbildungsfunktion float_to_uint(x, x_min, x_max, bits).
Vorgehensweise: Begrenzen Sie Zielposition, Geschwindigkeit, Drehmoment, Kp und Kd zunächst auf den zulässigen Bereich des Aktuators und wandeln Sie diese anschließend proportional in die entsprechenden Hexadezimalwerte um.
8-Byte-CAN-Frame zusammensetzen und senden: Packen Sie die fünf im vorherigen Schritt erzeugten Ganzzahlparameter entsprechend der Bitbelegung des CubeMars-Kommunikationsprotokolls in ein 8-Byte-Array (64 Bit). Senden Sie anschließend dieses Datenpaket mit Ihrer CAN-Bibliothek und der konfigurierten CAN-ID an den Aktuator. Nach dem Empfang analysiert der Aktuator die Daten sofort und führt den Befehl aus.
Nachdem Sie Ihr C++-Programm kompiliert und ausgeführt bzw. aufgespielt haben, schalten Sie den AK60-6-Aktuator ein.
Starten Sie Ihr C++-Programm. Der Aktuator sollte entsprechend den im Code definierten Zielwerten für Position, Geschwindigkeit und Drehmoment äußerst gleichmäßig und schnell reagieren. Sie können außerdem die Werte von Kp und Kd während der Laufzeit dynamisch verändern, um die Änderungen der Steifigkeit und Nachgiebigkeit des Aktuators unmittelbar zu beobachten.
F1: Der Aktuator reagiert nach dem Senden von CAN-Frames nicht oder meldet einen Fehler.
A: Bitte überprüfen Sie Folgendes:
Wurde der Enable-Befehl erfolgreich gesendet?
Stimmt die CAN-ID im C++-Programm exakt mit der im Aktuator konfigurierten CAN-ID überein?
Liegen die Sollwerte innerhalb der im Protokoll definierten Grenzwerte (z. B. P_MAX und V_MAX)? Werte außerhalb des zulässigen Bereichs werden vom Aktuator zurückgewiesen.
F2: Wie sollte die Byte-Reihenfolge (Byte Order) im Code behandelt werden?
A: Das CubeMars-CAN-Protokoll verwendet in der Regel das Big-Endian-Format. Achten Sie beim Zusammenstellen des 8-Byte-CAN-Frames in C++ unbedingt auf die Reihenfolge von MSB (Most Significant Byte) und LSB (Least Significant Byte). Eine falsche Byte-Reihenfolge führt zu fehlerhaften Positions- und Drehmomentwerten. Halten Sie sich daher strikt an die Vorgaben des Kommunikationsprotokoll-Handbuchs.
F3: Wie kalibriere ich die Nullposition (Zero Position) des Aktuators?
A: Im MIT Mode senden Sie den speziellen CAN-Befehl „Set Current Position as Zero“ (die entsprechende CAN-ID und den Datenframe finden Sie im Kommunikationsprotokoll-Handbuch). Der Aktuator speichert die aktuelle Rotorposition als mechanische Nullposition. Es wird empfohlen, diese Kalibrierung bei jeder Systeminitialisierung nach dem Einschalten durchzuführen.
Mit seiner kompakten 60-mm-Flanschgröße und seiner hervorragenden dynamischen Leistung eignet sich der AK60-6 (KV80) ideal für leichte Roboterarme, Gimbal-Systeme und Beingelenke von Quadruped-Robotern.
[Erfahren Sie mehr über den CubeMars AK60-6 (KV80), einschließlich detaillierter technischer Daten und Abmessungen.]