summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/ovision/test_ovision_ogl.cc
diff options
context:
space:
mode:
Diffstat (limited to '2004/i/nono/src/ovision/test_ovision_ogl.cc')
-rw-r--r--2004/i/nono/src/ovision/test_ovision_ogl.cc190
1 files changed, 190 insertions, 0 deletions
diff --git a/2004/i/nono/src/ovision/test_ovision_ogl.cc b/2004/i/nono/src/ovision/test_ovision_ogl.cc
new file mode 100644
index 0000000..2f6dd7e
--- /dev/null
+++ b/2004/i/nono/src/ovision/test_ovision_ogl.cc
@@ -0,0 +1,190 @@
+
+#include "video4linux/video4linux.h"
+#include "map.h"
+#include "oconfig.h"
+#include "group.h"
+#include "space.h"
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <stdlib.h>
+
+#include <iostream>
+
+int fifo;
+long pid;
+
+void
+endSleep(int numSignal)
+{
+ // Reassignement du signal handler
+ signal(SIGUSR1, endSleep);
+}
+
+
+void
+init ()
+{
+ signal(SIGUSR1, endSleep);
+
+ // Suppression de l'ancien fifo
+ system("rm -f uicmds");
+
+ // Creation du fifo
+ if (mknod("uicmds", S_IFIFO | 0666, 0) != 0 && errno != EEXIST)
+ {
+ std::cerr << " : Error during fifo creation";
+ return;
+ }
+
+ // Ouverture du fifo
+ fifo = open("uicmds", O_RDWR);
+ if (fifo < 0)
+ {
+ std::cerr << " : Error during fifo opening";
+ return;
+ }
+
+ // On choppe le pid du prog adjust situé dans le fichier adjust.PID
+ FILE *file;
+ file = fopen("adjust.PID", "r");
+ if (!file)
+ {
+ std::cerr << "UI:UI : PID file not found" << std::endl;
+ exit(1);
+ }
+ char buf[10];
+ fgets(buf, 10, file);
+ pid = atol(buf);
+ fclose(file);
+
+ // Ecriture du PID dans un fichier
+ long uiPid = getpid();
+ file = fopen("ui.PID", "w+");
+ if (!file)
+ {
+ std::cerr << "Error during file opening" << std::endl;
+ return;
+ }
+ fprintf(file, "%li\n", uiPid);
+ fclose(file);
+
+ // Ouverture du fifo
+ kill(pid, SIGUSR2);
+}
+
+void
+SendSignal(char *cmd)
+{
+ // Ecrit dans le fifo
+ write(fifo, cmd, 50);
+
+ // Envoie un signal USR1 au prog adjust
+ kill(pid, SIGUSR1);
+}
+
+
+
+void
+end ()
+{
+ close(fifo);
+
+ system("rm -f adjust.PID ui.PID");
+}
+
+int
+main ()
+{
+ /////////////////////////////////////////////////////////////////////////////////////////
+ /// Initialisation des classes
+ OConfig oconfig("rc/vision.conf");
+
+ Img img;
+ Video4Linux::ColorSpace cs;
+ cs = Video4Linux::rgb;
+ Video4Linux v4l("/dev/video", cs, 60000);
+ v4l.calibrate ();
+
+ // Prendre une image pour que la taille de l'image soit configuré
+ img.load (v4l);
+
+ Space space(img.width, img.height);
+ space.LoadFromFile ();
+ space.Setup (0.00603759, 0.593767, 291.474);
+
+
+ std::cout << "ok" << std::endl;
+
+ SegmNN segmNN(&img);
+ segmNN.BuildNN(oconfig.nn_NbCouleurs, LOAD_FROM_FILE);
+
+ Group group(&img, &segmNN);
+
+ Map map(&space);
+ /////////////////////////////////////////////////////////////////////////////////////////
+ init ();
+
+
+
+ /////////////////////////////////////////////////////////////////////////////////////////
+ /// Prends une image a partir de la camera et l'analyse
+ char filename[30];
+ char buf[40];
+ int i = 0;
+ while (1)
+ {
+ std::cout << "-----------------------------------------------------------------" << std::endl;
+ std::cout << "image n°" << i << std::endl;
+ img.load(v4l);
+ img.load(v4l);
+ sprintf(filename, "test%i.rgb", i);
+ img.WriteRGB(filename);
+ sprintf(buf, "n %s\n", filename);
+ SendSignal(buf);
+
+ group.JumpPoints(oconfig.groupColor, oconfig.goalColor);
+ group.ShowZones();
+ std::cout << "-------------\n" << std::endl;
+
+/* ZONE *pCur = group.zoneListBall;
+ int j=0;
+ while (pCur)
+ {
+ int x,y;
+ x = pCur->centerx;
+ y = img.height - pCur->centery;
+ space.GetLoc(x, y, x, y);
+ std::cout << j << ":" << x << " " << y << std::endl;
+ pCur = pCur->next;
+ j++;
+ }
+*/
+
+ std::cout << "-------------\n" << std::endl;
+ std::cout << "Map:\n" << std::endl;
+ map.AddBallsToMap (&group);
+ map.ShowBalls ();
+
+ double balX, balY;
+ if (map.GetCurBallPos (balX, balY))
+ std::cout << "Balle Courante: " << balX << " " << balY << std::endl;
+
+
+ if (map.IsTree ())
+ {
+ double treeX, treeY;
+ map.GetTreePos (treeX, treeY);
+ std::cout << "Tree: " << treeX << " " << treeY << std::endl;
+ }
+
+
+// sleep(1);
+ getchar();
+ i++;
+ }
+ /////////////////////////////////////////////////////////////////////////////////////////
+ end ();
+}
+