Cinématique¶
La cinématique est l’application de la géométrie au contrôle de divers mécanismes robotiques. Les équations cinématiques sont utilisées pour contrôler les mécanismes en fournissant des entrées spécifiques pour obtenir une sortie souhaitée.
La plupart des équations cinématiques présentées ici sont tirées de Controls Engineering in the FIRST Robotics Competition (book) et de Mobile Robot Kinematics for FTC (paper), qui contiennent les dérivations correspondantes. Bien que seules les équations de la cinématique du réservoir (entraînement différentiel) et de la mécanique soient présentées ici, ces sources contiennent également des dérivations pour d’autres mécanismes tels que le pivotement et l’odométrie de la roue morte.
Cinématique Directe et Inverse¶
Les mécanismes peuvent avoir différents ensembles d’équations pour leur cinématique avant et leur cinématique inverse. La cinématique directe est l’équation utilisée pour déterminer l’état d’un système en fonction de l’état de ses sorties, tandis que la cinématique inverse détermine la sortie d’un système en fonction de l’état souhaité. Par exemple, dans une chaîne cinématique, la cinématique avant détermine la vitesse du corps du robot sur la base des vitesses individuelles des roues, tandis que la cinématique inverse détermine les vitesses requises des roues pour une vitesse souhaitée du corps.
Char/Tank (entraînement différentiel)¶
Un tank, ou entraînement différentiel, est une chaîne cinématique composée de deux ensembles de roues situées de chaque côté du robot et entraînées de manière indépendante. Ils sont décrits plus en détail dans la section Châssis de type tank (ou à glissement différentiel).
Variables¶
Les variables suivantes sont utilisées dans cette section.
\(v_r\) désigne la vitesse linéaire de la (des) roue(s) droite(s)
\(v_l\) désigne la vitesse linéaire de la (des) roue(s) gauche(s)
\(v_f\) désigne la vitesse d’avancement du robot par rapport à lui-même
\(\omega\) indique la vitesse de rotation du robot en radians/seconde
\(r_b\) indique le rayon de la piste de base, ou la distance entre la roue et le centre du robot (la moitié de la distance entre les roues).
Avertissement
Ces variables, à l’exception de \(\noméga\), représentent des vitesses linéaires et NON des vitesses rotationnelles. La vitesse de rotation de la roue en radians/seconde peut être convertie en vitesse linéaire en la multipliant par le rayon de la roue.
Une vitesse de rotation positive (\(\noméga\)) fait tourner le robot dans le sens inverse des aiguilles d’une montre lorsqu’on le regarde d’en haut.
Cinématique avant¶
La cinématique d’avancement d’un tank drive relie la vitesse des roues aux vitesses d’avancement et de rotation du robot par rapport à lui-même. La vitesse d’avancement \(v_f\) et la vitesse de rotation \(v_{\theta}\) sont :
Cinématique inverse¶
La cinématique inverse d’un entraînement de char relie la vitesse souhaitée du robot à la vitesse requise des roues. Ces vitesses sont les suivantes :
Châssis Mecanum¶
Variables¶
La cinématique Mecanum utilise les mêmes variables que l’entraînement différentiel, à l’exception des quatre variables de vitesse des roues et d’un vecteur de vitesse supplémentaire du robot pour la vitesse de gauche à droite.
\(v_\mathrm{fr}\) désigne la vitesse linéaire de la roue avant droite (en tête)
\(v_\mathrm{br}\) désigne la vitesse linéaire de la roue droite arrière (arrière)
\(v_\mathrm{fl}\) désigne la vitesse linéaire de la (des) roue(s) avant gauche.
\(v_\mathrm{bl}\) désigne la vitesse linéaire de la (des) roue(s) arrière(s) gauche(s)
\(v_f\) indique la vitesse d’avancement du robot par rapport à lui-même.
\(v_s\) indique la vitesse de déplacement du robot, par rapport à lui-même.
\(\omega\) indique la vitesse de rotation du robot en radians/seconde
\(r_b\) représente le rayon de la piste de base, ou la distance entre la roue et le centre du robot (la moitié de la distance entre les roues).
Avertissement
Ces variables, à l’exception de \(\noméga\), représentent des vitesses linéaires et NON des vitesses rotationnelles. La vitesse de rotation de la roue en radians/seconde peut être convertie en vitesse linéaire en la multipliant par le rayon de la roue.
Une vitesse de rotation positive (\(\noméga\)) fait tourner le robot dans le sens inverse des aiguilles d’une montre lorsqu’on le regarde d’en haut.
Cinématique avant¶
La cinématique de marche avant d’un entraînement mécanique relie la vitesse des roues aux vitesses de marche avant, de marche arrière et de rotation du robot par rapport à lui-même. Ces vitesses sont les suivantes :
Cinématique inverse¶
La cinématique inverse d’un entraînement mécanique relie la vitesse souhaitée du robot à la vitesse requise sur les roues. Il s’agit des éléments suivants :
Manipulators¶
Gravity Compensation¶
Often in FTC, teams have arms that swing out around an axis. Controlling these arms requires a bit of thought as depending on the angle they’re at, the effect of gravity drastically changes.
Our first step is defining a reference frame. Our recommendation is to define zero as straight to the side, as this is when gravity has the greatest effect on your arm. Other reference frames will still work, but the exact trigonometry will change.
11329 I.C.E. Robotics¶
In a reference frame like this, the relative force of gravity will be equal to the cos of the angle. This makes sense as when the cos function is evaluated at zero degrees, it returns 1, while at 90 degrees where there is no effect of gravity, it returns 0.
Assuming you have an encoder on your arm, you can find \(\theta\) (the angle of the arm relative to the vertical) using something similar to the following pseudocode.
Note
DEGREE_PER_TICK can be found by taking 360 divided by your encoder resolution all multiplied by your gear ratio. For example, for a 19.2:1 goBILDA Yellow Jacket, there are 537.7 ticks per revolution, and so \(\frac{360}{537.7}\) degrees per tick at the gearbox output shaft. If there was a 2:1 gear ratio after that, then the ticks per revolution would instead be \(\frac{360}{2 \times 537.7}\)
current_angle = (TICKS_AT_ZERO - current_tick) * DEGREE_PER_TICK
The typical way to utilize the effect of gravity you just found, is to pass it in as a feedforward parameter to a PID controller. We cover this in Gravity Compensated Feedforward.