Tête robotique v1.5 — 3 DOF · dossier de fabrication
Pan-tilt-roll, architecture série · budget ≈ 387 € · ~18 h 30
d'impression 3D · sources :
DOC/14, DOC/15, DOC/16
Survoler une pièce pour l'identifier · cliquer pour ouvrir sa
fiche · glisser pour tourner, molette pour zoomer
pièce sélectionnée, isolée
Ce que montre ce modèle. Des maquettes de principe à
l'échelle réelle (1 unité = 1 mm, cotes de DOC/14 et DOC/16) :
elles donnent l'architecture, les interfaces et l'encombrement —
pas des pièces prêtes à imprimer. Les modèles CAO
paramétriques restent à faire, une fois le paramètre
FIT mesuré sur le gabarit P0.
Avant d'acheter et surtout avant d'imprimer. Les cotes de
ce dossier sont des valeurs nominales de catalogue et les
prix des ordres de grandeur 2026 (France, TTC, hors port). Toute
cote d'interface doit être remesurée au pied à coulisse sur la
pièce reçue avant l'impression définitive. Aucun chiffre ici
ne remplace une mesure.
Les cases à cocher sont enregistrées dans ce navigateur — utilisable
comme liste d'achat.
Règle 2 : chaque axe est tenu par deux points, jamais
par le seul arbre du servo. Un axe en porte-à-faux est la cause
n°1 du jeu ressenti dans le casque. Ces 11 € conditionnent la
qualité perçue de tout le projet.
Toute la structure est imprimable — aucun usinage, aucune
pièce d'aluminium. Détail dans l'onglet
Pièces 3D.
Réf.
Désignation
Qté
Total
Note
C1
Bobine PETG 1 kg (≈ 445 g utilisés)
1
22 €
PLA = fluage sous servos chauds
C2
TPU 95A (pieds P9) — optionnel
1
0-25 €
ou 4 patins caoutchouc (2 €)
Sous-total C
≈ 25 €
D — Vision
Piège du Pi 5 : ses connecteurs caméra sont en
22 broches fines, la Camera Module 3 est livrée en
15 broches. Sans les câbles adaptateurs V2, rien ne se
branche. À commander en même temps que les caméras.
Réf.
Désignation
Qté
Total
Note
V1
Raspberry Pi Camera Module 3 (IMX708)
2
68 €
version Wide utile pour le micro-roll
V2
Nappe FPC 22 ↔ 15 broches, 300 mm
2
10 €
300 mm, pas plus court
Sous-total D
78 €
E — Calcul et interface moteurs
Réf.
Désignation
Qté
Total
Note
E1
Raspberry Pi 5 (4 ou 8 Go)
1
80 €
2 connecteurs CSI = stéréo natif
E2
Carte microSD A2 64 Go
1
12 €
E3
Refroidissement actif officiel Pi 5
1
6 €
obligatoire (throttling = latence)
E4
Interface bus servo TTL half-duplex
1
10 €
sert aussi à attribuer les ID
E5
PCA9685 (PWM I²C) — pour le MG90S
1
6 €
évite le PWM logiciel (gigue)
Sous-total E
≈ 108 €
F — Énergie et sécurité (F7)
Non négociable : les servos ne sont jamais alimentés
par le 5 V du Pi. Un servo qui force fait chuter la tension et
redémarre le Pi en pleine session.
Réf.
Désignation
Qté
Total
Note
F1
Alimentation 12 V / 5 A (bus série)
1
15 €
F2
UBEC 6 V / 5 A (MG90S)
1
10 €
F3
Alimentation officielle Pi 5, 27 W USB-C
1
14 €
rail séparé
F4
Condensateur 1000 µF / 25 V
1
1 €
au plus près des servos
F5
Porte-fusible + fusible 5 A
1
3 €
protection blocage mécanique
F6
Bouton d'arrêt d'urgence coup-de-poing NC
1
10 €
coupure physique
F7
Relais / MOSFET haut-côté piloté GPIO
1
4 €
coupure logicielle (watchdog)
Sous-total F
57 €
G — Câblage et connectique
Réf.
Désignation
Qté
Total
Note
G1
Fil silicone 18 AWG rouge/noir
2 × 2 m
6 €
silicone : reste souple sur un axe mobile
G2
Fil silicone 24 AWG (signal)
3 m
3 €
G3
Connecteurs XT60 (paires)
2
3 €
G4
Borniers WAGO 221
5
4 €
masses communes
G5
Dupont F/F + JST-XH assortis
1 lot
6 €
G6
Gaine tressée Ø6 + spiralée
2 m
5 €
G7
Serre-câbles + adhésif Kapton
1 lot
5 €
Kapton tient la chaleur
Sous-total G
32 €
H — Visserie et inserts
Les inserts laiton ne sont pas une option. Une vis serrée
dans un filet taraudé à même le plastique arrache son filet au 2ᵉ
ou 3ᵉ démontage — or un prototype se démonte beaucoup. 8 €
d'inserts évitent de réimprimer 5 h de pièces.
IMU 9 axes sur le plateau caméras (BNO085 / MPU6050)
oui — seule mesure indépendante de la dynamique et des vibrations
10-15 €
Ce qui s'imprime, ce qui ne s'imprime pas
Imprimable : toute la structure, et les 10 pièces sont
modélisées — hardware/cad/ en OpenSCAD
paramétrique, ./hardware/cad/render-all.sh pour
régénérer les STL. ~350 g de filament, ~28 h, sur n'importe quelle
FDM d'entrée de gamme (volume requis 190 × 150 × 110 mm).
Ne jamais imprimer : les roulements (précision hors
de portée du FDM → jeu immédiat), les palonniers cannelés
(les dents s'arrondissent en quelques dizaines de cycles), les
axes (flambent et créent du jeu), les filetages
porteurs (→ inserts laiton). Sur ces points, la pièce imprimée
coûte moins cher à l'achat et beaucoup plus cher en jeu mécanique,
c'est-à-dire en qualité perçue dans le casque.
Matériau
PETG recommandé. Les servos chauffent en maintien de
position et le PLA flue — exactement le défaut qui ruinerait la
stabilité de la calibration stéréo après quelques sessions. PLA
acceptable pour un montage à blanc, ASA/ABS meilleur mais caisson
requis, TPU uniquement pour les pieds.
Réglages communs
Réglage
Valeur
Pourquoi
Buse / couche
0,4 mm / 0,2 mm (0,15 pour P5)
P5 porte la géométrie stéréo
Parois
4 minimum
la rigidité FDM vient des parois, pas du remplissage
Remplissage
40 % gyroïde (60 % pour P2 et P4)
isotrope ; P2/P4 transmettent le couple
Haut / bas
5 couches
Refroidissement
30-50 % en PETG
trop de ventilation = pièce cassante entre couches
Orientation
efforts dans le plan des couches
une pièce FDM casse d'abord entre ses couches
Les 10 pièces
Réf.
Pièce
Qté
Matière
Masse
Temps
Supports
Inserts
P0
Gabarit de test d'ajustement — à imprimer en premier
1
PETG
36 g
3 h
non
2
P1
Socle / base — loge S1, porte R1
1
PETG
137 g
11 h
minimes
8
P2
Plateau tournant de yaw — passage de câbles centré sur l'axe
1
PETG
45 g
3 h
non
4
P3
Fourche en U — servo à gauche, contre-palier à droite
1
PETG
48 g
4 h
oui
4
P4
Berceau de roll — porte S3 et R3
1
PETG
20 g
2 h
minimes
4
P5
Plateau caméras — entraxe 65 mm ± 1 mm
1
PETG
18 g
1 h 30
non
4
P6
Bagues d'ajustement (0,5 / 1 / 1,5 / 2 mm)
4
PETG
1 g
20 min
non
—
P7
Platine électronique (Pi, interface, alim, arrêt d'urgence)
1
PETG
34 g
3 h
non
4
P8
Guide-câbles (1 par axe)
3
PETG
4 g
30 min
non
—
P9
Pieds antivibratoires
4
TPU
4 g
30 min
non
—
Total
≈ 350 g
≈ 28 h
24 + 2
P0 — le gabarit, à imprimer avant tout le reste
Chaque imprimante sort les trous 0,1 à 0,4 mm trop petits. Le
gabarit (plaquette ~80 × 60 × 8 mm, 25 min) porte les logements
des trois roulements en −0,05 / 0 / +0,05 mm, deux trous d'insert
pour s'entraîner, une empreinte de servo et les perçages d'axe.
Critère : le bon logement est celui où le roulement entre
à la main ferme, sans outil et sans jeu. On reporte l'écart
dans le paramètre FIT et toute la CAO en
hérite. Ne rien imprimer d'autre avant d'avoir ce chiffre —
c'est 25 minutes contre 15 heures.
Paramètres à mesurer avant de modéliser
La CAO doit être paramétrée sur ces variables, jamais sur des
cotes en dur. Tableau complet dans DOC/16 § 0.
Paramètre
Nominal
Utilisé par
SERVO_L / W / H
40 × 20 × 26,5 mm
P1, P3
SERVO_LUG (entraxe pattes)
49,5 mm
P1, P3
HORN25_D / PCD
~21 mm / à mesurer
P2, P4
MG90_* / MG90_LUG
23 × 12 × 22,5 mm / 32 mm
P4
BRG_YAW_OD / ID
65 / 50 mm
P1, P2
BRG608_OD / BRG623_OD
22 mm / 10 mm
P3, P4
CAM_PCB / CAM_HOLES
25 × 24 mm / à mesurer
P5
INSERT_OD
4,6 mm
toutes
FIT
déterminé par P0
toutes
Statut : les dix pièces sont modélisées en OpenSCAD
paramétrique dans hardware/cad/ ; les STL se
régénèrent avec render-all.sh et ne sont pas
versionnés. Chaque pièce est vérifiée manifold et d'un seul tenant.
Ce qui n'est pas validé : l'ajustement — aucun de ces
modèles n'a encore rencontré un vrai roulement. C'est le rôle du
gabarit P0.
Chaîne cinématique
sol / bride androïde
│
[P1] SOCLE ─────────────── S1 servo yaw (axe vertical)
│ + R1 roulement de couronne
[P2] PLATEAU TOURNANT
│
[P3] FOURCHE EN U ──────── S2 servo pitch (axe transversal)
│ + R2 contre-palier
[P4] BERCEAU DE ROLL ───── S3 micro-servo roll (axe optique)
│ + R3 contre-palier arrière
[P5] PLATEAU CAMÉRAS ───── 2 × caméra, entraxe 65 mm
Ordre yaw → pitch → roll = convention d'Euler du casque
(YXZ). La chaîne série dans cet ordre donne un driver
1 angle du protocole = 1 moteur, sans matrice de mixage et
avec une calibration axe par axe. Toute permutation coûte du code
pour zéro gain mécanique.
Règle 1 — dimensionner par la charge réelle
Dans une chaîne série, un axe ne porte que ce qui vient
après lui.
Axe
Charge portée
Couple nécessaire
Servo retenu
Yaw
toute la chaîne (~450 g)
surtout dynamique (axe vertical)
20-30 kg·cm
Pitch
berceau + roll + tête (~300 g) à ~60 mm
~2 kg·cm statique
20-30 kg·cm
Roll
plateau caméras seul (~130 g) à ~25 mm
~0,35 kg·cm
2 kg·cm (MG90S)
Le troisième servo coûte 5 € au lieu de 20 €, et surtout il
ajoute 13 g au lieu de 60 g en bout de chaîne — là où
l'inertie pénalise le plus la cinématique et où le bruit moteur
est le plus proche des futurs micros.
Condition de validité : bloc caméras < 250 g.
Au-delà (écran, carénage, micro), requalifier S3.
Actionneurs — pourquoi le bus série
HeadState devient une mesure, plus une estimation : c'est le principe directeur du passage au matériel (le driver doit renvoyer les angles mesurés, pas la consigne).
Le PCA9685 et le câblage PWM disparaissent pour les axes principaux : 3 fils, adressage par ID.
F7 devient implémentable : erreur de suivi, surcharge et température lisibles → défaillance signalée explicitement au lieu d'un échec silencieux.
Piège : attribuer les ID des servos avant montage — un
servo enfermé dans la structure est pénible à ré-adresser. Et le
couple annoncé suppose le rail 12 V (−35 % sous 7,4 V).
Vision — les deux points durs
Nappes 22 ↔ 15 broches obligatoires sur Pi 5, en 300 mm, avec boucle de service à chaque axe. Les FPC ont un sens et se délaminent sur un pli vif : courbes larges uniquement.
Synchronisation : deux Camera Module 3 sur un Pi 5 ne sont pas synchronisées matériellement. L'écart gauche/droite doit rester sous 1 frame. Si ça gêne en stéréo, l'alternative est une caméra stéréo USB à capteurs synchronisés (global shutter, 80-150 €) — à trancher dans le chantier vision.
Wide ou standard : le Wide laisse de la marge pour absorber ± 5-10° de micro-roll par rotation logicielle du crop, au prix d'une distorsion à corriger.
Le roll logiciel ne remplace pas l'axe. En stéréo, faire
tourner l'image ne fait pas tourner la ligne de base physique : la
disparité acquiert une composante verticale, inconfortable au-delà
de quelques degrés. Bon pour du micro-roll, pas pour supprimer S3.
Chaîne de puissance et sécurité
12 V (F1) ─ fusible F5 ─ bouton F6 (NC) ─ relais/MOSFET F7 ─┬─ servos bus (S1,S2)
└─ UBEC F2 ─ MG90S (S3)
condensateur F4 ─┘ (au plus près des servos)
Les deux coupures sont complémentaires : F7 (GPIO) protège
du bug logiciel, F6 (coup-de-poing) protège du logiciel entier — y
compris d'un driver planté qui ne coupe plus rien. Le bouton doit
être accessible sans se pencher sur la machine.
Les 10 points de vigilance
#
Point
1
Attribuer les ID des servos bus avant montage
2
Vérifier la variante 180° / 270° si servo PWM (fausse toute la calibration)
3
MG90S métal, jamais SG90 plastique
4
Palonniers métal ; une cannelure ne s'imprime pas
5
Ajustement des roulements validé sur le gabarit P0
6
Inserts laiton partout où une vis se démonte
7
Nappes 22 ↔ 15 broches obligatoires sur Pi 5
8
Entraxe stéréo 65 mm ± 1 mm, capteurs coplanaires
9
Servos jamais alimentés par le Pi ; masses communes
10
Deux coupures : logicielle (F7) et physique (F6)
Ordre de montage
#
Étape
1
Imprimer P0, monter les roulements dessus, en déduire FIT, corriger la CAO
2
Imprimer P1-P9 avec les cotes corrigées
3
Poser les inserts laiton (fer + panne d'insertion) sur toutes les pièces
4
Axe yaw : S1 dans P1, roulement R1, plateau P2 — valider T3 sur cet axe seul avant d'aller plus loin
5
Fourche P3 : S2 à gauche, contre-palier R2 + axe R4 à droite (coaxialité !)
6
Berceau P4 : S3, contre-palier R3 + axe R5
7
Plateau P5 et caméras V1 — entraxe 65 mm (T4)
8
Câblage : puissance (F1 → F5 → F6/F7 → servos, F4 au plus près), bus/PWM, nappes V2 avec boucle de service
9
Recette T1 → T10 ci-dessous
10
Calibration du modèle F3 (échelon 0 → 60° chronométré), puis casque
Recette mécanique — go / no-go
#
Contrôle
Méthode
Critère
T1
Ajustements imprimés
gabarit P0 + roulements réels
entrée à la main ferme, sans jeu
T2
Amplitudes
inclinomètre sur P5
yaw ≥ ±90°, pitch ≥ ±45°, roll ≥ ±40° sans contact
T3
Jeu angulaire
servos en maintien, pousser la tête à la main
< 0,5° par axe — sinon reprendre R2/R3
T4
Entraxe stéréo
pied à coulisse entre centres optiques
65 mm ± 1 mm, capteurs coplanaires
T5
Résonance
balayage lent de chaque axe
aucune oscillation entretenue en fin de mouvement
T6
Échauffement
10 min en position extrême
corps de servo < 50 °C
T7
Courant
multimètre en série sur le rail servo
pic < 4 A (marge sous le fusible)
T8
Arrêt d'urgence
appui sur F6 en plein mouvement
les 3 axes se figent, aucun mouvement résiduel
T9
Coupure logicielle
GPIO → F7 depuis le driver
idem T8 + remontée d'état à la couche logicielle
T10
Chaîne complète
scripts/e2e-check.ts avec WS_URL=ws://<pi>:8791
les 7 scénarios passent sur le matériel réel
Recette dynamique — la tête suit-elle ?
Le critère de confort n'est pas une vitesse de servo. Pendant
un mouvement, la tête traîne de
vitesse × latence. Ce retard est invisible tant qu'il
reste sous la marge de champ disponible pour recadrer l'image
dans le casque — (FOV_caméra − FOV_affiché) / 2 —, et
devient un bord de capteur visible au-delà.
Conséquence d'achat : avec une caméra standard (~75° H) face à un
casque de 90-100°, cette marge est nulle. La version
Wide n'est pas un confort, c'est une condition.
#
Contrôle
Méthode
Critère
T11
Retard et dépassement
npm run essai:echelon
retard avant mouvement < 50 ms · dépassement < 2 %
T12
Bande utile
npm run essai:frequence
gain ≥ 0,7 à 2 Hz · aucun gain > 1 (résonance)
T13
Poursuite d'un mouvement réel
npm run essai:trace sur ≥ 3 traces du vrai cas d'usage
< 2 % du temps au-delà de la marge · erreur max < marge
T14
Perception
A/B en aveugle au casque (LATENCY_MS)
la latence du système n'est pas distinguée de la latence nulle
T13 décide ; T11 et T12 expliquent pourquoi il passe ou
échoue ; T14 confirme que le critère physique correspond au ressenti.
Ces quatre essais tournent aussi en simulation, avant le
matériel : même protocole WebSocket. Protocole complet et
interprétation dans DOC/17.
Risques et pièges
Risque
Conséquence
Parade
Cotes imprimées trop justes / trop lâches
roulement qui tourne dans son logement → jeu
P0 en premier, corriger avant les grosses pièces
Nappes caméra non adaptées au Pi 5
rien ne se branche
commander V2 avec les caméras
Servos alimentés par le Pi
redémarrages en pleine session
rails séparés, masses communes, condensateur F4
Filetages taraudés dans le plastique
vis arrachée au démontage
inserts laiton partout
PLA sous des servos chauds
fluage, calibration stéréo perdue
PETG minimum
Couple de roll sous-estimé
tremblement du plateau caméras
peser le bloc stéréo avant de figer S3
Câbles dans le chemin du roll
arrachement de nappe
boucle de service + guide-câbles P8 dès le montage
Butées atteintes en force
engrenage cassé
butées logicielles calibrées avant tout pilotage casque
Variante recommandée — bus série
Groupe
Total
A — Actionneurs
46 €
B — Roulements et axes
11 €
C — Impression 3D (filament)
25 €
D — Vision
78 €
E — Calcul et interface
108 €
F — Énergie et sécurité
57 €
G — Câblage
32 €
H — Visserie et inserts
30 €
Total matériel
≈ 387 €
I — Outillage (achat unique)
95-130 €
Variante économique — servos PWM
2 × DS3218 PWM au lieu des STS3215, PCA9685 au lieu de l'interface
bus, UBEC seul : ≈ 355 €, soit ~30 € d'économie.
Ce qu'on perd pour 30 € : le retour de position.
HeadState renvoie alors une estimation (consigne
filtrée) et non une mesure, et F7 perd la détection d'erreur de
suivi (servo bloqué, butée forcée). Recommandation : ne pas
économiser ici.
Variante « sans imprimante 3D »
Faire imprimer P1-P9 en service (JLC3DP, Craftcloud, Fablab local,
réseau d'impression entre particuliers) : 60-110 € le jeu
complet en PETG au lieu de 25 € de filament. Total matériel
≈ 420-470 € sans achat d'imprimante — le chemin le plus
rapide pour un exemplaire unique.
Variante « acheter au lieu de construire »
Une nacelle caméra brushless 3 axes d'occasion (carte SimpleBGC /
Storm32, 80-150 €) remplace les groupes A, B et C : boucle
fermée à encodeurs, sans jeu mécanique et silencieuse — or
le jeu est le défaut n°1 des servos low-cost et il se voit
directement dans le casque.
À vérifier avant achat : amplitude de yaw (souvent < ± 90°),
charge utile compatible avec le bloc stéréo, API série à adapter
dans src/driver/.