CALCULS DE TRAJECTOIRES

Transcription

CALCULS DE TRAJECTOIRES
CALCULS DE TRAJECTOIRES
CALCUL DE LA POSITION REELLE APRES DEPLACEMENT
GENERATION DES CONSIGNES
OPTIMISATION DES TRAJECTOIRES
Calcul de position :
Le calcul de position par odométrie consiste en la récupération des déplacements réels des
roues du robot. A partir de ces données, on va calculer le déplacement relatif [dx,dy] et la
variation d’orientation β du robot.
M1
d : Distance entre les roues, dans l’unité de
mesure des codeurs.
dy
Mi : Distance parcourue par une roue
R
M2
R : Rayon de courbure
β
d
M1 = β.(R+ d )
2
M 2 = β.(R− d )
2
: variation d’angle décrit par le robot (radian)
dx
M1 = βR+ β d
2
M 2 = βR− β d
2
R= M1 + M 2
2.β
β = M1 − M 2
d
dx =R.(1−cos(β))
dy= R.sin(β)
Ces formules sont valables quelques soient le sens de déplacement du robot (avant ou
arrière), et le sens du virage (gauche ou droite).
Pour indication, on obtient les valeurs d’angle et de rayon de courbure suivantes, selon
l’évolution du robot :
y
R<0
β<0
R>0
β>0
x
R<0
β>0
R>0
β<0
2
Système d’unité du robot :
Comme le robot ne connaît pas plus le mètre que le feet ou les inchs, on va créer une
unité. Ce pourrait être le broglub, très courus sur Araounda la nébuleuse, ou le Casta (un
sous multiple du tour de poitrine de Leatitia, valeur universelle en soit). Non, ce sera
l’Intervalle Robot « Ir ».
Pour donner une valeur de correspondance, je donne le calcul :
Prenez un moteur réducteur + codeur d’un rapport de 1/6,3
Comptez 500 ppt pour le codeur
Rajoutez un rapport de 0,75 de par la transmission par engrenage.
Mettez une roue de 99,76 mm de diamètre, soit un périmètre de 313,4 mm
Prenez un shaker, secouez, servez chaud : 13,4014 impulsions / mm
Soit le Ir à 74,61905 µm.
La distance entre les deux roues du robot est de 1716,3831 Ir.
Le point de référence pour toutes les
commandes se trouve exactement
entre les deux roues.
d
3
Génération des consignes :
Calcul des consignes M1=f1(dx,dy) et M2=f2(dx,dy) à envoyer aux moteurs. Ces calculs sont
donné pour un vecteur relatif (coordonnés par rapport à la position actuelle du robot).
dx=R.(1−cos(β))
dy=R..sin(β)
dx.sin(β)=dy.(1−cos(β))
dx.2.sin(ϕ).cos(ϕ)=dy.2.sin ²(ϕ)
dx.cos(ϕ)=dy.sin(ϕ)
dx = tan(ϕ)
dy
On pose β =2.ϕ
β =2.arctan(dx )
M1 = β(R + d )
2
dy
R=
dy
sin(β)
M 2 = β(R− d )
2
Rectification de trajectoires :
Ces formules utilisée seules cela pourraient induire des trajectoires qui prennent trop
de débattement. L’extrême étant un déplacement avec dy=0, le robot décrit un demi cercle
complet, et l’angle final est égal à 180°
Marche avant
β
β
y
V
De
α
Marche arrière
x
4
On remarque que β = 2.α. L’orientation finale du robot est le double de l’orientation du
vecteur de consigne.
On remarque également que De, la valeur du ventre entre la corde et l’arc de cercle, est
d’autant plus élevé que α l’est.
On en déduit que pour α comprit entre 0° et 22,5°, la déviation du robot reste acceptable (0°
à 45°) et De faible. Cela impose que dy≥2,41.dx .
A titre indicatif, on peut estimer l’écart relatif ∆ :
∆=2. De
v
R− R²− 1 (dx² +dy²)
4
∆ = 2.
dx² +dy²
Cette valeur est l’expression de l’erreur maximale lors du déplacement. La valeur max est
obtenue pour dy=0, De= dx et ∆ = 1
2
5
Modification d’orientation :
Plutôt que de faire une trajectoire à la con, il est plus futé de mettre le robot dans une
orientation favorable. Pour cela, on effectue une rotation sur place, dx=dy=0. Ensuite, on
prendra le chemin le plus court pour se placer en [dx,dy]
On prendra logiquement pour β, l’angle α du vecteur de consigne : α = Arc tan( dx )
dy
M 1 = β. d
2
M 2 =−β. d
2
Bien entendus, dans ce cas, il est impératif de recalculer l’orientation du robot après
exécution de la commande de rotation, pour prendre en compte l’erreur dans la commande
de déplacement. On obtient un logigrame de ce genre :
Début
dy≥2,41.dx ?
Calcul de M1 et
M2 réorientation
Réorientation
Calcul position et
orientation réelle
Calcul [dx’,dy’]
dans la nouvelle
base
Calcul de M1 et
M2 déplacement
Exécution
déplacement
fin
6
Calcul du vecteur de consigne dans une nouvelle base de même
origine :
En modifiant l’orientation à l’origine du robot, on modifie également les coordonnées du
vecteur. C’est même le but d’une réorientation.
dy’
dy
δ
dx'=dx.cos(δ)−dy.sin(δ)
dx’
dx
dy'=dy.cos(δ)+dx.sin(δ)
Calcul du vecteur de consigne dans une base colinéaire :
On ne pourra éviter un léger déplacement pendant une réorientation. De plus, cette fonction
sera utilisé par les générations avancées de trajectoires.
Un brave français du nom de
Michel Chasles en a déjà parlé,
mais on s’en lasse pas :
dx'=dx−Vx
dy'=dy−Vy
V
7
Généralisation pour un déplacement quelconque :
Simple, on tient compte des deux phénomènes :
dx'=(dx−Vx).cos(δ)−(dy −Vy).sin(δ)
dy'=(dy −Vy).cos(δ)+(dx−Vx).sin(δ)
Optimisation de trajectoire, prise en compte d’une consigne
d’angle :
Il peut être intéressant d’arriver au point désigné avec un angle précis. Pour cela, on
peut calculer un point de retrait. Bien entendu, il est des orientations particulières pour
lesquelles cette fonctionnalité n’est pas judicieuse. On peut alors définir des conditions
particulières d’utilisation.
Une consigne complète ne se
contente pas d’un déplacement. On
doit également prendre en compte
l’angle souhaité à l’arrivée.
Ici, en rouge, le vecteur de
consigne de déplacement. En vert,
la consigne d’orientation finale.
Restrictions :
•
•
Le vecteur de déplacement doit être suffisamment important pour que la modification
de trajectoire ne soit pas trop sensible.
Si l’angle final est égal à l’opposé de l’angle du vecteur de déplacement, à une
variation près. Cela revient à rouler sur l’objectif avant de se placer. C’est souvent
inutile de prendre des précautions.
Ces restrictions, sous forme mathématique s’expriment par :
•
•
dx²+dy² > Vmin. Vmin représente le module minimum du vecteur de déplacement
au carré.
[ – + ; + + ]. µ représente l’ouverture d’angle à éviter.
8
2µ
C
Calcul du point de retrait C:
Le vecteur de retrait est calculé sur une base de longueur fixe Vret, et une orientation égale
à l’orientation finale souhaitée.
Vretx = Vret.sin( )
Vrety = Vret.cos( )
Cx = dx - Vret.sin( )
Cy = dy - Vret.cos( )
La longueur Vret est à déterminer, bien entendus, toujours dans le système d’unité du robot.
Pour effectuer cette trajectoire, on réalisera les éléments suivant :
1. Calcul du point C.
2. Si nécessaire modification d’orientation vers le point C.
3. Si nécessaire, re-calcul des points C et objectif final (point et angle) une fois
modification d’orientation effectuée.
4. Déplacement vers le point C.
5. Calcul du nouvel angle et du nouvelles coordonnées du point final dans la base du
robot en C.
6. ré-Orientation dans l’angle .
7. Calcul des coordonnées du point final.
8. Déplacement vers le point final.
9