This post is under construction...
The ICS was developed to perform...
Technologies:
Windows XP
C++ in Microsoft Visual Studio 8 (2005) IDE
Visual Basic in Microsoft Visual Studio 8 (2005) IDE
.NET Framework 2
Common Language Runtime (CLR)
Multiple Document Interface (MDI) applications
Single Document Interface (SDI) applications
Microsoft Fondation Classes (MFC 8.0)
Modeless Dialog Boxes
Modal Dialog Boxes
Objects Serialization
Afx Threads and critical sections
Software Interrupts
Timer Events (onTimer())
Windows Registry to save and retrieve persistent application’s data
Windows Contextual Help in compressed HTML file
Installation Wizard (Setup.exe)
Point Grey Research Scorpion and Dragonfly high-resolution digital cameras on an IEEE 1394 bus (FireWire™)
PCI-3E US Digital – Three Incremental Encoder with I/O Port , PCI Card
Trimble GPS connected via RS-232 serial port
NMEA (National Marine Electronics Association)
Multiple SATA Hard-drives
Picture Gallery
New feature in development that was not terminated.
I have started to add a new type of document that the application could open and display: 3D surfaces.
When I stopped working on that project, my application was able to read data for three dimensional lines and to represent them in a view.
For example, consider the following script file:
#
# Filename: \tmp\CapturedGeometry.txt
# Author: CameraManager
# Date: Feb/24/2010 08:23:22
#
# Description: This file contains saved geometry.
#
# Line3D is a new CameraManager script instruction that defines a 3-D line
# using a start and an arrival point:
#
# Syntax
# LINE3D x1 y1 z1 x2 y2 z2;
LINE3D 8.991185 879.958142 0.000000 8.991185 879.958142 0.000000 ;
LINE3D 8.991185 879.958142 0.000000 9.991771 879.932176 0.000000 ;
LINE3D 9.991771 879.932176 0.000000 10.995455 879.723784 0.000000 ;
LINE3D 10.995455 879.723784 0.000000 11.984334 880.386899 0.000000 ;
LINE3D 11.984334 880.386899 0.000000 12.983302 880.456176 0.000000 ;
LINE3D 12.983302 880.456176 0.000000 13.990395 880.047127 0.000000 ;
LINE3D 13.990395 880.047127 0.000000 14.989369 880.116005 0.000000 ;
LINE3D 14.989369 880.116005 0.000000 15.987314 880.245462 0.000000 ;
LINE3D 15.987314 880.245462 0.000000 16.986637 880.293790 0.000000 ;
LINE3D 16.986637 880.293790 0.000000 17.993493 879.898738 0.000000 ;
o
o
o
LINE3D 588.066698 880.431100 2320.000000 589.064360 880.577163 2320.000000 ;
LINE3D 589.064360 880.577163 2320.000000 590.073927 880.022510 2320.000000 ;
The program could parse these instructions to create the following representation using OpenGL:
État sur l’avancement du
projet TLPS
Ce qui est réalisé et ce qui
fonctionne
Changer les coordonnées
BIRIS(X,Z) en PROFILE(X,Y,Z)
Surface en 3-D à Partir de
Plusieurs Profiles
Figure: 3-D Surface Example 001.PNG
Prochaines Étapes
Renommer l’application
Renommer BIRIS
Implémenter la logique pour
le DMI et le GPS
Intégrer les profiles
mesurés par plusieurs caméras
Document de type Profile
Conclusion
Références
État sur l’avancement du
projet TLPS
Voici un
compte-rendu sur l’avancement du projet TLPS.
Ce qui est réalisé et ce qui
fonctionne
Le
système mesure un profile en retournant une série de points avec des valeurs en
X, mesurant la largeur. À chacun de ces points en X, une valeur Z est associée
pour déterminer une hauteur ou distance à chacun des ces points en X.
Le
système TLPS permet de faire ceci présentement avec des caméras simulées ainsi
qu’avec des caméras Dragonfly de Point Grey
Research montées dans un détecteur qui associe un laser, une caméra avec
double iris et des lentilles polarisantes.
Voici un
exemple:
Figure: Profile mesuré par une caméra avec BIRIS.PNG
Figure: Profile mesuré par une caméra avec BIRIS.PNG
Picture 1. Profile mesuré par une caméra avec BIRIS. |
Changer les coordonnées
BIRIS(X,Z) en PROFILE(X,Y,Z)
Si on
considère les coordonnées en Z (de la hauteur ou distance) comme des
coordonnées en Y, alors on peut facilement assimiler un profile à une fonction
f(x) = x dans un plan cartésien.
Si on
projette cela dans un plan cartésien nous pourrions affirmer que les
coordonnées Z sont en fait des coordonnées Y dans un système de coordonnées
main droite (right-handed
coordinate system http://en.wikipedia.org/wiki/Cartesian_coordinate_system).
Lorsque
le véhicule (camion ou automobile) sur lequel le système TLPS sera installé va
avancer, le DMI (Distance
Measuring Instrument)
va fournir une valeur en Z pour chacun des points (X,Y) mesurés sur la largeur.
Une caméra Dragonfly peut retourner 640 points au maximum sur une
largeur à mesurer. Selon la position de
cette caméra, selon qu’elle soit plus près ou plus éloigné de la surface à
mesurer, on peut mesurer une bande plus ou moins large. Donc, dorénavant on aura des points (X,Y,Z), où Z est la mesure alors que le
véhicule (DMI) avance.
Le
logiciel peut rendre ce profile de niveau, c’est-à-dire le mettre à
l’horizontale. En effet, en effectuant
une rotation de la courbe mesurée, le logiciel peut la rendre horizontale. De plus, il est possible d’effectuer une
translation des valeurs en X mesurées par l’instrument. En d’autres mots, on peut choisir à partir de
quelle et jusqu’à quelle valeur en X l’appareil fait une mesure. Il serait très facile aussi d’ajouter des
facteurs d’échelle pour modifier les paramètres de largeur et de hauteur.
Lorsque
le système affiches les profiles à l’écran en temps réel, les performances sont
intéressantes. Mais lorsque le système
n’affiche rien et qu’il effectue seulement les calculs, alors les performances
sont impressionnantes.
Surface en 3-D à Partir de
Plusieurs Profiles
Cette
section porte sur une recherche que j’ai effectuée pour moi-même et pour me
donner de nouvelles idées sur la finalité de ce projet.
Puisque
le système TLPS mesure des profiles avec des coordonnées (X,Y,Z), je me suis dit
que cela serait une bonne idée que de pouvoir représenter les profiles dans un
système 3-D pour générer la représentation d’une surface.
Donc, j’ai
écrit quelques lignes de programmation en C++ pour visionner de la géométrie en
trois dimensions dans l’application.
C’est un prototype, de la recherche pure seulement. Je voulais expérimenter et tenter de
représenter une surface en 3-D.
En
consultant quelques bouquins (cf. les références à la fin de ce document), j’ai
développé un prototype.
La
surface suivante est constituée 116 profiles avec en moyenne 576 mesures de
distances par profile. Il y a en fait 53 114
lignes constituant cette surface. Voir la
figure 3-D Surface Example 001.PNG. Les données brutes qui ont servies à générer
cette surface sont fournies en attachement dans le fichier CapturedGeometry.zip.
Cette
surface a été acquise en filmant le mur du bureau que j’occupais chez GIE. L’espèce de crevasse à été causée par ma
tasse à café que j’ai fait passer dans le faisceau laser. Les endroits où il n’y a pas de lignes ont
été causés par moi quand j’ai passé devant le faisceau laser.
Image 2. Exemple de surface 3D rendue avec OpenGL. |
Figure: 3-D Surface Example 001.PNG
Ici, je ne désire pas passer énormément de temps pour
expliquer comment j’ai réalisé la représentation de cette surface. Mon but n’est pas de donner un cours de graphisme
en 3-D. En fait, tout ce que je pourrais
dire ici serait une répétition des textes que je donne en référence à la fin de
ce document.
Toutefois, je vous montre quelques captures d’écran avec des
exemples éloquents.
Dans l’exemple suivant on voit
la même surface, mais on voit aussi deux autres documents qui montrent les
profiles mesurés pour les images 130 et 158 d’une caméra Dragonfly. Notez que l’image 158 montre très bien le
profile de ma tasse à café:
Figure: 3-D Surface Example 002.PNG
Image 3. Autre exemple de surface 3D avec details en coupe. |
Figure: 3-D Surface Example 002.PNG
L’écran
suivant montre trois vues de la même surface.
La seconde vue montre la surface horizontalement (à plat), donc on voit
bien sa hauteur. La troisième vue montre
un détail de cette surface:
Figure: 3-D Surface Example 003.PNG
Image 4. Exemple de surface 3D avec trois point de vue différents. |
Pour réaliser cette représentation
de surfaces en 3-D, j’ai développé un prototype pour projeter de la géométrie
tridimensionnelle sur un écran d’ordinateur.
Le but de ce document n’est pas d’expliquer cela, toutefois, je vous
montre un dernier écran qui démontre qu’en effet j’ai réalisé un programme qui
permet d’afficher de la géométrie tridimensionnelle sur un écran selon un point
de vue quelconque:
Figure: 3-D Viewing System Example 001.PNG
Figure: 3-D Viewing System Example 001.PNG
Le but du
projet actuel n’est pas de calculer des surfaces pour détecter des crevasses ou
des nids-de-poule dans les pavages. Le
but du projet actuel est simplement de calculer l’orniérage d’une route.
Cependant,
je crois que les exemples montrés précédemment donnent à penser qu’il serait
possible d’effectuer plus de recherche et de développement pour réaliser un
système qui serait capable de calculer et d’identifier les crevasses,
nids-de-poule, et autres anomalies dans les pavages. Est-ce que ça vaudrait la peine de faire
cela? Est-ce possible de le faire? Y
aurait-il une bonne raison pour le faire?
Je ne le sais pas pour l’instant.
Image 5. Viewing system example. |
Prochaines Étapes
Actuellement
le logiciel peut mesurer des profiles à partir d’une ou plusieurs caméras.
Renommer l’application
Je vais
changer le nom de l’application. Elle va
s’appeler TLPS, au lieu de CameraManager.
Renommer BIRIS
Une fois,
vous m’avez mentionné qu’il faudrait changer le nom de BIRIS dans
l’application. J’ai fait une classe CBiris (qui est l’adaptation de BIRIS en C vers
C++) et à beaucoup d’endroits dans la documentation, dans l’interface avec
l’usager (GUI) ainsi que dans le code source, je fais référence à BIRIS. Je peux facilement effectuer un Global Find and Replace pour changer ce
nom par un autre. Ma question est la
suivante: Par quoi devrais-je remplacer le mot BIRIS? J’attends
vos suggestions à ce sujet, Liviu.
Implémenter la logique pour
le DMI et le GPS
Je dois
implémenter la logique pour faire fonctionner le DMI et le GPS. J’ai déjà commencé cette tâche
d’ailleurs. Je vais pouvoir rédiger une
grande partie de ce code chez-moi en me basant sur ce que j’ai déjà fait dans
ICS. Mais éventuellement, je vais devoir
aller chez GIE pour effectuer des tests et les mises au point finales.
Intégrer les profiles
mesurés par plusieurs caméras
Maintenant,
il faut intégrer les données de mesures de profiles provenant de plusieurs
caméras pour former un profile plus large.
Il faut aussi tenir compte de la distance parcourue par le
véhicule. Cette information proviendra
du module DMI. Évidemment, on aura aussi
une coordonnée GPS (latitude, longitude et temps) associée à chaque point.
Image 6. Exemple d'assemblage de profiles provenant de N systèmes. |
Depuis le
début du projet, j’ai toujours eu en tête de créer un système qui pourrait
fonctionner de manière distribué.
C’est-à-dire que le système pourrait fonctionner sur plusieurs machines
qui communiquent ensemble par des connexions TCP/IP – des network sockets dans un
réseau informatique.
Il sera
possible de faire fonctionner le système sur une seule machine. En effet, un seul ordinateur pourrait
acquérir des images de caméras Dragonfly, calculer les profiles, acquérir les
données du DMI et du GPS, envoyer les
signaux de déclenchement (triggers)
aux diverses caméras et faire l’assemblage et la sauvegarde du profile de la
route. Mais, il sera aussi possible de
distribuer les traitements sur plusieurs machines pour obtenir une puissance de
traitement théoriquement illimitée. La configuration distribuée du système sera
déterminée par l’utilisateur. C’est-à-dire
que l’utilisateur pourra décider quelle machine fait quoi et quelle machine
gère les autres.
Document de type Profile
Je vais
créer un nouveau type de document. Un
type de document qui va acquérir la géométrie provenant d’une ou plusieurs
caméras qui mesurent et calculent des profiles à l’aide de BIRIS et les intégrer
de ce nouveau type de document pour l’afficher dans une nouvelle vue ou bien
encore sauver cette nouvelle géométrie.
Ce type
de document pourra contrôler des caméras installées sur un seul ordinateur ou
encore sur plusieurs machines mises en réseau.
Conclusion
Il reste
encore beaucoup de travail à faire. Je
n’ai pas tout détaillé dans ce document.
Je vous tiens au courant des progrès.
N’hésitez pas à communiquer avec moi si vous le désirez.
Marc Lemay
450-661-4602
Références
Fundamentals
of Three-Dimensional Computer Graphics
By Alan Watt, University of Sheffield
© 1989 Addison-Wesley Publishers Ltd.
ISBN
0-201-15442-0
Graphics
Library Programming Guide
Written by
Patricia McLendon
Document Number
007-12-10-040
© 1991, Silicon
Graphics Inc.
End of this post.
No comments:
Post a Comment