Open AlexisTM opened 7 years ago
@AlexisTM quel est l'avantage de cette approche par rapport à l'utilisation des odomètres qui sont pour l'instant sur le robot ? Ton idée est en fait de créer un système INS ?
Les vitesses v_right
et v_left
ne peuvent être optenue (pour l'instant en tout cas) qu'en dérivant notre valeur de position sur un interval dt
et ta manière consiste juste à intégré ces vitesses pour avoir la position. Nous revenons donc à notre point de départ et vu que la régulation change toutes les 10ms
les consignes de vitesse, cela signifie que l'on va perdre en précision dans notre positionnement.
C'est exactement ça. Tu utilises les odomètres pour déterminer les vitesses de chaque roue et obtenir la position.
En effet, il y a un drift, qui est inévitable, mais au final, tu gagneras en précision. En effet, en ne se basant que sur les odomètres, tu as une bonne précision localement mais globalement tu perds beaucoup de précision en "estimant être arrivé". Je te propose très simplement de mettre ce code côte à côte avec la régulation actuelle et observe le drift de la position. Sur 90 secondes et de si petites distances, ce sera minime.
De plus, réaliser la régulation de cette façon permet de faire un fusion de senseurs plus simple, par exemple en mettant un IMU et en utilisant un Extended Kalman Filter
Sur l'Arduino, la régulation bas niveau reste primordiale afin d'obtenir une vitesse correcte sur chacun des moteurs.
Afin d'améliorer le système de contrôle des moteurs, il est nécessaire de calculer la position du robot plutôt que de penser qu'il est arrivé. Il y aura toujours un certain drift, mais il se fera probablement que peu sentir sur 90 secondes.
Voici l'idée:
Variables globales:
Boucle de calcul, à executer toutes les N millisecondes
Il est ensuite facile de calculer l'erreur de position et l'erreur angulaire pour la régulation.