J'ai fait un petit robot sur chenilles il y a peu de temps qui avait deux jambes avec deux degrés de liberté chacune, donc 4 servos RC au total. Pendant que je programmais le mouvement des jambes, j'ai remarqué qu'elles bougeaient plutôt raidement. Il est logique que le contrôleur interne du servo RC ait une réponse très rapide aux commandes de position, mais je voulais que mon robot se déplace d'une manière qui semble un peu plus fluide et réaliste.
Ma solution a été de créer une fonction cubique du temps qui décrit le chemin des servos, puis de définir leur position par petits incréments de temps, ce qui entraîne un mouvement plus fluide. Essentiellement ce que je faisais était pour résoudre les coefficients dans une équation cubique en utilisant l'intervalle de temps, début et de fin position du servo, et le démarrage et le servo taux de fin devrait se déplacer (qui est juste la dérivée de la position):
Résolvez pour , un 1 , un 2 et un 3 :
r a t e ( t ) = p o s i t i o n ′ ( t ) = a 1 + 2 a 2 t + 3 a 3 t
Éléments fournis: , p o s i t i o n ( t f ) , r a t e ( 0 ) , r a t e ( t f )
J'ai réglé le taux du servo entre une paire de mouvements à zéro si les mouvements étaient dans des directions opposées, et positif ou négatif si les mouvements étaient tous les deux dans la direction positive ou négative, respectivement.
Cela a plutôt bien fonctionné, mais cette solution est limitée de plusieurs façons. D'une part, il est difficile de décider quels devraient être exactement les taux entre les mouvements qui vont dans la même direction. J'ai utilisé la moyenne des pentes en avant et en arrière d'une position particulière entre les mouvements, mais il n'est pas clair pour moi que ce soit optimal. Deuxièmement, des courbes cubiques pourraient amener le servo à une position en dehors de la plage des positions au début et à la fin d'un mouvement, ce qui peut être indésirable. Par exemple, à un moment donné de l'intervalle de temps, la courbe pourrait faire en sorte que le servo dépasse la deuxième position, ou en dessous de la première position. Troisièmement, la génération de courbe ici ne prend pas en compte la vitesse maximale à laquelle le servo peut tourner, donc une courbe peut faire bouger le servo à une vitesse irréaliste. Avec ça,
En négligeant cette dernière préoccupation, ces problèmes peuvent être résolus en augmentant le degré du polynôme et en ajoutant des contraintes à résoudre pour les coefficients, mais je commence maintenant à me demander ...
Existe-t-il un meilleur moyen que celui-ci pour rendre le mouvement du servo fluide et plus réaliste?