Construire son V4MPod pour prendre des photos à 360° - Partie 1

Cartographier l'intérieur d'un bâtiment peut être une tâche très complexe, surtout s'il s'agit d'un environnement chargé de nombreux éléments comme...une gare... et c'est exactement ce qu'on m'a demandé il y a quelques mois, puisque Carto'Cité m'a sollicité pour le projet de la SNCF-Transilien consistant à cartographier dans OpenStreetMap l'intérieur des six grandes gares de Paris

Pour faciliter le repérage des différents éléments (services, commerces, guichets, etc...), il était évident qu'il fallait pouvoir prendre des photos à 360°. Les quelques produits disponibles sur le marché étaient soit de qualité assez moyenne, soit bien trop cher.

Mais rappelle-toi mon compte-rendu de l'opération libre de Chéméré, j'avais déjà 2 caméras grand-angles, des petites Xiaomi Yi. Il "suffisait" d'en ajouter 2, et de les faire fonctionner ensemble pour obtenir des photos sur 360°. Maintenant, je vais te montrer comment j'ai procédé.

 

Réseau / Communication

La première étape est de pouvoir déclencher la prise de vue de toutes les caméras simultanément. Il existe bien une petite télécommande Bluetooth pour les Yi, mais elle ne permet pas d'en contrôler plusieurs. Il existe aussi une application officielle pour smartphone qui permet de régler les paramètres, et prendre des photos, mais encore une fois, pour une seule Yi à la fois. En effet, la liaison entre les 2 se fait via un réseau wifi créé par la caméra. Si on utilise 4 caméras, on se retrouve avec 4 points d'accès wifi différents alors que ce qu'on souhaite est exactement le contraire : que les caméras viennent toutes se connecter sur un même réseau, celui du smartphone.

Il existe un hack qui permet de résoudre ce problème et de dire à une Yi Action Cam de se connecter à un réseau wifi existant, c'est le mode "client wifi". Cela se présente sous la forme de plusieurs fichiers à copier sur la carte µSD de la caméra. Ensuite il faut éditer certains paramètres pour s'adapter à son propre réseau Wifi.

Commence par télécharger cette archive wifi_station_yi.zip

Si tu utilises Windows, installe un vrai éditeur tel que Notepad++, et n'utilise surtout pas le bloc-notes pour la suite.

Extrait l'ensemble des fichiers et dossiers sur la carte µSD de la caméra.

Commence par éditer le fichier wifi\wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant

network={

ssid="My Wifi Network name"

scan_ssid=0

psk="My Wifi Network Password"

proto=RSN

key_mgmt=WPA-PSK

pairwise=CCMP

auth_alg=OPEN

}

Il faut que tu modifies la valeur de la ligne ssid pour entrer le nom du réseau wifi que crée ton smartphone lorsque tu actives son point d'accès, et ensuite la valeur de la ligne psk pour entrer le mot de passe de ce réseau. Tu peux sauvegarder et fermer ce fichier. Tu feras de même pour toutes les caméras.

Ouvre le fichier wifi\sta.sh et dirige-toi vers les dernières lignes où tu trouveras

#either static or dynamic IP (DHCP)
ifconfig wlan0 192.168.43.10 netmask 255.255.255.0
#udhcpc -i wlan0 -A 2 -b -t 30

J'ai choisi d'assigner une adresse IP fixe pour chaque caméra, ça me paraissait plus simple pour se repérer. Ici, c'est l'adresse 192.168.43.10 (ligne n°2), ce qui correspond à ma caméra avant. Il faut que cette IP soit dans la plage d'adresse valide pour le point d'accès créé par le smartphone, et mon exemple ne fonctionnera peut-être pas dans ton cas.
Ensuite, tu incrémentes cette adresse pour les autres caméras. 192.168.43.11 pour la gauche, .12 pour l'arrière, etc...

Ce hack provient du forum DashCamTalk, et plus particulièrement de ce fil de discussion

Voilà, j'ai mes 4 Yi qui se connectent sur un seul réseau Wifi. Maintenant, il faut les contrôler simultanément. À la période où j'ai fait ce montage, il y avait trois possibilités :

  • C&C par Andy
    Il permet de contrôler plusieurs caméras, mais ne fonctionne que depuis un ordinateur, ce qui est loin d'être le plus pratique en situation de mobilité. Les caméras restent correctement synchronisées.
  • PonerineM par luckylz
    Fonctionne sur un smartphone Android, mais la date de prise de vue est décalée de plusieurs secondes entre chaque caméra. C'est une fonctionnalité qui a été prévue pour que les créateurs de vidéo à 360° puissent retrouver plus facilement de quelle caméra provient chaque vidéo.
  • Brahma
    C'est le plus récent. il fonctionne sur smartphone Android, les dates de prises de vues restent synchronisées, mais les photos sont limitées à 5 mégapixels.

Et voilà, 3 applications, et aucune d'entre elles ne fait l'affaire....jusqu'à ce que je m'aperçoive que le code source de PonerineM, en Python, était disponible sur GitHub. Je n'ai que quelques bases en programmation, mais elles ont été suffisantes pour rapidement trouver à quel endroit le logiciel décalait l'horloge des caméras. Je n'avais plus qu'à modifier cette partie, et recompiler l'application...ce qui a été une affaire bien plus compliquée. Je ne m'étendrais pas ici sur la procédure, mais en résumé, il m'a fallu seulement 5min pour modifier le code, mais presque 12h pour réussir à le recompiler.

Dans le fichier mmain.py, voici la ligne fautive, elle ajoute 8 secondes multipliées par le numéro de la caméra :

t = self.synctime + '%02d' %(number * 8)

En remplaçant le numéro de la caméra par 0, il n'y a plus de décalage

t = self.synctime + '%02d' %(0 * 8)

Une fois compilée, voici l'application en fonctionnement :

V4MPOD_Mponerine.jpg
 

Pour configurer l'application, tu appuies en haut à droite, et là tu pourras activer tes différentes caméras. Ensuite, il faut activer le mode photo dans "Advanced".

Screenshot_2016-09-16-16-12-36_1_.png Screenshot_2016-09-16-16-12-45_1_.png

L'application se trouve dans le dossier "release" de ce dépôt : Mponerine Sync (J'avoue, je ne sais plus s'il faut utiliser la release 0.11 ou 0.12. Oups...)

Voilà, si tu as suivi le guide, maintenant tu as devant toi des caméras, un smartphone avec son point d'accès wifi activé, sûrement pas mal de câbles, et tu peux les déclencher simultanément. Bien, ça avance ! Si tu le veux bien, continuons encore un peu sur la partie logicielle.

Comme toutes les caméras, les Yi Action Cam possèdent une série de paramètres pour s'adapter aux différentes conditions d'utilisations. Vérifier qu'ils sont corrects pour une caméra, ça n'est pas vraiment un problème ; répète la procédure 4 fois, et tu vas vite trouver ça un tantinet rébarbatif. Heureusement, on peut automatiser cette procédure à l'aide des exemples donnés dans le dossier "Standalone_scripts" de C&C. On y trouve le script camera_set.py qui appelle le fichier settings.py pour y lire les adresses IP des caméras, ainsi que le fichier options.txt qui regroupe les différents réglages. J'ai adapté ce script pour 4 caméras. Si tu es développeur, ne regarde surtout pas le code !! Car au lieu de faire une boucle qui se serait adaptée au nombre de caméras, j'ai simplement dupliqué les instructions pour les envoyer aux 4 Yi.

#! /usr/bin/env python
# encoding: windows-1250
#
# Res Andy 

import os, re, sys, time, socket
from settings import camaddr, cam1addr, cam2addr, cam3addr, cam4addr
from settings import camport, cam1port, cam2port, cam3port, cam4port
from time import localtime, strftime

os.chdir(os.path.dirname(os.path.abspath(__file__)))

srv1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
srv2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
srv3 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
srv4 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


srv1.connect((cam1addr, cam1port))
srv2.connect((cam2addr, cam2port))
srv3.connect((cam3addr, cam3port))
srv4.connect((cam4addr, cam4port))


srv1.send('{"msg_id":257,"token":0}')
data1 = srv1.recv(512)
if "rval" in data1:
	token1 = re.findall('"param": (.+) }',data1)[0]	
else:
	data1 = srv1.recv(512)
	if "rval" in data1:
		token1 = re.findall('"param": (.+) }',data1)[0]	

srv2.send('{"msg_id":257,"token":0}')
data2 = srv2.recv(512)
if "rval" in data2:
	token2 = re.findall('"param": (.+) }',data2)[0]	
else:
	data2 = srv2.recv(512)
	if "rval" in data2:
		token2 = re.findall('"param": (.+) }',data2)[0]	

srv3.send('{"msg_id":257,"token":0}')
data3 = srv3.recv(512)
if "rval" in data3:
	token3 = re.findall('"param": (.+) }',data3)[0]	
else:
	data3 = srv3.recv(512)
	if "rval" in data3:
		token3 = re.findall('"param": (.+) }',data3)[0]	

srv4.send('{"msg_id":257,"token":0}')
data4 = srv4.recv(512)
if "rval" in data4:
	token4 = re.findall('"param": (.+) }',data4)[0]	
else:
	data4 = srv4.recv(512)
	if "rval" in data4:
		token4 = re.findall('"param": (.+) }',data4)[0]	


filet = open("options.txt","r").read()
if "\r\n" in filet:
	filek = filet.split("\r\n")
else:
	filek = filet.split("\n")

for line in filek:
	if len(line) > 5:
		if not line.startswith("#"):
			tosend1 = line %token1
			srv1.send(tosend1)
			srv1.recv(512)
for line in filek:
	if len(line) > 5:
		if not line.startswith("#"):
			tosend3 = line %token3
			srv3.send(tosend3)
			srv3.recv(512)
for line in filek:
	if len(line) > 5:
		if not line.startswith("#"):
			tosend4 = line %token4
			srv4.send(tosend4)
			srv4.recv(512)
for line in filek:
	if len(line) > 5:
		if not line.startswith("#"):
			tosend2 = line %token2
			srv2.send(tosend2)
			srv2.recv(512)

Pour utiliser ces presets, tu télécharges preset_scripts.zip, et tu édites options.txt ainsi que settings.py en fonction de tes besoins.

Sur le terrain, c'est bien plus pratique d'envoyer ces presets depuis le smartphone, alors tu installes Qpython sur ton smartphone, et tu copies les fichiers dans le dossier com.hipipal.qpyplus/scripts. Il ne te reste plus qu'à exécuter le script 4Yi_set_param.py pour que toutes les caméras reçoivent les mêmes paramètres.

Screenshot_qpython
Clique sur "Run"

Ok ! Ca marche plutôt pas mal notre histoire, alors maintenant, parlons un peu matériel !

Tête et Support

Pour faire tenir les 4 caméras ensemble, j'ai choisi la facilité, j'ai demandé à mon père ce qu'il pouvait me fabriquer :-) La solution la plus simple fut de découper 2 disques en bois, de coller des cales pour positionner correctement les Yi avec un angle de 90° entre elles, et de percer les trous nécessaires pour passer les câbles d'alimentation, et l'axe du support. J'ai opté pour un diamètre total de 12cm, mais chacun fait comme il le souhaite, je recommanderai seulement de ne pas faire quelque chose de plus petit, sous peine d'avoir de la difficulté à tout connecter. Si tu as une imprimante 3D alors.... partage ce que tu auras conçu, car pour le moment, je n'ai trouvé que des kit vendus déjà imprimés, comme ceux de http://www.shapeways.com/shops/vrexperience, mais pas de modélisation libre de réutilisation et à imprimer soi-même.

disque_v4mpod.jpg
 
support_4_xiaomi_yi_camera_360.jpg
 

Je te recommande d'ajouter sur les 2 disques, une flèche vers ce que tu considères comme l'avant, ça évite de prendre des photos avec ta caméra avant qui pointe vers le côté.

v4mpod01.jpg v4mpod02.jpg v4mpod03.jpg

Ensuite, fixons notre tête équipée des 4 caméras, sur un support. Ma première idée a été d'utiliser un monopod pour appareil photo, mais j'avais besoin d'un modèle montant à plus de 2 mètres pour que les caméras soient au-dessus de ma tête... et c'est cher. Je me suis rabattu sur un pied de micro que j'avais déjà. À toi de voir ce qui sera le mieux selon ton utilisation, mais n'oublie pas de fixer un niveau à bulle, car si conserver la perche verticale est assez facile sur l'axe gauche-droite, c'est beaucoup moins évident sur l'axe avant-arrière.

L'ensemble commence à faire un certain poids, et je me doutais qu'au bout de plusieurs heures d'utilisations, utiliser les 2 mains pour porter l'ensemble serait indispensable. Il faut donc fixer le smartphone au pied. J'ai tout simplement réutilisé mon support X-Grip que j'ai déjà présenté ici, ainsi que l'attache pour guidon de vélo que j'ai vissée sur la perche.

pied_micro_support_xiaomi_yi_2.jpg
 

Pour terminer, ajoutons 2 batteries USB avec 2 sorties chacune, 4 câbles USB vers microUsb suffisamment longs (1.8m dans mon cas), et un petit sac pour porter le tout. Et c'est parti !

v4mpod_en_situation.jpg
En situation dans les gares parisiennes

Ah ! Un de ces câbles m'a posé des problèmes, et un article paru dans un numéro de Canard PC Hardware explique que les bons câbles sont devenus assez rares. Je vais essayer de faire des tests avec ceux de chez Anker ou ceux de l'Atelier du câble qui semblent en proposer avec des sections plus importantes.

Dans le seconde partie, on regardera comment géolocaliser toutes ces photos : Lire la 2nd partie.

Ajouter un rétrolien

URL de rétrolien : http://www.stemani.fr/index.php?trackback/13

Haut de page