Upload
yannick-jost
View
320
Download
1
Embed Size (px)
DESCRIPTION
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.
Citation preview
BH TEAMMETTEZ UN PYTHON DANS VOTRE
MOTEUR ROBOT !
YANNICK
yannick (at) yjost.comPythonista depuis 1.4BH Team depuis 20099 participations à la Coupe de France de Robotique
@yanjost
La Plage Digitale
ERIC
eric.alber (at) gmail.comPythonista depuis 2.4BH Team depuis 20107 participations à la Coupe de France de Robotique
@eric_alber
BH TEAM6 personnesStrasbourg, Belfort, LyonDepuis 2007Meilleur classement : vice-champions de France (2011)
OuééééééDernier classement : 19 / 146www.bhteam.org / @thebhteam
LA COUPE DE FRANCE DE ROBOTIQUE
DE QUOI EST FAIT UN ROBOT ?
COMMENT CODER LA STRATÉGIE POURLE ROBOT ?
Multiples entrées-sorties (USB / Ethernet)Communication asynchrone entre les composantsTolérance aux erreurs
Pas besoin de hautes performances
Langage de haut niveau
Rapidité de modificationUtiliser des paradigmes modernes
StacktraceBref "batteries included"
BREWERY !Framework dédié à la robotiqueBasé sur asyncoreExiste depuis 2010 (Lua → Python)EvénementielEntrées multiplexées
ARCHITECTURE GÉNÉRALE
GESTION DES MACHINES À ÉTAT
GESTION DES MACHINES À ÉTAT
SHOW ME THE CODE !class Main(State): def on_enter(self): yield MoveToGlass(...) # Switch to state MoveToGlass yield TakeGlass(...) # Switch to state TakeGlass
class MovetoGlass(State): def on_enter(self): yield MoveLine(position_1) # Switch to state MoveLine, # move to position 1 yield MoveLine(position_2) # Switch to state MoveLine, # move to position 2 yield None # Pop back to state Main
class TakeGlass(State): def on_enter(self): yield CloseGripper(...) # Switch to state CloseGripper yield None # Pop back to state Main
STATE MACHINE PARALLÈLEclass DoParallel(State):
def on_enter(self): lb = StateMachine("barman", side = SIDE_LEFT) # Start parallel FSM rb = StateMachine("barman", side = SIDE_RIGHT) # for each side
yield MoveLine(1.0, 0.0) # Move to start position
yield None # Pop state
LE PROTOCOLE BH TEAMKISSPaquet TCP 256 octets1 octet : type255 octets : dataBasé sur struct
Ordres
Ouverture / fermeture actionneursParamétrageOrdres de déplacement
SÉRIALISATIONAPI déclarativeTypes de données
UIntFloatTableauxEnumBooléen
EXEMPLEclass TurretDetect(BasePacket): TYPE = 32 DEFINITION = ( ('distance', UInt8 (0, "Detection distance") ), ('angle' , UInt8 (0, "Detection angle") ), ('robot' , UEnum8(OPPONENT_ROBOT, OPPONENT_ROBOT_MAIN) ), )
Introspection des paquetsVisualisation des logsGénération des paquets pour l'interface web
UTILISATIONMapping automatique de méthode basé sur le nom dupaquet
TurretDetect : on_turret_detect(packet)GotoFinished : on_goto_finished(packet)
class MyObject: def on_turret_detect(packet): print("Received packet, distance={}".format(packet.distance))
my_object = MyObject()p = TurretDetect()# This calls my_object.on_turret_detect(p)p.dispatch(my_object)
CALCUL DE TRAJECTOIREUtilisation d'une "carte" du terrainMise à jour en fonction de l'état des capteursProblème de rapidité → réécriture en C
PRISE DE DÉCISION : GOAL MANAGERHeuristique
Objectifs restants réalisés par le robot et son acolyteUtilisation du pathfinding :
Distance des objectifsPosition de l'adversaire
Pas d'ordre défini mais pondération des objectifs
UTILISATION D'UNE CAMÉRAC++, OpenCVInvocation d'un subprocessTrès fiable
ONE MORETHING...
SIMULATION
PAQUETS ÉCHANGÉS
TRAJECTOIRE DEMANDÉE & RÉELLE
VITESSE DÉPLACEMENT
VITESSE ROTATION
WHAT'S NEXT ?Unifier appels inter-module et les évènementsMoteur physique dans le simulateurAméliorer communication entre les robotsTraitement d'image plus complexeFaire un package réutilisable
POUR EN SAVOIR PLUSThe source code : Twitter : Facebook : Site :
http://bitbucket.org/bhteam@thebhteam
TheBhTeamhttp://www.bhteam.org
MERCI AUX SPONSORS !
{{ yourcompany.logo }}
CONCLUSIONSOUI : Python et robotique font bon ménageNON : Python ne peut pas tout faire
Gain de productivité / vitesse de dev
"Pas testé, pas validé !"
Contents de notre choix !
CRÉDIT PHOTO
Marc ObergfellWat Horse :
le reste : (c) BH Team
http://www.mirror.co.uk/news/world-news/python-found-in-car-engine-16-ft-1309075
http://t.qkme.me/3ttns0.jpghttp://www.ludumdare.com/compo/wp-content/uploads/2013/04/i-have-no-idea-what-im-doing-dog.jpghttp://madan.wordpress.com/2007/01/06/kurukshetra-robotics-at-anna-university/