Pour ce qui est purement du problème des paliers, je voix plusieurs pistes de solutions :
- faire une extrapolation : tu considère que ta vitesse est constante sur une petite période, et donc égale à la vitesse moyenne des instants passés
- faire du temps réel avec retard : tu ne calcule pas ta position actuelle (ou alors de manière approximative), mais tu calcule la position d'une seconde plus tôt : comme ça tu peux interpoler (lisser) ta courbe
- si tu as un IMU (accéléromètre + gyro) et que tu n'as pas peur d'un peu de maths, alors tu peux combiner l'IMU (très précis sur de très courtes durées mais très forte dérive sur le long terme) avec ton capteur des roues (qui semble pas très précis sur le très court terme, mais qui est probablement bon sur le moyen terme)
Ensuite, se posent plusieurs problèmes liés au fait d'utiliser l'odométrie (rotation des roues) pour déterminer ta position :
- le premier problème, surtout sur des terrains un peu complexes comme l'herbe, c'est le risque que les roues glissent un petit peu, donc que la roue tourne plus que ce que le robot avance. Même problème (en pire encore) si à un moment tu as une roue en l'air). Une solution peut être une roue supplémentaire par coté du robot, montée sur suspensions pour garantir le contact avec le sol (un simple levier et la gravité peuvent suffire) et monté sur une roue codeuse (ie un capteur de rotation) : cette roue supplémentaire n'étant pas motrice, si elle est bien alignée avec le centre de rotation du robot, ne glissera pas (en tout cas beaucoup moins) et paramétra donc d'avoir une mesure bien plus fiable
- le sol n'étant pas à 100% plat, chaque bosse rallonge un peu le trajet de la roue, et sera donc perçu comme un léger virage)
- les erreurs de quantification (ce que tu montres sur ton graphe : tu n'as pas la valeur exacte sur un temps continu, mais que des valeurs (avec une légère erreur possible) à des temps discrets)
- et le gros problème, c'est que toutes ces erreurs se cumulent : si tu as une même erreur sur les deux roues, c'est pas top, mais c'est pas encore trop grave, elle ne s'amplifiera pas au cours du temps. Mais si tu as une erreur différente entre les deux roues (bosse à droite mais pas à gauche par exemple), alors tu tournera légèrement : du coup, ton orientation sera fausse, et par conséquent tous les déplacements qui suivront seront décalés.
Pour te donner un ordre de grandeur : en école d'ingé, j'avais participé à une compétition interne de robotique, avec un budget de 1000CHF (850€) par équipe : dans mon équipe, on a décidé de miser sur une bonne odométrie : roues codeuses sur roues dédiées (non motorisées), avec des roues codeuse de bonne qualité (de mémoire, 4096 signaux/tour, je crois qu'on avait payé entre 50 et 100€ la paire). Comme terrain, c'était 3/4 moquette, 1/4 gazon artificiel. Si je me souviens bien, on arrivait à rester sous le mètre d'erreur en position pendant un peu moins de 5 minutes, au delà, ça devenait vite inexploitable.
Après, si tu as un mur qui entoure ton jardin, tu peux utiliser en plus des capteurs de distance (voir de contact) pour te recaler. Ainsi qu'un magnétomètre en guise de boussole pour éviter la dérive de l'orientation.
Avec roues codeuses sur roues indépendante (de qualité ou avec IMU en plus) + bousole + recalage sur les murs (avec quelques déplacements en plus pour aller régulièrement se recaller dans les coins), un positionnement absolut avec moins de 10 cm d'erreur ne me parait pas impossible. Mais ça demande un boulot plus conséquent (je sais pas si les modules légo offrent la puissance de calcul pour).
Pour la question sur le pourquoi de la quantification, c'est dur à dire sans connaitre le capteur, mais il y en a qui n'ont qu'une résolution très faible (le plus basic, c'est 1 signal par tour) : si le but est de mesurer la vitesse (et pas un déplacement), alors ça suffit en général