= Kinematics [[cha:kinematics]] (((Kinematics))) == Einführung Wenn wir über CNC-Maschinen sprechen, denken wir normalerweise an Maschinen, denen befohlen wird, sich an bestimmte Orte zu begeben und verschiedene Aufgaben auszuführen. Um einen einheitlichen Blick auf den Maschinenraum zu haben und ihn dem menschlichen Standpunkt über den 3D-Raum anzupassen, verwenden die meisten Maschinen (wenn nicht alle) ein gemeinsames Koordinatensystem, das kartesische Koordinatensystem. Das kartesische Koordinatensystem besteht aus drei Achsen (X, Y, Z), die jeweils senkrecht zu den beiden anderen stehen. footnote:[Das Wort "Achsen" wird auch häufig (und fälschlicherweise) verwendet, wenn man über CNC-Maschinen spricht und sich auf die Bewegungsrichtungen der Maschine bezieht.] Wenn wir über ein G-Code-Programm (RS274 / NGC) sprechen, sprechen wir über eine Anzahl von Befehlen (G0, G1 usw.), die Positionen als Parameter haben (X-Y-Z-). Diese Positionen beziehen sich genau auf kartesische Positionen. Ein Teil des LinuxCNC-Motion-Controllers ist dafür verantwortlich, diese Positionen in Positionen zu übersetzen, die der Maschinenkinematik entsprechen. footnote:[Kinematik: eine Zwei-Wege-Funktion zur Transformation vom kartesischen Raum in den Gelenkraum] === Gelenke vs. Achsen Ein Gelenk einer CNC-Maschine ist einer der physikalischen Freiheitsgrade der Maschine. Dies kann linear (Leitspindel) oder rotatorisch (Drehtisch, Roboterarmgelenk) sein. Es kann eine beliebige Anzahl von Verbindungen auf einer gegebenen Maschine geben. Zum Beispiel hat ein beliebter Roboter 6 Gelenke und eine typische einfache Fräsmaschine hat nur 3. Es gibt bestimmte Maschinen, bei denen die Gelenke entsprechend den Kinematikachsen ausgelegt sind (Gelenk 0 entlang der Achse X, Gelenk 1 entlang der Achse Y, Gelenk 2 entlang der Achse Z), und diese Maschinen werden kartesische Maschinen (oder Maschinen mit Trivial Kinematik) genannt. Dies sind die am häufigsten beim Fräsen verwendeten Maschinen, sie sind jedoch in anderen Bereichen der Maschinensteuerung nicht sehr üblich (z. B. Schweißen: Roboter vom Puma-Typ). == Triviale Kinematik Die einfachsten Maschinen sind solche, bei denen jedes Gelenk entlang einer der kartesischen Achsen angeordnet ist. Auf diesen Maschinen ist die Abbildung vom kartesischen Raum (dem G-Code-Programm) zu dem Gelenkraum (den tatsächlichen Stellgliedern der Maschine) trivial. Es ist ein einfaches 1:1-Mapping: ---- pos->tran.x = joints[0]; pos->tran.y = joints[1]; pos->tran.z = joints[2]; pos->a = joints[3]; pos->b = joints[4]; pos->c = joints[5]; ---- joints[1] = sqrt((Bx - pos->tran.x)*(Bx - pos->tran.x) + y2); return 0; ---- == Details zur Implementierung Ein Kinematikmodul ist als HAL-Komponente implementiert und darf Pins und Parameter exportieren. Es besteht aus mehreren "C" -Funktionen (im Gegensatz zu HAL-Funktionen): ---- int kinematicsForward(const double *joint, EmcPose *world, const KINEMATICS_FORWARD_FLAGS *fflags, KINEMATICS_INVERSE_FLAGS *iflags) ---- Implementiert die Funktion der inversen Kinematik ---- int kinematicsInverse(const EmcPose * world, double *joints, const KINEMATICS_INVERSE_FLAGS *iflags, KINEMATICS_FORWARD_FLAGS *fflags) ---- Implementiert die Funktion der inversen Kinematik.. ---- KINEMATICS_TYPE kinematicsType(void) ---- Gibt die Kennung des Kinematiktyps zurück, normalerweise 'KINEMATICS_BOTH'. ---- int kinematicsHome(EmcPose *world, double *joint, KINEMATICS_FORWARD_FLAGS *fflags, KINEMATICS_INVERSE_FLAGS *iflags) ----