La BH Team participe depuis 7 ans à la Coupe de France de Robotique.
Ce challenge consiste en la conception et la réalisation complète d'un robot autonome en énergie et en commande. Les robots ainsi réalisés s'affrontent dans des matchs d'une durée de 90 secondes, sans intervention de leurs concepteurs. La principale difficulté de cette compétition est que son règlement, diffusé 9 mois à l'avance seulement, implique systématiquement un changement presque total des contraintes du jeu.
A un moment de notre parcours, nous avons eu le besoin de pouvoir décrire dans un langage de haut niveau notre stratégie. Notre expérience dans le développement logiciel nous a amené à choisir le langage Python.
Trois ans après la première édition du framework "Brewery", voici une présentation de ses capacités et des avantages qu'il confère à l'équipe.
Nous commencerons par une explication du contexte de la compétition, de l'évolution des différents modules développés par l'équipe au fur et à mesure des années, et enfin nous détaillerons les points remarquables du framework.
4. BH TEAM
6 personnes
Strasbourg, Belfort, Lyon
Depuis 2007
Meilleur classement : vice-champions de France (2011)
Ouéééééé
Dernier classement : 19 / 146
www.bhteam.org / @thebhteam
7. COMMENT CODER LA STRATÉGIE POUR
LE ROBOT ?
Multiples entrées-sorties (USB / Ethernet)
Communication asynchrone entre les composants
Tolérance aux erreurs
Pas besoin de hautes performances
Langage de haut niveau
Rapidité de modification
Utiliser des paradigmes modernes
Stacktrace
Bref "batteries included"
8. BREWERY !
Framework dédié à la robotique
Basé sur asyncore
Existe depuis 2010 (Lua → Python)
Evénementiel
Entrées multiplexées
13. SHOW ME THE CODE !
casMi(tt)
ls anSae:
dfo_ne(ef:
e netrsl)
yedMvTGas..
il oeols(.)
yedTkGas..
il aels(.)
#Sic t saeMvTGas
wth o tt oeols
#Sic t saeTkGas
wth o tt aels
casMvtGasSae:
ls oeols(tt)
dfo_ne(ef:
e netrsl)
yedMvLn(oiin1 #Sic t saeMvLn,
il oeiepsto_)
wth o tt oeie
#mv t psto 1
oe o oiin
yedMvLn(oiin2 #Sic t saeMvLn,
il oeiepsto_)
wth o tt oeie
#mv t psto 2
oe o oiin
yedNn
il oe
#Ppbc t saeMi
o ak o tt an
casTkGasSae:
ls aels(tt)
dfo_ne(ef:
e netrsl)
yedCoerpe(.)
il lsGipr..
yedNn
il oe
#Sic t saeCoerpe
wth o tt lsGipr
#Ppbc t saeMi
o ak o tt an
15. LE PROTOCOLE BH TEAM
KISS
Paquet TCP 256 octets
1 octet : type
255 octets : data
Basé sur s r c
tut
Ordres
Ouverture / fermeture actionneurs
Paramétrage
Ordres de déplacement
17. EXEMPLE
casTreDtc(aeakt:
ls urteetBsPce)
TP =3
YE
2
DFNTO =(
EIIIN
(dsac' Un8(,"eeto dsac" )
'itne, It 0 Dtcin itne) ,
(age
'nl' ,Un8(,"eeto age))
It 0 Dtcin nl" ,
(rbt
'oo' ,Unm(POETRBT OPNN_OO_AN )
Eu8OPNN_OO, POETRBTMI) ,
)
Introspection des paquets
Visualisation des logs
Génération des paquets pour l'interface web
18. UTILISATION
Mapping automatique de méthode basé sur le nom du
paquet
TurretDetect : on_turret_detect(packet)
GotoFinished : on_goto_finished(packet)
casMOjc:
ls ybet
dfo_urtdtc(akt:
e ntre_eetpce)
pit"eevdpce,dsac=}.omtpce.itne)
rn(Rcie akt itne{"fra(aktdsac)
m_bet=MOjc(
yojc
ybet)
p=TreDtc(
urteet)
#Ti clsm_beto_urtdtc()
hs al yojc.ntre_eetp
pdsac(yojc)
.ipthm_bet
29. WHAT'S NEXT ?
Unifier appels inter-module et les évènements
Moteur physique dans le simulateur
Améliorer communication entre les robots
Traitement d'image plus complexe
Faire un package réutilisable
32. CONCLUSIONS
OUI : Python et robotique font bon ménage
NON : Python ne peut pas tout faire
Gain de productivité / vitesse de dev
"Pas testé, pas validé !"
Contents de notre choix !