Compiler openCV 3.1 avec sa partie CUDA sur Windows

Compiler openCV 3.1 avec sa partie CUDA sur Windows

Dans cet article, je vais vous expliquer comment compiler la librairie openCV avec sa partie CUDA sur Windows. C’est une véritable épopée. Je précise également que cet article s’adresse à ceux voulant coder en C ou C++. Pour Python ou Java, la démarche doit être plus ou moins identique.

Vous aurez besoin de télécharger CUDA Toolkit, CMake, Microsoft Visual Studio 2013 et QtCreator avec MSVC 2013 64bit.

A l’heure où j’écris ce tuto, la version de CUDA disponible en téléchargement est la 7.5. Sur Windows, seuls VS 2010 à 2013 permettent de compiler des fichiers CUDA avec NVCC. La version 8 devrait permettre d’utiliser VS 2015. Donc faites bien attention à la version que vous téléchargez. De plus, si vous avez un processeur 64 bit, prenez bien les versions 64 bit.

La première étape est donc de télécharger et installer CUDA Toolkit que vous trouverez ici : https://developer.nvidia.com/cuda-downloads

Une fois fait, téléchargez et installez Microsoft Visual Studio 2013 : https://www.visualstudio.com/fr-fr/downloads/download-visual-studio-vs.aspx. Sur cette page, cliquez sur Visual Studio 2013 dans la liste en bas à gauche puis cliquez sur téléchargement.

Une fois téléchargé et installé, ouvrez un projet C++ pour vous assurer que le compilateur MSVC C++ est bien présent. Normalement, il l’est. S’il ne l’est pas, le logiciel devrait vous proposer de l’installer.

Après l’installation de Visual Studio (ou pendant car l’installation prend beaucoup de temps), téléchargez et installez CMake (en 64 bit) : https://cmake.org/download/

De même, téléchargez et décompressez openCV 3.1 à la racine de votre disque C: : http://opencv.org/downloads.html. Vous devriez donc avoir C:\opencv avec un dossier sources à l’intérieur. Dans ce dossier, ouvrez le fichier CMakeLists.txt. Il se trouve une erreur que nous allons corriger. Cherchez la ligne « set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS}  -L${p})« . Remplacez la par « set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CMAKE_LIBRARY_PATH_FLAG}${p})« .

Maintenant que tout est installé, on va passer à la partie configuration. Dans votre dossier C:\opencv, créez un dossier build. Ensuite, ouvrez CMake. A la ligne « where is the source code », mettez C:\opencv\sources (vous pouvez aussi cliquer sur browse source…). Pour « where to build the binaries », mettez C:\opencv\build.

Cliquez sur configure. Pour « Specify the generator for this projet », choisissez « Visual Studio 12 2013 win64 » puis cliquez sur finish. Si vous avez pu compiler un fichier .cpp avec Visual Studio, vous ne devriez pas avoir un pop-up indiquant qu’aucun compilateur n’est présent. Dès que la configuration s’est terminée pour la première fois, une liste rouge apparait. Dans cette liste, vérifiez bien que l’option WITH_CUDA est bien cochée. Profitez-en également pour cocher l’option WITH_OPENMP. OpenMP est une librairie permettant le multithreading. Beaucoup d’algorithmes d’openCV s’en servent pour accélérer le traitement. Ce serait donc bête de s’en priver.

Étant donné que par la suite on utilisera QtCreator, cocher l’option WITH_QT n’est pas utile. Si vous souhaitez utiliser un autre IDE et que vous voulez utiliser la librairie Qt, pensez bien à la télécharger préalablement. En cochant l’option WITH_QT, il vous sera demandé de spécifier où se trouvent certains dossiers. Même remarque pour openGL.

Une fois que c’est fait, re-cliquez sur configure. Puis cliquez sur generate.

Maintenant, passons à la compilation. Allez dans le dossier C:\opencv\build. Vous y trouverez un fichier Microsoft Visual Studio Solution nommé OpenCV. Double cliquez dessus. Visual Studio va s’ouvrir et ouvrir le projet. En haut, vérifiez que le projet est configuré en Release et en x64. Dans Solution Explorer, cliquez droit sur ALL_BUILD puis cliquez sur Build. La compilation va se lancer. Celle-ci peut prendre beaucoup de temps selon votre ordinateur. Pendant ce temps, profitez-en pour télécharger et installer QtCreator avec MSVC 2013 64bit : https://www.qt.io/download-open-source/#section-2

Pendant la compilation, vous aurez des warnings (plus de 4000), ne vous inquiétez pas, ils ne sont pas problématiques.

Quand la compilation est terminée, vous avez le choix de refaire une compilation en Debug (compilation beaucoup plus longue qu’en Release) ou vous pouvez passer à la suite. Dans Solution Explorer, ouvrez le dossier CMakeTargets. Faites un clique droit sur INSTALL puis Build. Rassurez-vous, cette étape est beaucoup plus rapide que la précédente.

Ensuite, ouvrez le panneau de configuration, cliquez sur Système et Sécurité puis Système. Cliquez sur Paramètres système avancés puis variables d’environnement. Dans la partie variables système, cliquez sur Nouvelle. En nom de variable, mettez OPENCV_DIR et en variable, C:\opencv\my_build\install\x64\vc12.

Félicitations, vous venez de compiler openCV avec ses fichiers CUDA ! C’était long mais vous y êtes arrivés !

Pour finir, on va vérifier que ça fonctionne. Ouvrez QtCreator et créez un nouveau projet.

Dans le fichier .pro, mettez :

INCLUDEPATH += C:/opencv/build/install/include
LIBS += -LC:/opencv/build/install/x64/vc12/lib
LIBS += "C:/opencv/build/install/x64/vc12/lib/opencv_core310.lib" \
 "C:/opencv/build/install/x64/vc12/lib/opencv_highgui310.lib" \
 "C:/opencv/build/install/x64/vc12/lib/opencv_imgcodecs310.lib" \
 "C:/opencv/build/install/x64/vc12/lib/opencv_imgproc310.lib" \
 "C:/opencv/build/install/x64/vc12/lib/opencv_videoio310.lib"

A chaque fois que vous mettrez un #include <opencv2/….hpp>, pensez bien à ajouter la ligne correspondant au .lib dans le .pro comme ci-dessus. Si vous ne le faites pas, le #include sera souligné en jaune.

Dans main.cpp, mettez le code que vous voulez. Pour les débutants avec openCV, vous trouverez de quoi apprendre ici : http://opencv-srf.blogspot.ca/2011/09/capturing-images-videos.html. Vous pouvez récupérer le code qui allume la webcam, par exemple.

Vous pouvez ensuite cliquer sur le triangle vert pour compiler. Vous aurez une erreur 255. Cela est du au fait qu’il manque les .dll dans le dossier créé lors de la compilation de votre programme. Dans ce dossier, mettez-y les .dll correspondant au .lib. Vous les trouverez dans C:/opencv/build/install/x64/vc12/bin. Il se peut qu’il manque encore certains .dll. Pour le vérifier, cliquez sur .exe de votre programme (dans le doute, prenez tous les .dll). Vous devez également ajouter qwindows.dll. Il se trouve dans C:Qt\Qt-Votre-Version\Votre-Version\msvc2013_64\plugins\platforms. Mettez le dans un dossier nommé platforms. Ce dossier doit être là où se trouve le .exe. Ajoutez également les fichiers msvcp120.dll et msvcr120.dll. Vous les trouverez en faisant une recherche dans votre disque C:. Si vous utilisez les widgets et autres outils venant de Qt, ajoutez Qt5Core.dll, Qt5Gui.dll et Qt5Widgets.dll.

Vous pouvez dorénavant recompiler votre projet. Celui-ci devrait se lancer correctement.

 

Arduino – Python – HC-SR04 – Rick Roll

Ces temps-ci, j’apprends à coder en Python. J’ai donc appris à utiliser le port série pour intéragir avec une carte Arduino. Pour tester ça, je me suis inspiré de cette vidéo : https://www.youtube.com/watch?v=e-l3jg13Pdk. Bien sûr, ma méthode est tout à fait différente et moins efficace; je n’utilise pas d’audio shield ou un capteur très performant.

Le montage est très simple. Il est composé d’une carte arduino, d’un module de détection à ultrason HC-SR04 et de 4 fils. Le capteur a une portée comprise entre 2cm et 4m avec une précision de 3mm et un angle de 15°.

L’idée est la suivante : quand on est à une certaine distance du capteur, la musique se lance. Si on s’éloigne, la musique se met en pause. Elle reprendra dès qu’on sera de nouveau à bonne distance. Donc arduino se charge du capteur et du calcul de la distance puis envoit cette dernière sur le port série. Python lit la valeur et lance ou non la musique.

Le code pour la carte Arduino :

const byte trigger = 2; //déclaration du pin pour le trigger
const byte echo = 3; //déclaration du pin pour l’echo

void setup()
{

Serial.begin(9600); //on démarre la liaison série
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
digitalWrite(trigger, LOW); //le trigger doit être à l’état bas initialement

}

void loop()
{

digitalWrite(trigger, HIGH); //on met le trigger à l’état haut
delayMicroseconds(10); //pendant 10 µs
digitalWrite(trigger, LOW); //puis on le remet à l’état bas

long mesure = pulseIn(echo, HIGH, 25000); //on mesure le temps pendant lequel l’echo se met à l’état haut (réception du son)
long distance = mesure * 0.034 / 2; //on calcule la distance
Serial.println(distance); //on envoit la distance calculée
delay(60); //on attend  60ms avant de recommencer (limite du capteur). Il faut attendre 60ms pour que la musique se mette en pause ou se lance.

}

Le code Python :

#!/usr/bin/python3.4 # à adapter selon votre OS
# -*-coding:utf-8 -* # idem

import pygame # il faut utiliser le module pygame pour se servir de l’audio
from pygame.locals import *
import serial

pygame.init()
pygame.init() # on le met 2 fois au cas où. Sur certaines distrib linux, l’initialisation plante 1 fois sur 2.
son = pygame.mixer.Sound(« rickroll2.ogg ») # on crée un objet Sound et on précise la musique voulue (même dossier que le code et en format .wav ou .ogg)
ser = serial.Serial(‘/dev/ttyACM0’,9600) # on crée un objet Serial et on précise le port série (en bas à droite dans l’IDE arduino) et le nombre de bits par seconde (le même que pour arduino)
i=0 # on déclare une variable i qui vaut 0 initialement et qui prendra la valeur 1 au premier passage devant le capteur

while True:

distance = int(ser.readline()) # on lit la valeur dans le port série, on la converti en int (readline() donne un char) et on nomme cette valeur distance

if distance <= 50: # vous pouvez changer 50 par un autre nombre. Représente le seuil de lancement de la musique

if i == 0: # si on n’est jamais passé à moins de 50cm du capteur

i += 1 # la variable i vaut 1
son.play() # on lance la musique

if i > 0: # si on est déjà passé à moins de 50cm on relance la musique

pygame.mixer.unpause()

if distance > 50 and i > 0: # si on est à plus de 50 cm du capteur et qu’on est déjà passé devant

pygame.mixer.pause() # on met la musique en pause

ser.close() # on ferme la lecture sur le port

 

Parfois, lorsqu’on lance le programme python, l’erreur suivante survient :

Traceback (most recent call last):
File « rickroll.py », line 14, in <module>
distance = int(ser.readline())
ValueError: invalid literal for int() with base 10: ’13\r12\r\n’

Il suffit de renvoyer le script (et recommencer si l’erreur resurvient).

La musique est la version orchestrale de Never Gonna Give You Up de Rick Astley composée par Walt Ribeiro sur http://fororchestra.com/post/19459300022/rick-astley-never-gonna-give-you-up-for-orchestra . Cette version est sous licence Creative Commons. Pour Rick Roll comme il se doit, il faut donc utiliser la chanson originale.

Plus d’infos concernant le capteur de distance HC-SR04 : http://www.micropik.com/PDF/HCSR04.pdf

Battlestar Galactica : Love and Bullets et Searider Falcon

Parlons dans cet article de deux mysterieux livres lus par l’amiral Adama : Love and Bullets et Searider Falcon.

Je tiens à préciser, pour ceux qui n’ont jamais vu la série ou qui n’en sont pas encore à la saison 4, qu’il n’y a aucun spoiler sur l’histoire principale.

 

Tout naturellement, on pourrait se dire que ces deux livres ne sont que des passages pour meubler la série. Et bien, ce n’est pas le cas. En effet, nous sommes dans Battlestar Galactica et dans cette série, tout a son importance. Ces deux livres parlent de la relation entre l’amiral William (Bill) Adama et la présidente Laura Roslin.

Commençons par Love and Bullets (épisode 3, saison 4) :

[EN] Love and Bullets by Nick Taylor. Chapter one.

It started like it always did. With a body. This one was in the river, and I could tell she had once been beautiful. But this bullet and fast current had taken away from her. All we are, or that we think we are, all that we are certain about, is taken away from us. When you’ve worked in the streets and seen what I’ve seen, you become more and more convinced of it every day. Caprica City has been my teacher, my mistress. From the moment I opened my eyes, she is in my blood, like cheap wine. Bitter and sweet, tinged with regret. I’ll never be free of her, nor do I wanna be, for she is what I am. All that is, should always be.

[FR] De l’amour et des balles de Mick Taylor. Chapitre un.

Ça a commencé comme toujours. Avec un corps. Celui-ci était dans la rivière, je pouvais dire qu’avant, elle avait été très belle. Mais cette balle et le courant violent lui avaient tout enlevé. Tout ce que l’on est, tout ce que l’on croit être. Tout ce dont nous sommes certains nous est un jour enlevé. Quand on a travaillé dans les rues et vu ce que j’ai vu, on en devient chaque jours de plus en plus convaincu. Caprica City a été mon professeur, ma maîtresse. Depuis le moment où j’ai ouvert les yeux, elle est dans mon sang, comme un vin bon marché, à la fois amère et doux, teinté de regret. Je n’ai jamais eu peur d’elle. Et je ne le veux pas. Parce qu’elle est ce que je suis. Tout cela l’est et le sera à jamais.

Premièrement, remarquons que le scénariste de cet épisode s’est permis un petit clin d’oeil à lui-même. En effet, le scénariste s’appelle Michael Taylor. Vous noterez aussi que dans la version originale l’auteur s’appelle Nick et dans la version française, il s’appelle Mick (c’est pas du flan, regardez les 2 versions ou alors c’est moi qui entends mal !). Pourquoi ? Aucune idée.

Dans ce livre, il est bien question de la relation Adama/Roslin. Le corps répresente Laura Roslin. Mais que représente la rivière ? La politique ? L’espace ? La guerre ? Pour cela, regardons ce passage « Tout ce que l’on est, tout ce que l’on croit être. Tout ce dont nous sommes certains nous est un jour enlevé. Quand on a travaillé dans les rues et vu ce que j’ai vu, on en devient chaque jours de plus en plus convaincu. » Le « j’ai » correspond à l’amiral Adama qui a travaillé dans l’espace (les rues (ce qui élimine la première possibilité)) et a vécu la guerre contre les Cylons. Il parle bien évidemment des conséquences que la guerre à sur nous, les Hommes. Nous avons donc notre réponse. La rivière et son courant violent correspond donc à la guerre et son extrême rapidité/violence (la guerre est finie dès que les bombes sont tombées et ont fait des millions (voire milliards) de morts (cf Laura Roslin dans l’épisode pilote)). Ensuite, quant à la balle, celle-ci représente le cancer du sein de Laura, qui lui est fatal.

Ensuite, « Caprica City a été mon professeur, ma maîtresse ». Bon, là, vous vous en doutez sûrement, il est encore question de notre très chère présidente Laura Roslin qui a été, avant d’entrer dans la politique, institutrice. Et puis, William et Laura, dans la suite de la saison, deviennent amants. (Question que je vous pose : est-ce que le mot « mistress » a la même signification que le mot « maîtresse » dans la phrase « mon mari a une maîtresse » ou a t-il seulement la signification d’institutrice ?) Puis « Depuis le moment où j’ai ouvert les yeux, elle est dans mon sang, comme un vin bon marché, à la fois amère et doux, teinté de regret. » Magnifique phrase (oui oui) pour dire que dès qu’il l’a vue pour la première fois, il a pensé à elle tout le temps, parfois en bien, parfois en mal.

Pour finir, je prendrai la version originale. « I’ll never be free of her, nor do I wanna be, for she is what I am. All that is, should always be. » Ce qui veut dire, pour ceux qui ne comprennent pas (traduction grossière, hein !) « Je ne serai jamais libre d’elle, et je ne veux pas l’être, parce qu’elle est ce que je suis. Tout cela l’est et devrait toujours l’être. » Vous voyez, aucun rapport avec la version française qui nous dit « Je n’ai jamais eu peur d’elle. Et je ne le veux pas. » Malheureusement, cette traduction foireuse tue le sens du livre (vous verrez, pour Searider Falcon, c’est la même chose) car dans les 4 saisons, à aucun moment Adama a peur de Roslin ou ne veut pas avoir peur d’elle. Mais justement, on voit qu’il est à son service. Ainsi, ce passage nous dit que l’amiral veut rester sous les ordres de Laura et qu’elle est ce qui le définit.

Conclusion de ce livre. On a bien ici une métaphore pour parler de la relation entre William Adama et Laura Roslin. Premièrement, il introduit la présidente, malade et plongée dans une guerre terrible. Deuxièmement, les conséquences de la guerre pour l’homme. Et enfin, révélation de l’amour de William pour Laura. Notez également le problème de la traduction. Dans la troisième phrase, il dit « elle avait été très belle ». Dans cette phrase, à quoi correspond « elle » ? À la rivière ou au corps qui serait donc celui d’une femme ? Pour répondre à cette question, il faut revenir à la VO. Il est bien dit « she » et non pas « it ». Le « elle » parle donc du corps. La traduction française omet donc cette précision.

 

Passons maintenant à Searider Falcon (épisode 4 saison 4).

[EN] Adama : I must warn you that I’m getting into the part I haven’t read yet.

Roslin : Oh dear ! Are you going to be able to continue ?

Adama : Chapter 7. The raft was not as seaworthy as I’d hoped. The waves repeatedly threatened to swamp it. I wasn’t afraid to die. I was afraid of the emptiness that I felt inside. I couldn’t feel anything. And that’s what scared me. You came into my thoughts. I felt them. It felt good.

[FR] Adama : Je dois vous avertir qu’on en arrive à la partie que je n’ai jamais lu.

Roslin : Ah oui la fin. Croyez-vous être capable de continuer ?

Adama : Chapitre 7. Le radeau était moins en état de naviguer que ce que j’espérais. Les vagues menaçaient régulièrement de le submerger. Je n’avais pas peur de mourir. J’avais peur du vide que je ressentais à l’intérieur. Je ne pouvais plus rien éprouver. C’est ce qui me faisait peur. Tu es entrée dans mes pensées. Tu les as envahies. Je me sentais bien.

 

Dans la version française, Searider Falcon a été traduit par Le faucon des océans. Tout comme il est dit dans l’épisode, Bill n’a jamais lu le dernier chapitre car comme c’est son livre préféré, il ne veut pas qu’il finisse. Et Laura, quant à elle, l’a déjà lu il y a très longtemps mais ne se souvient plus de la fin.

Le fait d’avoir traduit le titre du livre est une erreur. En effet, il se cache quelque chose dedans. Des anagrammes possibles du titre sont « read face Roslin » ou « face dear Roslin ». Intéressant non ? Comme si le titre disait à Adama « lis face à Roslin » ou « fais face à ta chère Roslin », etc. Et bien mes ami(e)s, c’est le cas. Pour comprendre, il faut regarder la scène et le jeu d’acteur. Dès que William lit la phrase « Je n’avais pas peur de mourir. », il marque une pause pour lire la prochaine phrase dans sa tête puis la lit à voix haute. Ensuite, il remarque une pause, ferme le livre et dit « Je ne pouvais plus rien éprouver. », pause (plus longue), « C’est ce qui me faisait peur. » tout en regardant Laura dormir. Puis il dit « Tu es entrée dans mes pensées. Tu les as envahies. Je me sentais bien. ». Vous allez me dire dire « oui ok d’accord. Mais il n’y a rien d’anormal. ». Et bien si. Le problème vient qu’il balance cette phrase comme ça alors qu’il n’a jamais lu la fin. On pourrait croire que lors de la dernière « pause » il lit la suite du bouquin. C’est possible. Mais peut-on retenir parfaitement toutes ces phrases en aussi peu de temps ? Personnellement, je n’y crois pas. Pour moi, il évoque ouvertement ses sentiments. Il n’a pas peur de mourir dans la destruction du Galactica (le radeau) qui subit les attaques (les vagues) des Cylons. Il a peur de mourir seul. Puis finalement, Laura entre dans ses pensées. Il les remplit avec et il se sent bien.

La traduction pour les 2 dernières phrases est incorrecte (ce n’est pas Laura qui envahit les pensées de Bill mais Bill qui remplit son esprit avec Laura. (ce n’est pas la même chose !)) mais ce n’est pas très grave.

Conclusion : On a bien également dans ce livre, une évoquation des sentiments qu’a l’amiral William Adama pour la présidente Laura Roslin mais cette fois-ci de manière plus subtile. Il faut être attentif au jeu d’acteur, à ce qu’il se passe et à ce qu’il se dit. Il faut aussi penser à étudier ce titre, pas si anodin que ça.

 

 

Je sais pas vous, mais moi, je préfère quand même la version française. Je trouve les textes très beaux. Des mots qui sonnent bien. Il y a une mélodie et la voix française de Edward James Olmos, Philippe Catoire, joue de manière excellente.

Au moment où j’écris cet article, j’en viens à me demander si il n’y a pas quelque chose de caché derrière le fait que Love and Bullets est lu dès le chapitre 1 et Searider Falcon, dès le chapitre 7 : Dieu, création du monde, 7 jours, tout ça…

 

Je dédicace cet article à @IrisKV, nouvelle super fan de la série.

Prenez le risque d’échouer.

Claude Lelouch a écrit dans Itinéraire d’un enfant très gâté :

L’échec est le début de la réussite à condition de plaider coupable et de le prendre à son compte.

L’échec est souvent associé à la nullité ou à la faute de pas de chance. Quand on subit l’échec, la première attitude serait de se rabaisser, se sous-estimer. Or, c’est une erreur. Même si le succès est source de joie, de fierté, de valorisation, celle-ci n’est qu’éphémère. Le jour où un échec arrivera, on va mal le sentir. Au contraire, l’échec donne, quand on en a conscience, énormément d’expériences. Il faut savoir tirer des leçons du passé, comme disent les vieux chamans barbus sous les arbres. Aux Etats-Unis, il y a même des conférences où des entrepreneurs racontent ce qu’ils ont ratés. Et dans les pays scandinaves ou anglo-saxons, si vous n’avez pas d’échecs à votre actif, vous êtes considérés comme quelqu’un sans expériences.

L’échec est forcément conséquence de quelque chose, c’est pourquoi il faut savoir l’identifier. Après avoir identifié la cause, il faut, bien entendu, la corriger. Qu’est-ce qui fait que ce truc n’ait pas fonctionné ? Comment l’améliorer ? Ces questions sont importantes, il faut savoir se les poser. C’est de cette manière que l’on avance.

En terminale, j’ai bossé avec 3 camarades de classe sur la conception d’un véhicule solaire radio-commandé, avec à la fin de l’année, une compétition à Toulouse. Ce projet fut un véritable désastre. J’en avais même honte le jour de l’épreuve. J’étais le chef de projet donc la responsabilité de l’échec me revient et je l’assume. Cette expérience m’a appris énormément de choses, que ce soit sur moi, sur la gestion d’un projet ou sur la gestion d’une équipe. J’avais fait en sorte que le projet soit géré correctement, en assignant des rôles à chacun et en faisant des réunions (choses qui faisaient rire les gens de la classe mais qui se sont révélées très utiles). Mais pourquoi ça n’a pas fonctionné ? Et bien, il y a plusieurs raisons à cela.

Déjà, le manque de connaissances. Aucun de nous 4 n’avait de connaissances en automobile, on devait tout apprendre sur le tas. A cause de ça, la logique de construction du véhicule a été foireuse. Nous sommes partis du moteur pour arriver au châssis : nous aurions du faire le contraire. En effet, à cause des délais de commande du matériel imposés par les profs, on a du se décider très vite (et ne parlons pas du prof qui nous a fait changer d’avis pleins de fois, pour rien et pour pire). C’est pourquoi, à la fin de la conception, le moteur s’est révélé ne pas être assez puissant pour propulser le véhicule qui était trop lourd et trop grand. Trop lourd car celui qui s’est occupé du matériau a confondu 500 g et 1,5 kg et trop grand car celui chargé de la taille du châssis et de la mécanique s’est servi des tailles maximales imposées par le cahier des charges. Quant au troisième plot (on se surnommait comme ça), il n’a tout simplement rien fait. J’ai imposé des timelines pour les études des composants nécessaires avec la rédaction d’un dossier expliquant le fonctionnement dudit composant. Rien de bien méchant. Mais il s’est avéré qu’il n’a jamais respecté ça. Je l’ai même menacé d’aller voir le prof pour lui mettre un point de malus (le projet comptait pour le BAC).

Vous allez dire que je rejette la faute sur les autres et que finalement, je ne prends aucune responsabilité. Et bien, vous avez tort. Certes, ils ont commis des erreurs. Mais ces erreurs auraient pu être évité si j’avais su les prévoir, si j’avais su gérer au mieux la communication au sein du groupe, si j’avais su mieux gérer le projet, si j’avais été meilleur manager. Ce sont toutes ces leçons que je retiens et que je ne recommettrai pas plus tard quand je serai ingénieur. L’échec de ce projet m’a appris énormément de choses. D’ailleurs, c’est ce projet qui m’a donné la passion du management. Aujourd’hui, j’aime bien en parler comme d’une très bonne expérience et il a même sa place dans mon CV. (Pour finir l’anecdote, sachez que nous avons fini avant dernier lors de la compétition et que nous avons eu 17 à la soutenance pour le BAC.)

Un échec passé peut aussi apporter le succès. En effet, en 1941, l’ingénieur américain Harry Coover voulait améliorer la transparence des lunettes de visée des fusils. Pour cela, il inventa le cyanoacrylate. Le problème, ce produit était totalement inefficace et collait. 9 ans plus tard, Coover travaillait sur l’étanchéité des cockpits des avions. Il repensa au cyanoacrylate. Cette substance s’est révélée parfaite pour la mission. Dès 1958, la super glue était commercialisée. Harry Coover a fait d’un échec un véritable succès et il existe des tonnes d’exemples comme celui-là.

Nous venons donc de voir que l’échec n’est pas si mauvais que ça. En apprenant à l’analyser, on gagne une riche expérience. On apprend des choses sur soi car il faut savoir se remettre en cause et des choses sur notre façon de faire. On peut adapter l’échec à beaucoup de situations. Par exemple, je m’en sers pour apprendre mes cours.

Désormais, quand vous essuyez un moment d’échec, pensez à ces gens qui s’en servent comme une arme de réussite et faites comme eux, analysez et grandissez.

Je vous laisse aussi méditer sur une possible alternative au succès et à l’échec, avec une citation de Samuel Anders dans le dernier épisode de Battlestar Galactica :

Pour l’instant, je ne fais qu’essayer de devenir plus fort pour aider l’équipe du mieux que je peux…Vous voulez la vérité ? J’en ai vraiment rien à faire des statistiques ou de la coupe ou des trophées ou des trucs de ce genre. En fait, je trouve que les matches ne sont pas vraiment importants. Ce qui compte pour moi, c’est de faire un parfait lancer, faire une parfaite reprise, réussir le parfait blocage… La perfection. Il s’agit uniquement de ça. Ce sont ces moments où tu peux ressentir la perfection de la création. La beauté, la physique, la merveille qui résulte des mathématiques, l’exaltation du lien entre action et réaction. Voilà le genre de perfection à laquelle je veux être connecté.

Au lieu de chercher la gloire ou la dépression, cherchez à ce que vos moindres faits et gestes soient les plus parfaits possibles, pour vous-même.

Big up @Oclairdelune

Si vous voulez en savoir plus, vous pouvez lire le numéro 201 octobre 2012 du magazine Management.

Arduino + LCD 128*64 compatible KS0108

Dans cet article, je ne vais pas vous faire un cours détaillé pour la simple et bonne raison que je ne connais pas les détails du truc. Je vais juste vous expliquer comment installer cette librairie et comment faire les branchements.  Je vous tutote (oui, je sais, ça ne se dit pas) ceci car ça m’a pris une plombe pour trouver des sites expliquant comment faire et que tous étaient en anglais et/ou foutrement mal expliqué. Donc comme vous ne parlez pas tous la langue de Shakespeare et que je suis gentil, je vous offre mon expérience.

NB : il faut absolument que votre écran soit compatible KS0108 ; Sinon, ce qui est écrit en dessous ne fonctionnera pas.

Je possède cet écran, acheté chez Kibuck. Bien évidemment (sinon ça ne serait pas drôle), le datasheet n’est pas disponible.

Premièrement, veuillez vous rendre ici et téléchargez l’archive. Ensuite, créez un dossier glcd dans sketchbook/libraries puis dézippez l’archive dans ce dossier.

Deuxièmement, dans votre IDE, ouvrez le fichier GLCDdemo en allant dans Fichier -> Exemples -> glcd puis cliquez sur vérifier. A partir de ce moment, 2 solutions. Soit ça compile correctement et donc vous êtes content soit ça vous fout pleins d’erreurs de compilation. Si comme moi vous êtes dans la réponse B, n’ayez crainte, il y a une solution (merci à @semageek pour son aide).

Normalement l’erreur est du genre : /sketchbook/libraries/glcd/fonts/Arial14.h:55:27: error: variable ‘Arial_14’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’.

Pour remédier à ça, il vous faut juste ouvrir le fichier mentionné par l’erreur (ici Arial14.h) et de rajouter const après tous les static. Dès que vous avez fait ça sur tous les fichiers en cause, ça compilera.

Maintenant, passons au branchement. Pour cela, il faut vous munir du datasheet. Ensuite, admirez ce tableau :

Grâce au datasheet, déterminez dans quel panel vous êtes. Pour trouver le bon, il suffit de regarder, dans le datasheet, à quoi correspond chaque trou sur le module lcd. Par une puissante analyse du tableau, vous remarquez qu’il suffit de regarder à quoi correspond le premier trou. Si celui-ci correspond au 5V alors c’est le panel A. Si il correspond à la masse alors c’est le panel B. Sinon, c’est le panel C.

Vous vous demandez peut-être comment j’ai fait pour déterminer mon panel alors que je n’ai pas le datasheet. Et bien, j’ai fait l’aventurier. Même si ce n’est pas recommandé, j’ai fait des tests. Déjà, je savais que ce n’était pas le panel C car j’avais essayé ce branchement et que celui-ci allumait l’écran. J’ai testé le panel A. Cela n’a rien donné donc j’ai essayé le B. Et là, VICTOIRE !

Ensuite, il suffit de brancher suivant votre panel, de cette manière (pour arduino uno/duemilanove/leonardo. Pour les cartes mega/sanguino/teensy, référez-vous au tableau) :

Pour finir, vous n’avez plus qu’à téléverser GLCDdemo pour voir si tout fonctionne.

J’ai eu le droit à deux surprises à ce moment-là :

  • Si vous avez l’erreur avrdude: stk500_recv(): programmer is not responding alors il faut débrancher le pin reset. Ce pin (pour une raison que j’ignore) fait foirer le téléversement. Dès que le programme est chargé, vous pouvez rebrancher le pin reset.
  • Si, lors de la démo, vous constatez que la droite et la gauche sont inversées, il suffit d’inverser les pins qui ont pour fonction CSEL1 et CSEL2 (voir tableau).

Et voilà. Maintenant, vous pouvez vous la péter.

Voici une vidéo qui montre le résultat.

Si vous voulez plus de détails concernant l’utilisation de cette librairie, voici quelques liens :

http://playground.arduino.cc/Code/GLCDks0108

http://playground.arduino.cc/uploads/Code/GLCD_Documentation.pdf

Le tableau et les images des branchements viennent du pdf. Il est très bien expliqué donc je vous le recommande.

Le code de la route, cette chose inutile.


Commençons d’abord par la définition d’un mot que – visiblement – peu de personnes connaissent ; le mot respect. Selon le dictionnaire Hachette, respect signifie : considération que l’on a pour quelqu’un et que l’on manifeste par une attitude déférente envers lui. Ou encore : souci de ne pas porter atteinte à quelque chose. Malheureusement, aujourd’hui, la définition de ce mot serait plutôt : « Nique ta race, bâtard ! ».

Je voudrais parler ici, comme vous l’avez sans doute deviné, du respect du code de la route (que beaucoup ne connaissent pas). Ce code, comme beaucoup le croient, n’a pas été inventé pour faire chier le monde. Il a été fait pour qu’on puisse avoir de l’ordre sur les routes, que les gens puissent circuler correctement et SANS danger.

Pour réduire les dangers, nos très chers politiques ont donc dicté des interdictions avec des amendes à la clé. Par exemple, ces temps-ci, c’est une histoire de « zéro gramme d’alcool dans le sang au volant » pour les 18-24 ans dont on entend parler. Dans un sens, c’est une bonne idée car beaucoup des tués sur les routes sont dans cette tranche d’âge et parce que beaucoup de jeunes sont trop cons pour se responsabiliser eux-mêmes. Mais je pense que ça ne fonctionnera pas énormément. Pourquoi ? Parce que les gens (surtout les jeunes) n’en ont rien à foutre des règlements, des lois ou autres trucs qui pourrissent la liberté. Quand il s’agit de créer des lois qui visent à détruire la neutralité du net, il n’y a personne (ou du moins, pas grand-monde malheureusement) pour contester. Par contre, quand c’est une histoire qui vise à pomper votre ARGENT, vous êtes tous là pour ouvrir vos gueules.

Eh bien voilà ce que je propose : des prunes à minimum 1000€. Plus, si possible, une paire de tartes dans la tronche. Ça vous fera passer le goût du plein air.

Certains gueuleront : « MAIS C’EST SCANDALEUX DE LIRE UN TRUC PAREIL ! L’ÉTAT NOUS POMPE ASSEZ D’ARGENT COMME ÇA, Y EN A MARRE ! ». Ouais, c’est vrai. Mais tant que vous ne comprendrez pas, les amendes ne seront pas assez fortes. S’il n’y a que votre argent qui vous fasse réfléchir, alors je ne vois pas l’intérêt d’écrire des textes interdisant de faire ci ou ça.

Quand vous conduisez, vous êtes responsables de vous-même, des passagers et des autres conducteurs. Une voiture, c’est une magnifique machine pour se déplacer mais dès que vous êtes hors-la-loi,  ce n’est rien d’autre qu’une arme. Donc pensez-y avant de faire vos fils du vent.

Pour ceux qui ont le permis depuis longtemps, sachez que pour la modique somme de 15€, vous pouvez avoir un livre du code de la route. Je pense que ça pourrait vous être une lecture intéressante. Parce que oui, ce n’est pas parce que vous savez vous servir d’une voiture (et encore) que vous savez conduire (comme le prétendent certains vieux cons). Bien évidemment, le mieux (si vous en avez la bonne conscience) serait que vous repassiez intégralement le permis.

Aussi, en tant que passager, remarquez que vous avez le droit de tartiner la personne qui conduit (à la fin du trajet, évidemment), si celle-ci ne respecte pas le code. En effet, cet énergumène vous met en danger ; c’est ce que vous voulez ?

Je passe ici un coup de gueule contre tout ces connards qui se comportent en terroristes sur les routes mais heureusement, il y a en France (et dans le monde) des gens qui se soucient des autres et ces personnes, je les remercie.

Pour finir, permettez-moi de vous rappeler 2 règles que les automobilistes oublient :

  • Un clignotant, ce n’est pas fait pour être joli dans la nuit. Il vous est donc prié de l’utiliser pour TOUT changement de direction. Y compris sur les voies dont la direction à suivre est donnée par une flèche sur le sol. Vous devez aussi l’utiliser dans les ronds-points.
  • Concernant les passages piétons, vous n’avez pas à stationner ou vous arrêter dessus. C’est-à-dire que si devant vous il y a une file de voitures (attendant le passage au vert d’un feu, par exemple) et un passage piéton, vous devez vous arrêter en face de celui-ci et non dessus. De plus, quand un piéton est au niveau d’un zebra, vous avez pour devoir de vous arrêtez pour laisser passer ce dernier. Auquel cas, vous faites un refus de priorité.