scieee Science in your language
[fr] (orig)

Projet Poppy Humanoid

Abstract

Poppy Humanoid est une plate-forme humanoïde open-source basée sur l'impression 3D. Le projet aborde la mécanique, l’ électronique et le software du robot. Il regroupe une communauté multidisciplinaire de chercheurs, enseignants, artistes et amateurs de robotique qui peuvent partager leur travail et leurs idées. Le robot a été conçu pour qu’il ait une façon simple d’utilisation. Il a aussi un assemblage facile et modulable parce qu’il a un but pédagogique pour des élèves de lycée ou d’école d’ Ingénieurs.

Read accessible full text

Projet Poppy Humanoid

Author: Rizzo, Gabriele
Publisher: Universitat Politècnica de Catalunya,Arts et Métiers ParisTech
Year: 2014
Source: https://upcommons.upc.edu/bitstream/2117/81555/1/rapport_Gabriele_Rizzo.pdf
P oje POPPY HUMANOID
RIZZO
Gab iele
1
ANNÉE%:"2015
CENTRE&DE&RATTACHEMENT&PE&:"A s"e "Mé ie s"Pa isTech"Bo deaux9
Talence""
AUTEURS&:"Gab iele"Rizzo!
TITRE&:""P oje "Poppy"Humanoid
TUTEUR:&P o ."Jean9Luc"CHARLES!
!
NOMBRES&DE&PAGES&:&35&
NOMBRE&DE&REFERENCES&BIBLIOGRAPHIQUES&:"9"
2
Table des ma iè es
I. REMERCIEMENTS 4
II. INTRODUTION
1. PRÉSENTATION DU ROBOT 5
2. PRÉSENTATION DU MATÉRIEL HARDWARE 5
3. DESCRIPTION DU ROBOT 6
4. PYPOT LIBRARY 7
5. INSTALLATION POPPYTOOLS 7
III. LE CÂBLAGE
1. HAUT DU CORPS 8
2. BAS DU CORPS 9
IV. DÉMARRAGE DU ROBOT
1. PREMIER DÉMARRAGE 10
2. CODE DE PRÉSENTATION DU ROBOT 15
V. CONCEPTION DES BATTERIES 17
VI. LA TÊTE DU ROBOT
1. DESCRIPTION DE LA TÊTE 21
2. CARTE ODROID U3 22
3 LA CAMÉRA JDEPC-OV05 23
VII. ALGORITHME DE RECONNAISSANCE DE VISAGE 24
VIII. CONCLUSIONS
1. BILAN DE L’EXPÉRIENCE 27
2. POUR POURSUIVRE, DES PISTES D’AMÉLIORATION 27
IX. RÉFÉRENCES BIBLIOGRAPHIQUES 28
X. ANNEXES 29
3
I. REMERCIEMENTS
Mes eme ciemen s on ou d’abo d à M . Jean-Luc CHARLES pou m’a oi
pe mis de éalise ce p oje ès en ichissan .
Je eme cie égalemen M . Ma hieu CREMOUX e M . Dominique DOROSZEWSKI
pou leu p ésence e leu aide dans les phases des a aux.
En in, me ci à ma amille e mes amis qui son une sou ce con inue de mo i a ion.
4
II. INTRODUTION
1. PRÉSENTATION DU ROBOT
Poppy Humanoid es une pla e- o me humanoïde open-sou ce basée su l'imp ession
3D.
Le p oje abo de la mécanique, l’ élec onique e le so wa e du obo .
Il eg oupe une communau é mul idisciplinai e de che cheu s, enseignan s, a is es e
ama eu s de obo ique qui peu en pa age leu a ail e leu s idées.
Le obo a é é conçu pou qu’il ai une açon simple d’u ilisa ion. Il a aussi un
assemblage acile e modulable pa ce qu’il a un bu pédagogique pou des élè es de
lycée ou d’école d’ Ingénieu s.
2. PRÉSENTATION DU MATÉRIEL HARDWARE
-Les pièces imp imées en imp ession 3D
- Les se omo eu s Dynamixel
-Ca e de dé eloppemen
5

3. DESCRIPTION DU ROBOT
Poppy dispose de 25 se omo eu s Dynamixel e chaque mo eu es iden i ié pa un
id. (Voi igu e 1)
Figu e 1 - con en ion de é é ence des mo eu s
6
4. PYPOT LIBRARY
Pypo es un paque dé eloppé dans l’équipe Flowe s de l’In ia pou end e acile e
apide le con ôle du obo basé su les se omo eu s dynamixel. Le code a é é éc i
en langage Py hon pou acili e le a ail des dé eloppeu s pas expe s e pou
béné icie des paque s scien i iques e de machine lea ning exis an s en Py hon.
Pypo peu ê e u ilisé a ec Py hon 2.7 e 3.4 e exige le paque pyse ial (minimum
2.6) e numpy.
Pou l’ins alla ion il su i de ape la commande:
pip ins all pypo
5. INSTALLATION POPPYTOOLS
Le dossie poppy ools dans poppy-so wa e inclu la con igu a ion du obo e
plusieu s p imi i es indépendan es. Les p imi i es indépendan es pe me en de c ée
des p og ammes complexes pa leu combinaison.
Pou l’ins alla ion:
cd whe e-you-wan
gi clone h ps://gi hub.com/poppy-p ojec /poppy-so wa e.gi
cd poppy-so wa e
py hon se up.py de elop
7
III. LE CÂBLAGE
On peu di ise le obo en deux pa ies pou la desc ip ion du câblage: le hau (en
ouge) e le bas (en e ). Chaque pa ie u ilise un Bioloid 3P Ex ension Boa d e un
SMPS2 Dynamixel.
Figu e 2 - ep ésen a ion des câbles
1. HAUT DU CORPS
Le Bioloid 3P Ex ension Boa d du hau du co ps es connec é au SMPS2 Dynamixel
e aux mo eu s “head_y (id=37)”, “head_z (id=36)”, “ _shoulde _y (id=51)”,
“l_shoulde _y (id=41)” e “bus _x (id=35)”. En in, la pa ie supé ieu e du obo es
a achée à l’USB HUB 4 PORTS pa le mo eu “head_y (id=37)”.
8
2. BAS DU CORPS
Le Bioloid 3P Ex ension Boa d du bas du co ps es connec é au SMPS2 Dynamixel e
aux mo eu s “ _hip_x (id=11)” e “l_hip_x (id=21)”. La pa ie in é ieu e du obo es
a achée à l’USB HUB 4 PORTS pa le SMPS2 Dynamixel.
Pou connec e les mo eu s “ _hip_y (id=23)” - “ _knee_y (id=24)” e “l_hip_y
(id=13)” - “l_knee_y (id=14)” on a besoin d’un câble d'au moins 20cm de long (Voi
igu e 3a) e pou la connexion USB HUB 4 PORTS - SMPS2 Dynamixel d’un câble
de 60cm.
Figu e 3 - a) hanche du obo , b) Bioloid 3P Ex ension Boa d e SMPS2 Dynamixel su le bas du
co ps, c) hau du co ps
9
Les images sui an es mon en les ois modes possibles:
Figu e 7 - a) mode P esen a ion, b) mode CopyA m, c) mode Reco ding
16
le mode P esen a ion
e ec ue une sé ie de
mou emen s. Une pa ie a
é é en egis é a an en
déplaçan le obo e l'au e
pa ie a é é ob enue a ec le
code en déplaçan les
mo eu s du obo jusqu'à
ce aines posi ions.
CopyA m pe me au b as
d oi du obo d’imi e les
mou emen s qu’on ai
a ec son b as gauche.
le mode Reco ding
pe me d'en egis e
un mou emen o cé
pa l’u ilisa eu e de
le ep odui e ap ès
de o me au onome
a ec PlayReco d.

V. CONCEPTION DES BATTERIES
•Consomma ion d’éne gie:
-plage de ension: 10 ~14.8V ( ension ecommandée 12V)
- cou an élec ique: minimum (les mo eu s son dans le mode ‘complian ’) 1.53A
e le cou an maximum en egis ée au cou s de la p ésen a ion es 2A
•Limi es de couple (couple de déc ochage):
- MX-64 : 5.5 Nm (a 11.1V, 3.9A), 6.0N.m (a 12V, 4.1A)
- MX-28 : 2.3N.m (a 11.1V, 1.3A), 2.5N.m (a 12V, 1.4A)
•Poids des mo eu s:
-MX-64: 126g
-MX-28: 72g
•Temps d’au onomie:
- héo iquemen on a une heu e de ie a ec la ba e ie 2000mAh
• Chimie disponibles:
- Alkaline: pas considé é pou ce p oje (cons ammen besoin d'ache e des
emplacemen s)
- Nickel:
1. NiCd: Ces ba e ies son en ain de dispa aî e à cause de leu
mémoi e e e
2. NiMh: ils son echa geables (il n'y a p esque pas d'e e
mémoi e) e une bonne
ela ion p ix / capaci é / poids. Temps de cha ge long.
P incipale solu ion: 12V pou 540g de poids.
P ix: à pa i de 40 $
17
- Lead acid: ces ba e ies on le p oblème d'ê e ès olumineuses e lou des,
elles doi en oujou s ê e main enues, elles n’on pas la i esse de
décha ge éle ée qu’on les ba e ies plus mode nes.!
- Li hium: elles son légè es, le emps de décha ge es éle é e elles on
ela i emen bonne capaci é. La ension augmen e dans les é apes
de 3.7V. Pa conséquen , les solu ions possibles son les sui an es:
1. ois ba e ies de 3.7V, poids: 45g chacune,
p ix de chaque ba e ie: 20€
2. une ba e ie de 11.1V, poids: 150g, p ix: 50 €
•Emplacemen : dans le cas d’une seule ba e ie, la seule solu ion es de la ixe au
abs_x mo eu (id = 32). Le p oblème de ce e solu ion es que la pa ie supé ieu e
du obo es déjà assez lou de e a ai e la dynamique du obo plus di icile.
Figu e 8 - zoom abs_x mo eu (id = 32)
18
Le deuxième cas es quand nous a ons ois ba e ies. Dans ce e solu ion, nous
pou ons localise une ba e ie de l'alimen a ion dans chaque jambe (en e la hanche e
le genou) e l’au e ba e ie a aché aux mo eu s _hip_x (id = 11) e l_hip_x (id =
21). La seule limi a ion de ce e solu ion pou ai ê e le couple maximal ou ni pa
les mo eu s _hip_y (id = 23) e l_hip_y (id = 13). Sans la ba e ie, la dynamique de
la jambe de Poppy es ai e a ec le 21% du couple maximal des mo eu s l_hip_y (id =
13) e _hip_y (id = 23). Pa conséquen , on considè e qu’une augmen a ion
app oxima i e de 100g pou chaque jambe ne a pas ê e un p oblème.
Figu e 9 - zoom _hip_y (id = 23) e l_hip_y (id = 13) mo eu s
•Consomma ion d’éne gie pa Od oid U3:
- puissance: 5V / 2A
Il au u ilise un ans o ma eu de ension 5V-12V comme celui de l’image
sui an e.
Figu e 10 - con e isseu 5/12 V
19
Solu ion mise en œu e:
- 3 Accumula eu s LG Li hium-Ion en sé ie a ec les ca ac é is iques sui an es:
Figu e 11 - solu ion ois ba e ies
Les images sui an es mon en le câblage pou les ba e ies
Figu e 12 - câblage pou les ba e ies
20
Tension (V)
Consomma ion cou an (mAh)
Dimension (mm)
Poids (g )
3.6
2600
69/21/18.5
60
VI. LA TÊTE DU ROBOT
1. DESCRIPTION DE LA TÊTE
Figu e 13 - 3D ê e du obo
La ê e de la e sion 1.0 de Poppy Humanoid a é é conçue pou con eni :
- ca e Od oid U3
-mo eu MX-28
-camé a JDEPC-OV05
-USB HUB 4 po s
-EDIMAX Wi eless 802.11b/g/n
-J14 VISATON hau -pa leu K 20.40
-S e eo Ampli ie MAX 98306
modi ica ions:
-l'éc an a é é emplacé pa une pièce en plas ique
-un pe i ou a é é ajou é pou la so ie des câbles à l'a iè e de la ê e
21

2. CARTE ODROID U3
Figu e 14 - ca e Od oid U3 mise en œu e
Ca ac é is iques:
- The Powe ul Linux Compu e
- 1.7GHz Quad-Co e p ocesso and 2GBy e RAM
- 10/100Mbps E he ne wi h RJ-45 LAN Jack
- 3 x High speed USB2.0 Hos po s
- Audio codec wi h headphone jack on boa d
- GPIO/UART/I2C po s
- XUbun u 13.10 o And oid 4.x Ope a ing Sys em
- Taille : 83 x 48 mm, Poids : 48g including hea sink
- Package includes he main boa d and he hea sink
Figu e 15 - dé ails Od oid U3
22
3. LA CAMÉRA
Les ca ac é is iques que la camé a doi a oi son :
-connexion USB
-un pe i PCB (le ‘p in ed ci cui boa d’ augmen e la e sa ili é de la came a e
édui l'espace nécessai e)
-une pe i e len ille qui n’es pas isible su la ê e de Poppy
- acilemen accessible
Solu ion mise en œu e:
-Camé a JDEPC-OV05:
- 1/4” CMOS cap eu d’image a ec hau e quali é
- in e ace USB 1.1/2.0
- pas besoin de d i e pou Linux
- onc ion ision noc u ne
- camé a pe i e
- hau e iabili é
- aille: 60 * 8.0 * 6.6 mm
Figu e 16 - camé a JDEPC-OV05
23
VII. ALGORITHME DE RECONNAISSANCE DE VISAGE
Le code sui an es u ilisé pou ajou e un algo i hme de econnaissance de isage à
la p esen a ion du obo .
Pou l’u ilisa ion il au a oi :
-OpenCV ins allé
sudo ap -ge ins all py hon-openc
-camé a en se ice
-le ichie haa cascade_ on al ace_al 2.xml dans le même dossie où il y a le code
cd Bu eau/poppy/my_code
py hon p esen a ion_wi h_came a.py
“p esen a ion_wi h_came a.py” (code comple A.3.)
de Recogni ion():
cascPa h = os.ge cwd()+'/haa cascades/haa cascade_ on al ace_al 2.xml' # Name o
he ile om which he classi ie is loaded. I is a ained classi ie o de ec ing
aces
aceCascade = c 2.CascadeClassi ie (cascPa h) #Objec de ec o
ideo_cap u e = c 2.VideoCap u e(0) #I se s he ideo sou ce o he de aul webcam
lag = 1
p in 'P ess C l-C o s op he cu en p og am'
y:
while T ue:
# Cap u e ame-by- ame
e , ame = ideo_cap u e. ead()
i no e : con inue
g ay = c 2.c Colo ( ame, c 2.COLOR_BGR2GRAY) #Con e s an image om one
colo space o ano he
aces = aceCascade.de ec Mul iScale(
g ay, # Ma ix o he ype CV_8U con aining an image whe e objec s
a e de ec ed
scaleFac o =1.1, #Pa ame e speci ying how much he image size is
educed a each image scale
minNeighbo s=5, #Pa ame e speci ying how many neighbo s each
candida e ec angle should ha e o e ain i
minSize=(40, 40),
#minSize=(30, 30),# Minimum possible objec size. Objec s smalle
han ha a e igno ed
lags=c 2.c .CV_HAAR_SCALE_IMAGE
) # I de ec s objec s o di e en sizes in he inpu image. The de ec ed
objec s a e e u ned as a lis o ec angles
aces2= lis ( aces) # I changes he ace objec in lis ype o simpli y
he I loop.
24
i no aces2:
p in 'no ace'
else:
p in 'go ace'
lag = lag + 1
i lag is 10: # he obo mo e a e 9 posi i e esul s
k[idm54].go o_posi ion(80, 2.0)
k[idm51].go o_posi ion(-100, 2.0)
lag= 11
# D aw a ec angle a ound he aces
o (x, y, w, h) in aces:
c 2. ec angle( ame, (x, y), (x+w, y+h), (0, 255, 0), 2)
# Display he esul ing ame
c 2.imshow('Video', ame)
i c 2.wai Key(1) & 0xFF == o d('q'):
b eak
# When e e y hing is done, elease he cap u e
excep Keyboa dIn e up :
ideo_cap u e. elease()
c 2.des oyAllWindows()
BackPosi ion()
pass
Le dé ec eu d'obje déc i a é é ini ialemen p oposée pa Paul Viola e dé eloppé pa
Raine Lienha .
Tou d’abo d, un classi ica eu es o mé a ec quelques images d’example d'un obje
pa iculie (dans ce cas un isage) appelés exemples posi i s qui on ous la même
aille (pa exemple, 30x30), e des exemples néga i s qui son images a bi ai es de la
même aille.
Ap ès que le classi ica eu es o mé, il peu ê e appliqué à une égion d’in é ê .
Le classi ica eu es conçu de so e qu'il peu ê e acilemen edimensionné a in de
ou e les obje s d’in é ê des ailles di é en es, ce qui es plus e icace que le
edimensionnemen de l'image elle-même.
Le mo “cascade" signi ie que le classi ica eu se compose de plusieu s classi ica eu s
similai es (é apes) qui son appliqués à une égion d'in é ê jusqu'à que le candida es
eje é ou ou es les é apes son c oisées. Les classi ica eu s de base son
classi ica eu s ‘decision- ee’ a ec au moins 2 b anches.
25
o m in poppy.mo o s:
m.go o_posi ion(0, 2.5)
ime.sleep(3.0)
############################################################
# a iable de ini ion
k = poppy.mo o s
idm23 = 22
idm24 = 23
idm25 = 24
idm13 = 17
idm14 = 18
idm15 = 19
idm51 = 11
idm41 = 7
idm54 = 14
idm44 = 10
idm52 = 12
idm42 = 8
idm53 = 13
idm43 = 9
cha = None
#############################################################
## main p og am
#s a ing p esen a ion
S a ingPos()
Si ingPos()
p in 'si down he obo and hold i om he handle pls'
aw_inpu ("p ess En e i you a e eady o con inue..")
p in 'The p esen a ion is s a ing..'
ShakingLegs()
ime.sleep(0.5)
Hands2 ab()
ime.sleep(1)
PlayHello()
#ask di e en op ions
AskWha 2Do1()
while T ue:
AskKeyP ess()
i cha == ' ':
Reco ding()
AskWha 2Do2()
cha = None
eli cha == 'c':
CopyA m()
AskWha 2Do1()
cha = None
eli cha == 'p':
P esen a ion()
AskWha 2Do1()
cha = None
eli cha == 'm':
PlayReco d()
AskWha 2Do2()
cha = None
else:
b eak
# inal posi ion
ime.sleep(1)
FinalPos()
p in 'going o inish...'
aw_inpu ("p ess En e i you wan o make he mo o s complian ..")
Mo o sCompl()
32

A.2 “in e ac ion.py”
#my code add
class MyA msCopyMo ion(pypo .p imi i e.LoopP imi i e):
de s a (sel ):
o m in sel . obo .a ms:
m.mo ing_speed = 0
o m in sel . obo .l_a m:
m.complian = T ue
o m in sel . obo . _a m:
m.complian = False
pypo .p imi i e.LoopP imi i e.s a (sel )
de upda e(sel ):
o lm, m in zip(sel . obo .l_a m, sel . obo . _a m):
m.goal_posi ion = lm.p esen _posi ion * (1 i lm.di ec else -1)
de ea down(sel ):
o m in sel . obo .a ms:
m.complian = False
ime.sleep(2)
o m in sel . obo .a ms:
m.mo ing_speed = 0
33
A.3 “p esen a ion_wi h_came a.py”
impo h ead
impo ime
impo sys, y, e mios
impo c 2
impo os
impo pypo . obo
om pypo .p imi i e.mo e impo Mo eReco de , Mo e, Mo ePlaye
om poppy ools.con igu a ion.con ig impo poppy_con ig
om poppy ools.p imi i e.in e ac ion impo MyA msCopyMo ion
poppy = pypo . obo . om_con ig(poppy_con ig)
poppy.s a _sync()
##############################################################
# unc ions de ini ion
. . .
de Recogni ion():
cascPa h = os.ge cwd()+'/haa cascades/haa cascade_ on al ace_al 2.xml' # Name o he ile om which he
classi ie is loaded. I is a ained classi ie o de ec ing aces
aceCascade = c 2.CascadeClassi ie (cascPa h) #Objec de ec o
ideo_cap u e = c 2.VideoCap u e(0) #I se s he ideo sou ce o he de aul webcam
lag = 1
p in 'P ess C l-C o s op he cu en p og am'
y:
while T ue:
# Cap u e ame-by- ame
e , ame = ideo_cap u e. ead()
i no e : con inue
g ay = c 2.c Colo ( ame, c 2.COLOR_BGR2GRAY) #Con e s an image om one colo space o ano he
aces = aceCascade.de ec Mul iScale(
g ay, # Ma ix o he ype CV_8U con aining an image whe e objec s a e de ec ed
scaleFac o =1.1, #Pa ame e speci ying how much he image size is educed a each image
scale
minNeighbo s=5, #Pa ame e speci ying how many neighbo s each candida e ec angle should
ha e o e ain i
minSize=(40, 40),
#minSize=(30, 30),# Minimum possible objec size. Objec s smalle han ha a e igno ed
lags=c 2.c .CV_HAAR_SCALE_IMAGE
) # I de ec s objec s o di e en sizes in he inpu image. The de ec ed objec s a e e u ned
as a lis o ec angles
aces2= lis ( aces) # I changes he ace objec in lis ype o simpli y he I loop.
i no aces2:
p in 'no ace'
else:
p in 'go ace'
lag = lag + 1
i lag is 10: # he obo mo e a e 9 posi i e esul s
k[idm54].go o_posi ion(80, 2.0)
k[idm51].go o_posi ion(-100, 2.0)
lag= 11
# D aw a ec angle a ound he aces
o (x, y, w, h) in aces:
c 2. ec angle( ame, (x, y), (x+w, y+h), (0, 255, 0), 2)
# Display he esul ing ame
c 2.imshow('Video', ame)
i c 2.wai Key(1) & 0xFF == o d('q'):
b eak
# When e e y hing is done, elease he cap u e
excep Keyboa dIn e up :
ideo_cap u e. elease()
c 2.des oyAllWindows()
BackPosi ion()
pass
. . .
############################################################
# a iable de ini ion
k = poppy.mo o s
idm23 = 22
34
idm24 = 23
idm25 = 24
idm13 = 17
idm14 = 18
idm15 = 19
idm51 = 11
idm41 = 7
idm54 = 14
idm44 = 10
idm52 = 12
idm42 = 8
idm53 = 13
idm43 = 9
cha = None
#############################################################
## main p og am
#s a ing p esen a ion
S a ingPos()
Si ingPos()
p in 'si down he obo and hold i om he handle pls'
aw_inpu ("p ess En e i you a e eady o con inue..")
"""
p in 'The p esen a ion is s a ing..'
ShakingLegs()
ime.sleep(0.5)
Hands2 ab()
ime.sleep(1)
PlayHello()
#ask di e en op ions
"""
AskWha 2Do1()
while T ue:
AskKeyP ess()
i cha == ' ':
Reco ding()
AskWha 2Do2()
cha = None
eli cha == 'c':
CopyA m()
AskWha 2Do1()
cha = None
eli cha == 'p':
P esen a ion()
AskWha 2Do1()
cha = None
eli cha == 'm':
PlayReco d()
AskWha 2Do2()
cha = None
eli cha == ' ':
Recogni ion()
AskWha 2Do1()
cha = None
else:
b eak
# inal posi ion
ime.sleep(1)
FinalPos()
p in 'going o inish...'
aw_inpu ("p ess En e i you wan o make he mo o s complian ..")
Mo o sCompl()
35