Transcript
Page 1: BH Team - Mettez un python dans votre robot !

BH TEAMMETTEZ UN PYTHON DANS VOTRE

MOTEUR ROBOT !

Page 2: BH Team - Mettez un python dans votre robot !

YANNICK

yannick (at) yjost.comPythonista depuis 1.4BH Team depuis 20099 participations à la Coupe de France de Robotique

@yanjost

La Plage Digitale

Page 3: BH Team - Mettez un python dans votre robot !

ERIC

eric.alber (at) gmail.comPythonista depuis 2.4BH Team depuis 20107 participations à la Coupe de France de Robotique

@eric_alber

Page 4: BH Team - Mettez un python dans votre robot !

BH TEAM6 personnesStrasbourg, Belfort, LyonDepuis 2007Meilleur classement : vice-champions de France (2011)

OuééééééDernier classement : 19 / 146www.bhteam.org / @thebhteam

Page 5: BH Team - Mettez un python dans votre robot !

LA COUPE DE FRANCE DE ROBOTIQUE

Page 6: BH Team - Mettez un python dans votre robot !

DE QUOI EST FAIT UN ROBOT ?

Page 7: BH Team - Mettez un python dans votre 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"

Page 8: BH Team - Mettez un python dans votre robot !

BREWERY !Framework dédié à la robotiqueBasé sur asyncoreExiste depuis 2010 (Lua → Python)EvénementielEntrées multiplexées

Page 9: BH Team - Mettez un python dans votre robot !
Page 10: BH Team - Mettez un python dans votre robot !

ARCHITECTURE GÉNÉRALE

Page 11: BH Team - Mettez un python dans votre robot !

GESTION DES MACHINES À ÉTAT

Page 12: BH Team - Mettez un python dans votre robot !

GESTION DES MACHINES À ÉTAT

Page 13: BH Team - Mettez un python dans votre robot !

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

Page 14: BH Team - Mettez un python dans votre robot !

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

Page 15: BH Team - Mettez un python dans votre robot !

LE PROTOCOLE BH TEAMKISSPaquet TCP 256 octets1 octet : type255 octets : dataBasé sur struct

Ordres

Ouverture / fermeture actionneursParamétrageOrdres de déplacement

Page 16: BH Team - Mettez un python dans votre robot !

SÉRIALISATIONAPI déclarativeTypes de données

UIntFloatTableauxEnumBooléen

Page 17: BH Team - Mettez un python dans votre robot !

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

Page 18: BH Team - Mettez un python dans votre robot !

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)

Page 19: BH Team - Mettez un python dans votre robot !

CALCUL DE TRAJECTOIREUtilisation d'une "carte" du terrainMise à jour en fonction de l'état des capteursProblème de rapidité → réécriture en C

Page 20: BH Team - Mettez un python dans votre robot !

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

Page 21: BH Team - Mettez un python dans votre robot !

UTILISATION D'UNE CAMÉRAC++, OpenCVInvocation d'un subprocessTrès fiable

Page 22: BH Team - Mettez un python dans votre robot !

ONE MORETHING...

Page 23: BH Team - Mettez un python dans votre robot !
Page 24: BH Team - Mettez un python dans votre robot !

SIMULATION

Page 25: BH Team - Mettez un python dans votre robot !

PAQUETS ÉCHANGÉS

Page 26: BH Team - Mettez un python dans votre robot !

TRAJECTOIRE DEMANDÉE & RÉELLE

Page 27: BH Team - Mettez un python dans votre robot !

VITESSE DÉPLACEMENT

Page 28: BH Team - Mettez un python dans votre robot !

VITESSE ROTATION

Page 29: BH Team - Mettez un python dans votre robot !

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

Page 30: BH Team - Mettez un python dans votre robot !

POUR EN SAVOIR PLUSThe source code : Twitter : Facebook : Site :

http://bitbucket.org/bhteam@thebhteam

TheBhTeamhttp://www.bhteam.org

Page 31: BH Team - Mettez un python dans votre robot !

MERCI AUX SPONSORS !

{{ yourcompany.logo }}

Page 32: BH Team - Mettez un python dans votre robot !

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 !

Page 33: BH Team - Mettez un python dans votre robot !

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