BH Team - Mettez un python dans votre robot !

Preview:

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/

Recommended