Réaliser une étude de faisabilité (Proof of Concept - PoC) répondant à la question : est-il possible de fabriquer une caméra sur IP dotée de "toutes" les fonctionnalités modernes, et ce, à moindre coût ?
Le PoC doit montrer la meilleure ergonomie possible à destination de l'utilisateur, et masquer toute complexité sous-jacente. De même, le PoC doit montrer que le développement de haut niveau est aisé, une fois les développements ou configurations de bas niveaux achevés.
Le cahier des charges évoque "une caméra sur IP dotée de 'toutes' les fonctionnalités modernes". Il convient de lister les fonctionnalités indispensables que le PoC doit étudier : streaming vidéo, enregistrement vidéo et photo, déclenchement sur détection de mouvement, reconnaissance faciale, vision nocturne, motorisée pan/tilt (pan : orientation, tilt : inclinaison), mode patrouille, contrôlable à distance, équipement réseau à adresse IP fixe ou dynamique, client WIFI ou point d'accès, sur secteur ou batterie, étanchéité.
Thème | Item | Critère spécifique à étudier |
---|---|---|
Vidéo/photo : Caractéristiques | ||
Résolution | Full HD au moins | |
Vélocité | 25 fps au mois | |
Vision nocturne | ||
Vidéo/photo : Fonctionnalités | ||
Streaming | Protocole, latences | |
Enregistrement à la demande | ||
Enregistrement à heure programmé | ||
Enregistrement sur mouvement à l'image | Enregistrer les minutes précédant le déclenchement | |
Enregistrement déclenché sur capteur | Enregistrer les minutes précédant le déclenchement | |
Reconnaissance symbolique | ||
Reconnaissance faciale | ||
Motorisation et étanchéité | ||
Pan | Angle | |
Tilt | Angle | |
Mode patrouille | Facilité de programmation | |
Etanchéité | ||
Contrôle à distance | ||
IP et protocoles sur IP | Fixe ou dynamique, tout protocole | |
Wifi : client | ||
Wifi : point d'accès | ||
Ethernet | ||
Gestion de l'énergie | ||
Alimentation secteur | ||
Alimentation sur batterie | Microcoupures au branchement/débranchement |
L'investissement en matériel doit être inférieur au coût moyen de l'équipement équivalent (une caméra IP motorisée) dans le commerce. La charge consommée ne doit pas dépasser les 10 jours-hommes.
Quelle que soit la technologie de bas niveau, la technologie de haut niveau doit s'appuyer sur un langage objet et disposer des API suffisantes pour s'affranchir de la complexité de plus bas niveau. Par exemple, s'il s'agit de contrôler une lampe, l'utilisateur dispose d'un interrupteur à l'écran (un bouton par exemple), et le développeur de fonctions allumeLaLampe() et eteintLaLampe(). Toute l'électronique sous-jacente doit être masquée à l'utilisateur final bien sûr, mais aussi au développeur.
La motorisation de la caméra se fait sur deux axes : vertical et horizontal. Deux servomoteurs montés l'un sur l'autre feront donc l'affaire. L'angle maximum de rotation de ceux-ci détermine donc les capacités de mouvement de la caméra. On trouve dans le commerce des tourelles "Tilt/pan", qui sont constituées d'un châssis assemblant deux servomoteurs de taille standard, à un angle de 90°.
Raspberry PI Modèle B rev2 .
Le choix de la caméra aura été plus aisé ! En pleine comparaison de caméras USB et autres WebCam, la PiCam , dédiée au PI, est rendue disponible.
Nous voici donc avec un raspberry PI, une clé USB/WIFI, la PI Cam, une tourelle pan/tilt à intégrer. Pour ce faire, il nous faudra aussi un fer à souder (ou une breadboard), des câbles et une centrale nucléaire (ou des alimentations, batteries et autres piles)...
Outre les fournisseurs connus comme amazon.fr, ldlc.com ou materiel.net, citons :
Système d'exploitation : | Raspbian OS |
---|---|
Gestion des servomoteurs : | Servoblaster |
Gestion de la caméra : | raspistill et raspivid |
Gestion du PI : | PI4J |
---|---|
Interface Homme Machine : | Java/SWING |
OS Raspbian, distribution Linux basée sur Debian.
Voir le site Raspbian
Cette distribution semble la plus adaptée à l'usage auquel on la destine. Par exemple, un dongle USB/WIFI y fonctionnera 'out of the box'.
Servoblaster et deamon servod.
Voir le readme.txt
"This is software for the RaspberryPi, which provides an interface to drive multiple servos via the GPIO pins. You control the servo positions by sending commands to the driver saying what pulse width a particular servo output should use. The driver maintains that pulse width until you send a new command requesting some other width."
raspistill et raspivid
Voir la Documentation de la Caméra du Raspberry PI.
"There are three applications provided: raspistill, raspivid and raspistillyuv. Both raspistill and raspistillyuv are very similar and are intended for capturing images, while raspivid is for capturing video. All the applications are command-line driven."
API PI4J
Voir le Site du projet Pi4J
Téléchargement :
wget http://pi4j.googlecode.com/files/pi4j-0.0.5.deb
Installation :
sudo dpkg -i pi4j-0.0.5.deb
Désinstallation :
sudo dpkg -r pi4j
Java/Swing et programmation événementielle
Pour une meilleure expérience utilisateur, les applications seront développées en mode client riche, en l'occurence SWING. Une première application : modifier l'angle d'un servomoteur en réponse au déplacement d'un JSlider. Voir "Les premiers tests".
Compile, run
javac -classpath .:classes:/opt/pi4j/lib/'*' ...
sudo java -classpath .:classes:/opt/pi4j/lib/'*' ...
Choix parmi les versions java installées (Liste et Mise à jour)
update-java-alternatives -l
update-java-alternatives -s [nom du jdk donné par -l]
Une fois le deamon servod lancé, un driver gère la complexité du déplacement des servomoteurs (il s'agit d'envoyer un signal pulsé aux servomoteurs). Pour modifier l'angle d'un servomoteur, il suffit alors d'écrire dans le fichier (émulé par le driver) les commandes associées .
Lancer servod : ./servod <options>
Exemple de commande en shell (centrer le servo n°3) : echo 3=1500us > /dev/servoblaster
L'interface avec un langage de haut niveau ne pose aucun problème. Il est alors aisé de proposer à l'utilisateur des 'sliders' permettant le contrôle fin des servos. L'IHM présentée ici montre aussi plusieurs cercles concentriques. Il s'agit d'une émulation de stick analogique (en déplacant le cerle noir). Celui-ci permet de prendre le contrôle de la tourelle tilt/pan de manière naturelle.
De même, il est aisé d'écrire un programme enregistrant les actions de l'utilisateur, pour reproduire les mouvements associés ultérieurement, en déclenchant ou non enregistrement et streaming. C'est le mode patrouille.
De nombreuses techniques de streaming sont envisageables sur la plateforme. Des recherches ont été effectuées en direction de celles apportant la plus faible latence, en conservant débit et qualité d'image suffisante. Les latences constatées peuvent être de plusieurs secondes. La latence obtenue lors des tests est de moins de 300ms .
Côté Pi
raspivid -o - -t 0 -b 2000000 | nc.traditional [ip du client] [port]
Côté Client (testé sur debian desktop virtualisé VMWare)
nc.traditional -l -p [port] | mplayer -fps 60 -cache 1024 -
Le raspberry PI, associé à sa caméra et sa clé wifi, consomme moins de 1A. Un servomoteur consomme à pleine charge de l'ordre de 100 mA. Le PI ne pourra pas fournir l'énergie nécessaire aux servomoteurs. Il faudra donc disposer de deux sources d'énergie, l'une pour le PI, une autre pour la motorisation.
Pour rendre la caméra autonome, une batterie 9000mAh, proposant 2 ports USB est adaptée. Elle fournira l'alimentation nécessaire pour plus de 5 heures, en cas de coupure du courant. Les problèmes de microcoupures sont du passé. Le Pi ne rebootera pas lors de la mise en charge ou de la coupure de la charge de la batterie.
Pour les tests sur breadbord, une alimentation 500mA (pour breadboard) suffit. 4 piles AA feront aussi l'affaire (pour 6V). La beadboard fera office de prise multiple pour l'alimentaton des servos, et les câbles de données entre PI et servos.
A ce stade, le PoC est bien avancé. La viabilité est démontrée, la majeure partie de la spécification fonctionnelle est adressée. Des spécifications détaillées commencent à être rédigées. Pourtant, seulement la moitié du budget est dépensée. D'autres fonctionnalités peuvent être envisagées.
La caméra maintenant à notre disposition dispose d'une autonomie de l'ordre de 5 heures. Pourquoi ne pas envisager de la rendre mobile ? Nous savons déjà gérer les servomoteur de la tourelle pan/tilt. En ayant recours à des servos à rotation continue, aucune recherche supplémentaire ne sera nécessaire.
Ne reste plus qu'à fabriquer un châssis (tubes et plaques en alu, trouvés en magasin de bricolage), et lui ajouter 2 ou 4 roues montées sur les servos. Sauf que le prototype sans châssis pèse déjà plusieurs centaines de grammes ! Il n'est pas possible d'appliquer une telle force sur l'axe d'un servomoteur commun sans le détériorer...
Nous avons donc recours à un système de chenilles, où le châssis repose sur des roues non motrices, reposant elles-mêmes sur des chenilles. Les chenilles sont entraînées par 2 roues crantées fixées aux servos, eux-mêmes fixés au châssis. Le poids de l'engin ne repose donc pas sur les roues motrices, mais sur les roues libres.
La clé du succès ? Des plans précis et une gestion des câbles sans faille !
A ce stade, le projet de Proof of Concept est rebaptisé Roulette, surnom que Sheldon voudrait donner au professeur Hawking dans "The Big Bang Theory". Dans cette série américaine mettant en scène une bande de geeks, un épisode montre la prise de contrôle à distance de véhicules radiocommandés, disposant de caméras tilt/pan.
Toujours plus de fonctionnalités sont envisagées. La tourelle tilt/pan peut agir en "mode patrouille" ? Roulette peut faire des rondes. Lui adjoindre des capteurs ? Roulette pourra déclencher un enregistrement sur mouvements, température, luminosité, pourra se déplacer tout seul, tracer des plans...
Le raspberry PI n'est décidément pas destiné à l'électronique. Trop peu de ports d'entrée/sortie génériques (les fameux GIPO), trop peu de courant disponible. Cependant, il dispose d'un bus I2C. Par ce biais, nous allons par exemple pouvoir ajouter des entrées/sorties numériques ou analogiques, brancher un "nunchuk" de console Wii.
Quant à l'alimentation, Roulette dispose maintenant d'un batterie pouvant fournir 9000mAh sur deux ports USB (2 et 1 Ampère). L'un d'eux pourra alimenter le PI et l'autre fournir une autre source d'alimentation.
Une ébauche de spécifications fonctionnelles détaillées a été écrite lors de la réalisation du PoC .
Thème | Item | Critère spécifique à étudier |
---|---|---|
Se déplacer | ||
Mode UVG ("drone terrestre") | Latence flux vidéo | |
Définir le chemin d'une ronde et faire des rondes | Reproductibilité d'une ronde automatique (nature du terrain...) | |
Se déplacer seul : suivre le mur de droite | ||
Tracer des plans | Etalonnage capteur IR | |
Capter pour déclencher | ||
Détecteur de collision | ||
Détecteur de distance IR | ||
Détecteur de luminosité | Analogique et/ou numérique | |
Détecteur de mouvement | ||
Détecteur de température | Analogique et/ou numérique | |
Relais |
Spécifications fonctionnelles détaillées, prototype.
Nom de l'application | Description |
---|---|
PanTiltCamControl | Le PoC initial. |
DirectionPanel | Roulette est né ! |
ScriptManagerGUI & RecorderPanel | RecorderPanel permet l'enregistrement d'un script. ScriptManagerGUI liste le contenu d'un répertoire à la recherche de scripts. Pour chaque script trouvé, l'application présente un bouton permettant de le lancer. |
NunchuckPanel | Premier test du bus I2C du PI. |
ControlPanel | Pour la prise de photos ou l'enregistrement de vidéos, manuellement. |
PCF85575BreadBoardTest |
Test de la carte d'extension 16 GPIO du PI. |
Item | PU HT approx. | PoC | Roulette | Contrôleur |
---|---|---|---|
Raspberry PI | 28€ | 28€ | 28€ |
Module de Caméra Raspberry Pi | 23€ | 23€ | 23€ |
Clé USB/WIFI nano | 7€ | 7€ | 7€ |
Convertisseur Analogique à Numérique à 8 Canaux, 12-bits I2C | 15€ | 15€ | |
Platine de Déploiement Extenseur I2C PCF8575 SFE | 9€ | 9€ | Motorisation - camera |
Kit Tourelle Pan/Tilt Aluminium Lynxmotion | 24€ | 24€ | 24€ | Motorisation - déplacement |
Kit Chenilles Tamiya seul | 7€ | 7€ | |
Servomoteur à Rotation Continue Parallax (Futaba) | 11€ | 22€ | |
Kit Véhicule sur Chenilles Tamiya | 14€ | ||
Contrôleur de Moteur 4,5V à 36V, 1A SN754410 | 2€ | Mécanique | |
Tube en aluminium | 2€ | 8€ | |
Plaque en aluminium | 5€ | 10€ | Capteurs et relais |
Capteur de Luminosité Electronic Brick | 2€ | 2€ | |
Capteur de Température Electronic Brick | 2€ | 2€ | |
Capteur de Distance GP2Y0A02YK0F IR | 12€ | 12€ | |
Module de Relais 5v à 2 Canaux | 2€ | 2€ | |
Capteur de Collision | 2€ | 4€ | |
Electronic Brick PIR Sensor | 7€ | 7€ | Allimentation |
DFRobot Breadboard Power Supply Kit 5V / 3.3V | 4€ | 4€ | 4€ |
Batterie TeckNet® PowerBank 9000mAh | 20€ | 20€ | 20€ |
106€ | 207€ |
Robotique - bras articulé, moteurs gérés par pont en H, nouveau raspberry pi (rev b+), gérer les servos avec PI4J, mosfet pour contrôle de sous-circuits électriques. http://www.framboise314.fr/un-boitiercamera-pour-votre-raspberry-pi-b-avec-nwazet/