#include "video4linux/video4linux.h" #include "map.h" #include "oconfig.h" #include "group.h" #include "space.h" #include #include #include #include #include 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 (); }