ISN - Robotique

Suivre un mur

Question

Le robot doit suivre un mur (celui de droite par exemple). On essaiera de minimiser au maximum l'effet de gigue.

Le robot doit rester à une distance de 5cm du bord du mur +/- 2,5mm.

Suivre un mur
Solution

function azolla.main(azolla)

  while true do

    front = azolla:readsensor(0)

    right = azolla:readsensor(1)

    if(front<10) then

      azolla:setspeed(-10,10)

    else

      if(right>5.25) then

        azolla:setspeed(4,5) --Correction

      else

        if(right<4.75) then

          azolla:setspeed(5,4) --Correction

        else

          azolla:setspeed(5,5)

        end

      end

    end

    azolla:stepforward()

  end

end

Tentative d'amélioration du comportement

L'observation du comportement montre que :

  • lorsqu'on augmente la vitesse de correction, on obtient une grande instabilité (fréquence de la gigue) mais une faible amplitude de l'erreur de position par rapport au mur. Le robot avance lentement.

  • lorsque l'on diminue la vitesse de correction, on obtient une meilleure stabilité mais une plus grande amplitude de l'erreur de position par rapport au mur. Le robot avance plus vite.

La vitesse de correction a donc une influence sur la position par rapport au mur et sur la vitesse globale de déplacement du robot. Dans l'algorithme précédent, on a corrigé la trajectoire en imposant une vitesse de correction identique quelque soit la position du robot par rapport au mur.

Il serait bon de pouvoir moduler cette vitesse de correction en fonction de la position du robot. Une solution envisageable est de calculer une loi de vitesse permettant d'augmenter cette vitesse de correction lorsque le robot s'éloigne de la position voulue et de la diminuer lorsque le robot se rapproche de la position voulue.

Correction proportionnelle

Question

Ce type de correcteur s'appelle « Correcteur proportionnel ».

L'expression de la vitesse de correction est donc :

Vitesse de correction proportionnelle

On appliquera donc les vitesses suivantes sur les moteurs :

  • Moteur droit : Vmoy + Vc

  • Moteur gauche : Vmoy – Vc

Remarque : Le coefficient de correction est généralement noté Kp (coefficient du correcteur proportionnel). Ici, Kp=4Vmax

On pourra modifier la valeur de Kp et vérifier le comportement du robot

Solution

Avec correcteur PID

function azolla.main(azolla)

  Vmoy=10

  moyenne = 5

  somme=0

  derive=0

  ErreurPrecedente=0

  Kp=9 -- Coefficient de correction proportieonnelle

  Ki=0.01 -- Coefficient de correction intégrale

  Kd=20 -- Coefficient de correction dérivé

  while true do

    front = azolla:readsensor(0)

    right = azolla:readsensor(1)

    delta = right - moyenne

    somme=somme+delta

    derive=delta-ErreurPrecedente

    Vc=Kp*delta+Ki*somme+Kd*derive

    if(front<moyenne) then

      azolla:setspeed(-5,5)

    else

      azolla:setspeed(Vmoy+Vc,Vmoy-Vc)

    end

    ErreurPrecedente=delta

    azolla:stepforward()

  end

end

PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimerRéalisé avec Scenari (nouvelle fenêtre)