La technique utilisée par la plupart des contrôleurs d'imprimante 3D open source comporte deux étapes principales:
- Divisez chaque segment de gcode linéaire en beaucoup de très petits sous-segments ("Segmentation")
- Utilisez une trigonométrie de base ou le théorème de Pythagore pour lier la position de l'extrudeuse à la hauteur du chariot pour chacune des trois tours ("cinématique inverse") pour trouver la position cible pour chaque petit segment
La cinématique inverse est étonnamment simple. Un triangle virtuel à 90 degrés est construit à partir de deux longueurs connues pour résoudre la troisième longueur inconnue:
- La longueur du bras delta fixe est l'hypoténuse du triangle
- La distance horizontale entre les joints de colonne et les joints effecteurs d'extrémité est calculée à partir des coordonnées XY de la buse et de la position fixe de la colonne, pour déterminer la longueur du côté inférieur du triangle
- La longueur du côté supérieur du triangle est calculée à partir des deux précédents via le théorème de Pythagore
- La longueur du côté supérieur est ajoutée à la hauteur Z de la buse pour obtenir la hauteur de chariot nécessaire
Je pense que la meilleure référence open-source ici est le document Rostock Kinematics de Steve Grave, rev3 disponible en téléchargement ici: https://groups.google.com/d/msg/deltabot/V6ATBdT43eU/jEORG_l3dTEJ
Quelques images pertinentes:
Ces calculs de cinématique inverse sont effectués pour chaque chariot pour obtenir une position cible "d'espace de chariot", et ceci est effectué pour chaque sous-segment de chemin.
Les résultats de ces étapes peuvent ensuite être réinsérés dans les techniques d'interpolation de chemin linéaire standard pour l'imprimante, dans lesquelles elle déclenche des étapes dans les rapports nécessaires et aux taux nécessaires pour produire le mouvement en ligne droite souhaité et le profil d'accélération / vitesse. (Comment cela est fait est une question différente.)
L'effet net est que l'imprimante se déplacera à travers une série de petits mouvements de chariot "linéaires" (linéaire signifiant vitesse constante par rapport au temps) qui approximent collectivement les mouvements de chariot incurvés (position quadratique par rapport au temps) nécessaires pour produire un mouvement effecteur terminal en ligne droite.
* ( Vitesse constante avant que les ralentissements d'accélération ne soient appliqués afin de respecter les contraintes dynamiques, de toute façon. Encore une fois, cela fait l'objet d'une question différente.)
La segmentation est très similaire au processus d'utilisation d'un polygone pour approximer un cercle. Si les facettes sont suffisamment petites, le polygone est une bonne approximation. Des taux de segmentation plus élevés produisent moins d'erreurs de suivi de chemin. La principale différence conceptuelle entre dessiner des arcs de cercle et des trajectoires de mouvement Delta est que le soi-disant «arc à facettes» avec segmentation Delta est construit en coordonnées hauteur-temps au lieu des coordonnées X-vs-Y que vous utiliseriez pour dessiner un cercle sur un écran d'ordinateur.
Ce système est utilisé en grande partie parce que la prise en charge des imprimantes de style Delta était à l'origine boulonnée sur des planificateurs de mouvement basés sur GRBL qui étaient écrits exclusivement pour des trajectoires de mouvement en ligne droite dans les imprimantes cartésiennes. Il s'agissait d'une modification relativement minime de la base de code existante par rapport à la mise en œuvre d'une interpolation de chemin quadratique complète.
Les techniques ont évolué au fil des ans. Et des approches alternatives sont souvent utilisées: par exemple, la fourche dc42 de RepRapFirmware effectue un suivi de chemin exact sans segmentation, en recalculant l'heure appropriée pour l'étape suivante après chaque étape . Ceci est fonctionnellement équivalent à l'approximation d'un cercle avec un nombre de facettes de polygone si élevé que chaque pixel de l'écran a sa propre facette . Il est donc exactement aussi précis que le permet la résolution de positionnement des moteurs. L'inconvénient est que cette technique sans segmentation est assez gourmande en processeur, donc elle ne fonctionne que sur des contrôleurs relativement rapides, et non sur l'Atmega AVR 8 bits plus ancien qui alimente la plupart des imprimantes grand public / amateurs actuelles.
D'autres techniques sont possibles. La littérature académique sur le contrôle de la robotique parallèle est un tout autre monde de techniques mathématiques et de complexité afin de produire des algorithmes de contrôle généralisés qui fonctionnent pour un large éventail de mécanismes de robot. La version que nous utilisons dans les imprimantes 3D open-source est assez simple et spécifique à l'application en comparaison.