Vous êtes sur la page 1sur 3

TP1

Suivi de ligne

On considère un robot se déplaçant sur un plan et décrit par les équations d’état suivantes :
𝑥̇ = cos⁡(𝜃)
{ 𝑦̇ = sin⁡(𝜃)
𝜃̇ = 𝑢⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡
Oû θ est le cap du robot et (x,y) les coordonnées de son centre, le vecteur d’état est donné par x =
(x,y,θ).

1) Proposer un Motif pour le Robot.


2) Simuler sous MATLAB ce système avec graphisme dans différentes situations.
3) Proposer une régulation en cap pour le robot.
4) Proposer une régulation suivant une ligne ab. Il faudra que cette ligne soit attractive. Arrêter
le programme lorsque le point b est dépassé, c’est-à-dire lorsque (b – a)T(b – m) < 0.
5) Faire suivre au robot un parcours fermé composé d’une séquence de lignes ajbj,
jϵ{𝟏, … , 𝒋𝒎𝒂𝒙 }
6) Mettre plusieurs robots identiques à faire ce même circuit, Modifier les lois de commande
afin d’éviter les collisions.

Travail à faire :

1) Motif du Robot
Soit le scripte ci-dessous.
a) Dire à quoi il correspond
b) Identifier le Motif du véhicule, et essayer de le modifier à votre façon.
c) Identifier la matrice de transformation homogène utilisé, interpréter ces paramètres et
dire à quoi sert-elle.
d) Effectuer quelques opérations sur cette matrice et voir l’effet sur l’exécution,

function draw_tank(x,color,sizetank)
if (exist('sizetank')==0), sizetank=1; end;
M = sizetank*...
[ 1 -1 0 0 -1 -1 0 0 -1 1 0 0 3 3 0;
-2 -2 -2 -1 -1 1 1 2 2 2 2 1 0.5 -0.5 -1];
M=[M;ones(1,length(M))];
R=[cos(x(3)),-sin(x(3)),x(1);sin(x(3)),cos(x(3)),x(2);0 0 1];
M =R*M;
plot(M(1,:),M(2,:),color,'LineWidth',2);
end

2) Simulation du système donné.

Utiliser la méthode d’Euler pour simuler ce système.

Rappel : La méthode d’Euler peut être interpréter comme une formule de Taylor à l’ordre 1, en effet,
un système décrit par l’équation d’état 𝒙̇ = 𝒇(𝒙(𝒕), 𝒖(𝒕)), son évolution peut être approximé par
𝒙(𝒕 + 𝒅𝒕) ≈ 𝒙(𝒕) + 𝒙̇ . 𝒅𝒕 = 𝒙(𝒕) + 𝒇(𝒙(𝒕), 𝒖(𝒕)). 𝒅𝒕
considerer maintenant le scripte ci-dessous.

function tank_line
function xdot=f(x,u)
theta=x(3);
xdot=[cos(theta);sin(theta);u];
end
x=[0;0;1]; % x,y,theta
dt=0.1;u=0 ;
for t=0:dt:1;
clf(); hold on; axis([-30 30 -30 30]); axis square;
x=x+f(x,u)*dt;
draw_tank(x,'blue');
drawnow();
end
end

a) Identifier dans le scripte l’équation d’état du système que la fonction d’évolution du


système.
b) Changer la vitesse de déplacement du véhicule ainsi que la durée d’exécution.
c) Changer la consigne du cap du véhicule et noté la réaction.

3) Régulation en CAP
̅ la consigne sur le
Soit 𝜽 le cap du robot et 𝜽

cap, e est l’erreur sur le cap. Puisque e est un angle alors :

𝒆 = 𝒆 + 𝟐𝝅.

Pour pouvoir représenter cette erreur on utilise la fonction en dent de scie suivante :
𝒆
𝒆𝒇 = 𝒂𝒕𝒂𝒏⁡(𝒕𝒂𝒏 ( ))
𝟐
̅ en essayant de lui donner des valeurs de la
Exécuter le scripte ci-dessous et changer la consigne 𝜽
forme 𝒙⁡𝒆𝒕⁡𝒙 + 𝟐𝝅. Conclure.

function tank_line
function xdot=f(x,u)
theta=x(3);
xdot=[cos(theta);sin(theta);u];
end
x=[0;0;1]; % x,y,theta
dt=0.1; thetabar = -1;
for t=0:dt:30;
clf(); hold on; axis([-30 30 -30 30]); axis square;
u=atan(tan((thetabar-x(3))/2));
x=x+f(x,u)*dt;
draw_tank(x,'blue')
drawnow();
end
end

4) Régulation pour suivre une ‘ab’

Pour que le robot puisse suivre la


droite ‘ab’, il faut que la consigne
𝜃̅ s’orient toujours vers la droite
‘ab’. Sur la droite 𝜃̅ doit prendre la
valeur 𝜑.
̅ = 𝝋 − 𝒂𝒕𝒂𝒏⁡(𝒆)
On a alors : 𝜽
𝐛−𝐚
Avec 𝐞 = 𝐝𝐞𝐭⁡(⁡‖𝒃−𝒂‖ , 𝒎 − 𝒂)

Exécuter le scripte ci-dessous pour différente pente de la droite ‘ab’ et pour différentes positions
initiales du robot.

function tank_line
function xdot=f(x,u)
theta=x(3);
xdot=[cos(theta);sin(theta);u];
end
a=[-30;-4];b=[30;6];
x=[-20;20;14]; % x,y,theta
dt=0.1;
for t=0:dt:50;
clf(); hold on; axis([-30 30 -30 30]); axis square;
phi=atan2(b(2)-a(2),b(1)-a(1));
m=x(1:2);
e=det([b-a,m-a])/norm(b-a); % distance à la ligne
thetabar=phi-atan(e);
u=atan(tan((thetabar-x(3))/2));
x=x+f(x,u)*dt;
draw_tank(x,'blue');
plot([a(1);b(1)],[a(2);b(2)],'red');
drawnow();
end
end

Remarque : Développer les scriptes des question 5 et 6.

Vous aimerez peut-être aussi