Introduction a la compilation Analyse lexicale - C2
TP3: Comportement Temps Réel de l'Agent Perception
1. TP3 : Comportement temps r´eel de l’agent
Perception
S.Benaissa
GI3-ENSEM-CASA
said.benaissa@ensem.ac.ma
2015–2016
1 Introduction
Un robot est une machine ´equip´ee de capacit´es de perception, de d´ecision et
d’action qui lui permettent d’agir de mani`ere autonome dans son environnement
en fonction de la perception qu’il en a.
Figure 1 – Architecture d’agent localisation de robot mobile.
2 Mod`ele d’agent de perception
R(O, x, y) le rep`ere fixe li´e `a l’environnement externe. La position de robot
en kem
it´eration est Pk = [xk, yk, zk] avec xk et yk les coordonn´ees 2D et θk
1
2. l’orientation dans R(O, x, y).
R (O , x , y ) le rep`ere mobile li´e au robot mobile khepera-III avec O le
centre de masse de robot. Soit Pk = [xk, yk, zk] repr´esente le d´eplacement et
l’orientation par rapport a R (O , x , y ).
Dans le rep`ere d’environnement R(O, x, y) le d´eplacement relatif ∆dk et l’orien-
tation ∆θk de robot entre deux it´erations ´el´ementaires sont :
Figure 2 – (a) :Robot mobile khepera IV. (b) : Syst`eme de coordonn´ee
R(O, x, y) et R (O , x , y ). (c) :Mod`ele de localisation de robot mobile.
∆dk=
∆dk,r+∆dk,l
2
∆θk=
∆dk,r−∆dk,l
L
∆dk,r et ∆dk,l repr´esente les d´eplacements relatifs respectivement des roues
droit et gauche. ces deux valeurs seront mesur´e par les capteurs odometriques
install´es sur chacune des deux roues. L = 140mm est la distance entre les centres
des deux roues de robot. k = 1, 2, 3, ..., n repr´esentant l’it´eration de mesure. Pour
chaque mesure k on a la position de robot :
xk+1=xk + ∆dk cos(θk + ∆θk
2 )
yk+1=yk + ∆dk sin(θk + ∆θk
2 )
θk+1= θk + ∆θk
3 A.Perception : Position Pr´edite
function [x, y, theta] = MajOdom(xk, yk, thetak, delta-dg, delta_dd, L)
delta_d = (delta_dg+delta_dd)/2; // Calcule de d´eplacement de centre de robot.
delta_theta = (delta_dd-delta_dg)/L; // Calcule d’orientation de centre de robot.
x = xk + delta_s*cos(thetak + delta_theta/2); // Mise `a jour sur x
y = yk + delta_s*sin(thetak + delta_theta/2); // Mise `a jour sur y
theta = thetak + delta_theta; // Mise `a jour sur l’orientation
2
3. – Programmer l’algorithme de mise `a jour de position de robot.
– Alimenter l’algorithme par des valeurs initiales.
– Analyser le comportement temps r´eel d’agent Perception (Cas Position
Pr´ediction).
4 A.Perception : Position Mesur´ee
1. Utiliser le code ”rodo.c” pour mesures odom´etriques.
2. Compiler ”rodo.c” via la commande ”make”.
3. Utiliser la commande ssh root@192.168.1.2 ’./rodo’ > data.txt pour r´ecup´erer
les mesures vers un fichier ”data.txt” sur votre machine.
4. Alimenter l’algorithme par des valeurs mesur´ees.
5. Analyser le comportement temps r´eel d’agent Perception (Cas Position
Estimation odom´etrique).
5 Perception : Aspect T.R´eel
Analyser le comportement temps-r´eel d’agent perception dans le cas des
mesures r´eel(estimation odom´etriques) et dans le cas de pr´ediction.
1. La distance entre les centres des deux roues de robot : L=140mm.
2. Relation entre la vitesse en pulsation vers la vitesse en mm/s : 1 pul-
se/10ms = 0.678 mm/s.
3. Relation entre la position absolue en pulsation vers la position absolue en
mm : 1 pulse = 0.006781 mm.
6 Code source
Listing 1 – Code source pour mesures odom´etriques.
/∗S . Benaissa ( said . benaissa@ensem . ac .ma)
∗ compiler via la commande : make
∗/
#include <khepera/khepera . h>
#include <s i g n a l . h>
s t a t i c knet dev t ∗ dsPic ;
int maxsp , accinc , accdiv , minspacc , minspdec ;
s t a t i c int quitReq =0;
int main ( int argc , int ∗argv [ ] )
{
int i , lpos , rpos ;
long motspeed=200;
p r i n t f (”n Read odom n ” ) ;
3
4. // i n i t libkhepera
i f ( k h4 i ni t (0 ,NULL)!=0)
{
p r i n t f (”n i n i t de libkhepera ! nn ” ) ;
return −1;
}
dsPic=knet open (” Khepera4 : dsPic ” ,KNET BUS I2C,0 ,NULL) ;
i f ( dsPic==NULL)
{
p r i n t f (”n prob comm Kh4 dsPic nn ” ) ;
return −2;
}
while (100)
{
kh4 SetMode ( kh4RegSpeedProfile , dsPic ) ;
kh4 set speed ( motspeed , motspeed , dsPic ) ;
kh4 get position (&lpos ,&rpos , dsPic ) ;
p r i n t f (”n odom : l e f t %ld | right %ld n” , lpos , rpos ) ;
}
kh4 SetMode ( kh4RegSpeedProfile , dsPic ) ;
kh4 set speed (0 ,0 , dsPic ) ;
}
Listing 2 – Makefile de compilation.
# S . Benaissa ( said . benaissa@ensem . ac .ma)
# Makefile fo r development with libkhepera
.PHONY: clean
# Modify t h i s !
#KTEAMHOME = . . / . .
KTEAMHOME =˜/khepera4 development
# And maybe these
LIBKHEPERA ROOT = ${KTEAMHOME}/ libkhepera −1.0
TARGET SYSTEM = khepera −2.6
OE HOME = / usr / l o c a l /khepera4−oetools
KHEPERA TOOLS = ${OE HOME}
KTEAM KERNEL VERSION = 2.6.24
KTEAM KERNEL HOME = ${KHEPERA TOOLS}/tmp/work/
overo−angstrom−linux−gnueabi / linux−omap3−${KTEAM KERNEL VERSION}−r97 / g i t
# And don ’ t touch these
ARCH = arm
CROSS COMPILE = arm−angstrom−linux−gnueabi−
PATH := $ (PATH) : ${KHEPERA TOOLS}/tmp/ sysroots / i686−linux / usr /armv7a/ bin
CC = ${CROSS COMPILE} gcc
CXX = ${CROSS COMPILE}g++
LD = ${CROSS COMPILE} ld
AR = ${CROSS COMPILE} ar
4
5. AS = ${CROSS COMPILE} as
INCPATH = ${LIBKHEPERA ROOT}/ build−${TARGET SYSTEM}/ include
LIBPATH = ${LIBKHEPERA ROOT}/ build−${TARGET SYSTEM}/ l i b
# Pointer to the libkhepera build directory
LIBKHEPERA = ${LIBKHEPERA ROOT}/ build−${TARGET SYSTEM}
SRCS = $ ( wildcard ∗. c )
OBJS = $ ( patsubst %.c ,%.o , ${SRCS})
INCS = −I ${LIBKHEPERA}/ include
LIBS = −L ${LIBKHEPERA}/ l i b −lkhepera −lpthread
CFLAGS = −O2
# f or debugging
#CFLAGS = −g
TARGET = template template−s t a t i c
.PHONY: a l l clean depend
r odo : r odo . o
@echo ” Building $@”
$ (CC) −o $@ $? $ (LIBS) $ (INCS) $ (CFLAGS)
template−s t a t i c : r odo . o
@echo ” Building $@”
@$(CC) −o $@ $? $ (LIBS) −s t a t i c $ (INCS) $ (CFLAGS)
a l l : ${TARGET}
clean :
@echo ” Cleaning ”
@rm −f ∗. o . depend ${TARGET} ∗˜
depend :
@echo ” Building dependencies ”
@rm −f . depend
@touch . depend
@makedepend ${SYS INCLUDES} ${INCS} −Y −f . depend ${SRCS}
%.o : %.c
@echo ”Compiling $@”
$ (CC) $ (INCS) −c $ (CFLAGS) $< −o $@
i f e q ( . depend , $ ( wildcard . depend ))
include . depend
endif
5