]> rtime.felk.cvut.cz Git - eurobot/public.git/commitdiff
Add first version of shape-detector from Martin Synek
authorMichal Sojka <sojkam1@fel.cvut.cz>
Mon, 22 Nov 2010 11:52:52 +0000 (12:52 +0100)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Mon, 22 Nov 2010 11:52:52 +0000 (12:52 +0100)
src/hokuyo/shape-detect/Makefile [new file with mode: 0644]
src/hokuyo/shape-detect/Makefile.omk [new file with mode: 0644]
src/hokuyo/shape-detect/length_data.csv [new file with mode: 0644]
src/hokuyo/shape-detect/main.cc [new file with mode: 0644]

diff --git a/src/hokuyo/shape-detect/Makefile b/src/hokuyo/shape-detect/Makefile
new file mode 100644 (file)
index 0000000..08cf5ff
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/src/hokuyo/shape-detect/Makefile.omk b/src/hokuyo/shape-detect/Makefile.omk
new file mode 100644 (file)
index 0000000..33dba2e
--- /dev/null
@@ -0,0 +1,5 @@
+# -*- makefile -*-
+
+bin_PROGRAMS = shape_detect
+
+shape_detect_SOURCES = main.cc
diff --git a/src/hokuyo/shape-detect/length_data.csv b/src/hokuyo/shape-detect/length_data.csv
new file mode 100644 (file)
index 0000000..0b5960f
--- /dev/null
@@ -0,0 +1,725 @@
+0,0,\r
+1,0,\r
+2,0,\r
+3,0,\r
+4,0,\r
+5,0,\r
+6,0,\r
+7,0,\r
+8,0,\r
+9,0,\r
+10,0,\r
+11,0,\r
+12,0,\r
+13,0,\r
+14,0,\r
+15,0,\r
+16,0,\r
+17,0,\r
+18,0,\r
+19,0,\r
+20,0,\r
+21,0,\r
+22,0,\r
+23,0,\r
+24,0,\r
+25,0,\r
+26,0,\r
+27,0,\r
+28,0,\r
+29,0,\r
+30,0,\r
+31,0,\r
+32,0,\r
+33,0,\r
+34,0,\r
+35,0,\r
+36,0,\r
+37,0,\r
+38,0,\r
+39,0,\r
+40,0,\r
+41,0,\r
+42,0,\r
+43,0,\r
+44,181,\r
+45,187,\r
+46,189,\r
+47,191,\r
+48,197,\r
+49,198,\r
+50,207,\r
+51,213,\r
+52,215,\r
+53,217,\r
+54,222,\r
+55,222,\r
+56,222,\r
+57,214,\r
+58,212,\r
+59,212,\r
+60,212,\r
+61,212,\r
+62,207,\r
+63,207,\r
+64,207,\r
+65,206,\r
+66,206,\r
+67,207,\r
+68,202,\r
+69,200,\r
+70,190,\r
+71,188,\r
+72,188,\r
+73,188,\r
+74,191,\r
+75,192,\r
+76,197,\r
+77,206,\r
+78,209,\r
+79,213,\r
+80,216,\r
+81,221,\r
+82,226,\r
+83,227,\r
+84,233,\r
+85,243,\r
+86,245,\r
+87,254,\r
+88,264,\r
+89,268,\r
+90,268,\r
+91,270,\r
+92,289,\r
+93,296,\r
+94,307,\r
+95,319,\r
+96,334,\r
+97,341,\r
+98,356,\r
+99,375,\r
+100,411,\r
+101,419,\r
+102,435,\r
+103,437,\r
+104,437,\r
+105,437,\r
+106,437,\r
+107,436,\r
+108,427,\r
+109,427,\r
+110,421,\r
+111,418,\r
+112,421,\r
+113,418,\r
+114,418,\r
+115,423,\r
+116,423,\r
+117,416,\r
+118,417,\r
+119,415,\r
+120,415,\r
+121,415,\r
+122,417,\r
+123,417,\r
+124,417,\r
+125,417,\r
+126,417,\r
+127,421,\r
+128,421,\r
+129,420,\r
+130,420,\r
+131,419,\r
+132,419,\r
+133,419,\r
+134,419,\r
+135,419,\r
+136,419,\r
+137,420,\r
+138,420,\r
+139,422,\r
+140,422,\r
+141,422,\r
+142,420,\r
+143,420,\r
+144,419,\r
+145,419,\r
+146,420,\r
+147,418,\r
+148,420,\r
+149,420,\r
+150,420,\r
+151,418,\r
+152,420,\r
+153,419,\r
+154,422,\r
+155,419,\r
+156,422,\r
+157,422,\r
+158,425,\r
+159,425,\r
+160,425,\r
+161,425,\r
+162,426,\r
+163,423,\r
+164,423,\r
+165,424,\r
+166,424,\r
+167,424,\r
+168,426,\r
+169,426,\r
+170,427,\r
+171,427,\r
+172,427,\r
+173,428,\r
+174,427,\r
+175,432,\r
+176,433,\r
+177,433,\r
+178,433,\r
+179,434,\r
+180,434,\r
+181,434,\r
+182,434,\r
+183,434,\r
+184,437,\r
+185,434,\r
+186,437,\r
+187,438,\r
+188,440,\r
+189,440,\r
+190,441,\r
+191,440,\r
+192,440,\r
+193,439,\r
+194,439,\r
+195,439,\r
+196,444,\r
+197,449,\r
+198,449,\r
+199,449,\r
+200,449,\r
+201,448,\r
+202,448,\r
+203,449,\r
+204,449,\r
+205,452,\r
+206,455,\r
+207,457,\r
+208,459,\r
+209,459,\r
+210,460,\r
+211,460,\r
+212,461,\r
+213,462,\r
+214,461,\r
+215,462,\r
+216,463,\r
+217,465,\r
+218,465,\r
+219,467,\r
+220,468,\r
+221,469,\r
+222,473,\r
+223,475,\r
+224,477,\r
+225,479,\r
+226,481,\r
+227,481,\r
+228,482,\r
+229,485,\r
+230,486,\r
+231,487,\r
+232,495,\r
+233,496,\r
+234,496,\r
+235,496,\r
+236,498,\r
+237,498,\r
+238,506,\r
+239,507,\r
+240,506,\r
+241,506,\r
+242,506,\r
+243,506,\r
+244,506,\r
+245,506,\r
+246,526,\r
+247,527,\r
+248,529,\r
+249,529,\r
+250,533,\r
+251,534,\r
+252,535,\r
+253,539,\r
+254,544,\r
+255,546,\r
+256,551,\r
+257,553,\r
+258,557,\r
+259,563,\r
+260,567,\r
+261,572,\r
+262,575,\r
+263,576,\r
+264,580,\r
+265,583,\r
+266,585,\r
+267,591,\r
+268,598,\r
+269,602,\r
+270,605,\r
+271,612,\r
+272,615,\r
+273,616,\r
+274,620,\r
+275,623,\r
+276,640,\r
+277,642,\r
+278,651,\r
+279,652,\r
+280,652,\r
+281,656,\r
+282,656,\r
+283,657,\r
+284,660,\r
+285,660,\r
+286,660,\r
+287,661,\r
+288,661,\r
+289,661,\r
+290,663,\r
+291,665,\r
+292,667,\r
+293,673,\r
+294,695,\r
+295,709,\r
+296,711,\r
+297,730,\r
+298,730,\r
+299,733,\r
+300,737,\r
+301,753,\r
+302,776,\r
+303,794,\r
+304,804,\r
+305,810,\r
+306,818,\r
+307,828,\r
+308,829,\r
+309,841,\r
+310,843,\r
+311,856,\r
+312,868,\r
+313,869,\r
+314,888,\r
+315,898,\r
+316,904,\r
+317,915,\r
+318,922,\r
+319,954,\r
+320,978,\r
+321,1010,\r
+322,1014,\r
+323,1035,\r
+324,1051,\r
+325,1070,\r
+326,1086,\r
+327,1116,\r
+328,1120,\r
+329,1138,\r
+330,1172,\r
+331,1193,\r
+332,1204,\r
+333,1225,\r
+334,1259,\r
+335,1290,\r
+336,1312,\r
+337,1328,\r
+338,1371,\r
+339,1391,\r
+340,0,\r
+341,0,\r
+342,0,\r
+343,7,\r
+344,0,\r
+345,0,\r
+346,0,\r
+347,0,\r
+348,0,\r
+349,0,\r
+350,0,\r
+351,0,\r
+352,0,\r
+353,0,\r
+354,0,\r
+355,0,\r
+356,0,\r
+357,0,\r
+358,0,\r
+359,0,\r
+360,0,\r
+361,0,\r
+362,0,\r
+363,0,\r
+364,0,\r
+365,0,\r
+366,0,\r
+367,0,\r
+368,0,\r
+369,0,\r
+370,0,\r
+371,0,\r
+372,0,\r
+373,0,\r
+374,0,\r
+375,0,\r
+376,0,\r
+377,0,\r
+378,0,\r
+379,0,\r
+380,0,\r
+381,0,\r
+382,0,\r
+383,0,\r
+384,0,\r
+385,0,\r
+386,0,\r
+387,0,\r
+388,0,\r
+389,0,\r
+390,0,\r
+391,0,\r
+392,0,\r
+393,0,\r
+394,0,\r
+395,0,\r
+396,0,\r
+397,0,\r
+398,0,\r
+399,0,\r
+400,0,\r
+401,0,\r
+402,0,\r
+403,0,\r
+404,0,\r
+405,0,\r
+406,0,\r
+407,0,\r
+408,0,\r
+409,0,\r
+410,0,\r
+411,0,\r
+412,0,\r
+413,0,\r
+414,1741,\r
+415,1741,\r
+416,1720,\r
+417,1720,\r
+418,1710,\r
+419,1677,\r
+420,1627,\r
+421,1585,\r
+422,1585,\r
+423,1585,\r
+424,6,\r
+425,6,\r
+426,6,\r
+427,1051,\r
+428,1050,\r
+429,1049,\r
+430,1049,\r
+431,1047,\r
+432,1049,\r
+433,1049,\r
+434,4258,\r
+435,4258,\r
+436,4370,\r
+437,4258,\r
+438,4154,\r
+439,734,\r
+440,733,\r
+441,732,\r
+442,730,\r
+443,718,\r
+444,708,\r
+445,708,\r
+446,708,\r
+447,709,\r
+448,710,\r
+449,710,\r
+450,710,\r
+451,710,\r
+452,716,\r
+453,716,\r
+454,717,\r
+455,717,\r
+456,718,\r
+457,721,\r
+458,721,\r
+459,721,\r
+460,721,\r
+461,721,\r
+462,721,\r
+463,721,\r
+464,755,\r
+465,755,\r
+466,755,\r
+467,751,\r
+468,746,\r
+469,743,\r
+470,743,\r
+471,743,\r
+472,747,\r
+473,774,\r
+474,775,\r
+475,780,\r
+476,794,\r
+477,796,\r
+478,803,\r
+479,821,\r
+480,824,\r
+481,828,\r
+482,843,\r
+483,4296,\r
+484,4341,\r
+485,4375,\r
+486,4375,\r
+487,4386,\r
+488,4404,\r
+489,4426,\r
+490,4427,\r
+491,4446,\r
+492,4446,\r
+493,4446,\r
+494,1153,\r
+495,1153,\r
+496,1067,\r
+497,1041,\r
+498,1029,\r
+499,1018,\r
+500,992,\r
+501,957,\r
+502,918,\r
+503,901,\r
+504,899,\r
+505,862,\r
+506,858,\r
+507,832,\r
+508,803,\r
+509,800,\r
+510,783,\r
+511,771,\r
+512,761,\r
+513,752,\r
+514,739,\r
+515,734,\r
+516,722,\r
+517,718,\r
+518,712,\r
+519,711,\r
+520,710,\r
+521,710,\r
+522,708,\r
+523,708,\r
+524,714,\r
+525,717,\r
+526,718,\r
+527,719,\r
+528,719,\r
+529,728,\r
+530,747,\r
+531,3540,\r
+532,3543,\r
+533,0,\r
+534,0,\r
+535,4011,\r
+536,4011,\r
+537,4011,\r
+538,3980,\r
+539,3965,\r
+540,3933,\r
+541,3932,\r
+542,3918,\r
+543,3904,\r
+544,3886,\r
+545,3863,\r
+546,3856,\r
+547,3847,\r
+548,3801,\r
+549,3768,\r
+550,3744,\r
+551,3743,\r
+552,3732,\r
+553,3719,\r
+554,3686,\r
+555,3685,\r
+556,3673,\r
+557,3658,\r
+558,3650,\r
+559,3630,\r
+560,3622,\r
+561,3616,\r
+562,3607,\r
+563,3607,\r
+564,3594,\r
+565,3573,\r
+566,2358,\r
+567,2356,\r
+568,2342,\r
+569,2342,\r
+570,2332,\r
+571,2332,\r
+572,7,\r
+573,0,\r
+574,3463,\r
+575,3463,\r
+576,3460,\r
+577,3455,\r
+578,3454,\r
+579,3444,\r
+580,3442,\r
+581,3432,\r
+582,3427,\r
+583,3425,\r
+584,3411,\r
+585,3410,\r
+586,3400,\r
+587,3392,\r
+588,3390,\r
+589,3373,\r
+590,3372,\r
+591,3372,\r
+592,3353,\r
+593,3347,\r
+594,3342,\r
+595,3337,\r
+596,3334,\r
+597,3332,\r
+598,3327,\r
+599,3314,\r
+600,3311,\r
+601,3307,\r
+602,3307,\r
+603,3303,\r
+604,3301,\r
+605,3300,\r
+606,3295,\r
+607,3291,\r
+608,3288,\r
+609,3282,\r
+610,3275,\r
+611,3275,\r
+612,3274,\r
+613,3272,\r
+614,3272,\r
+615,3271,\r
+616,3264,\r
+617,3264,\r
+618,3263,\r
+619,3263,\r
+620,3264,\r
+621,0,\r
+622,0,\r
+623,0,\r
+624,0,\r
+625,0,\r
+626,0,\r
+627,0,\r
+628,0,\r
+629,0,\r
+630,0,\r
+631,0,\r
+632,0,\r
+633,2096,\r
+634,2079,\r
+635,2078,\r
+636,2068,\r
+637,2068,\r
+638,2068,\r
+639,2073,\r
+640,2073,\r
+641,2080,\r
+642,7,\r
+643,0,\r
+644,0,\r
+645,0,\r
+646,0,\r
+647,0,\r
+648,0,\r
+649,0,\r
+650,0,\r
+651,3267,\r
+652,3267,\r
+653,3267,\r
+654,3269,\r
+655,3277,\r
+656,3278,\r
+657,3281,\r
+658,3283,\r
+659,3283,\r
+660,3283,\r
+661,3283,\r
+662,3286,\r
+663,3286,\r
+664,3286,\r
+665,3286,\r
+666,3286,\r
+667,3296,\r
+668,0,\r
+669,0,\r
+670,0,\r
+671,2825,\r
+672,2825,\r
+673,2825,\r
+674,2826,\r
+675,2832,\r
+676,2842,\r
+677,2850,\r
+678,2850,\r
+679,2842,\r
+680,328,\r
+681,328,\r
+682,328,\r
+683,328,\r
+684,328,\r
+685,299,\r
+686,295,\r
+687,277,\r
+688,271,\r
+689,264,\r
+690,261,\r
+691,257,\r
+692,251,\r
+693,251,\r
+694,237,\r
+695,233,\r
+696,232,\r
+697,227,\r
+698,222,\r
+699,219,\r
+700,215,\r
+701,212,\r
+702,212,\r
+703,209,\r
+704,201,\r
+705,199,\r
+706,189,\r
+707,186,\r
+708,184,\r
+709,183,\r
+710,183,\r
+711,177,\r
+712,177,\r
+713,174,\r
+714,171,\r
+715,170,\r
+716,170,\r
+717,163,\r
+718,161,\r
+719,160,\r
+720,155,\r
+721,155,\r
+722,155,\r
+723,154,\r
+724,146,\r
diff --git a/src/hokuyo/shape-detect/main.cc b/src/hokuyo/shape-detect/main.cc
new file mode 100644 (file)
index 0000000..2a4d377
--- /dev/null
@@ -0,0 +1,163 @@
+#include <string>
+#include <stdlib.h>
+#include <fstream>
+#include <iostream>
+#include <sstream>
+#include <math.h>
+#include <vector>
+
+// konstanta PI
+#define PI 3.14159265
+
+// krok laseru (rozliseni)
+#define RESOLUTION 0.331
+
+// presnost (v procentech)
+//#define ACCURACY 3
+
+using namespace std;
+
+// definice datoveho typu Point
+typedef struct {double x,y;} Point;
+
+// vypocet primek
+void detect_line(vector<int> &input_date, vector<Point> &kartez, vector<Point> &lines, double eps) {
+  
+  // pomocny bod
+  Point point;
+
+  // uhel polarni souradnice fi
+  double fi;
+
+  // zmerena vzdalenost
+  int r;
+  
+  // vypocet kartezskych souradnic  
+  for (int i = 0; i < input_date.size()-1; i +=2) { 
+    r = (input_date[i+1] <= 19) ? 0 : input_date[i+1];
+    fi = (RESOLUTION * input_date[i] - 45) * PI/180;
+        
+    point.x = r * cos(fi);
+    point.y = r * sin(fi);
+    
+    point.x = (point.x == -0) ? 0 : point.x;
+    point.y = (point.y == -0) ? 0 : point.y;
+    
+    kartez.push_back(point);
+  }
+  
+  // hledani primek (usecek) pomoci smeroveho vektoru a obecne rovnice primky
+  // obecna rovnice: ax + by + c = 0
+  
+  // parametr c
+  double c;
+  
+  // normalovy vektor a posledni bod nalezici primce
+  Point n_vector, end_point;
+  
+  // temp
+  bool tmp = true;
+    
+  // primka
+  double line;
+  
+  for (int i = 0; i < kartez.size()-1; i++) {
+
+    cout << "BOD: "<< kartez[i].x << " " << kartez[i].y << endl;
+    
+    if (kartez[i].x == 0 && kartez[i].y == 0) {
+      tmp = true;
+      continue;
+    }
+    
+    if (tmp) {
+      cout << "nova primka: ";
+      lines.push_back(kartez[i]);
+      
+      end_point = kartez[i+1];
+
+      n_vector.x = -1 * (kartez[i+1].y - kartez[i].y);
+      n_vector.y =  1 * (kartez[i+1].x - kartez[i].x);
+    
+      c = -1*n_vector.x*kartez[i].x - n_vector.y*kartez[i].y;
+      
+      cout << "nx: " << n_vector.x << " ny: " << n_vector.y << " c: " << c << endl;
+      
+      i++;
+      tmp = false;
+    } else {
+      cout << "dalsi bod na primce?: nx: " << n_vector.x << " ny: " << n_vector.y  << " c: " << c << endl;
+      
+      line = n_vector.x*kartez[i].x + n_vector.y*kartez[i].y + c;
+      
+      cout << "odchylka: " << line << endl;
+
+      if (line < (0+eps) && line > (0-eps)) {
+        end_point = kartez[i];
+        
+        cout << "ANO: X:" << end_point.x << " Y: " << end_point.y << endl;
+        
+      } else {
+        cout << "4" << endl;
+        lines.push_back(end_point);
+        
+        cout << "NE: X:" << end_point.x << " Y: " << end_point.y << endl;
+        
+        tmp = true;
+      }
+    }
+    cout << endl;  
+  }
+}
+
+int main(int argc, char** argv) {
+  
+  // kontrola vstupniho argumentu
+  if (argc < 3) {
+    cout << "Chyby vstupni soubor." << endl;
+    return 1;
+  }
+  // vector vstupnich dat
+  vector<int> input_date;
+  
+  // vector kartezskych souradnic
+  vector<Point> kartez;
+  
+  // vector zjistenych primek
+  vector<Point> lines;
+  
+  // odchylka bodu od primky
+  double eps = atof(argv[2]);
+  
+  // nacteni vstupniho souboru - mapy
+  ifstream infile (argv[1], ios_base::in);
+  
+  string line;         // radek vstupniho souboru
+  int number;          // cislo prectene ze souboru
+  int size_line;       // pocet znaku na radku
+    
+  while (getline(infile, line, ',')) {
+    if (line != "\n") {
+      stringstream strStream(line);
+      strStream >> number;
+      input_date.push_back(number);
+    }
+  }
+  
+  detect_line(input_date, kartez, lines, eps);
+  
+  // ulozeni do souboru
+  FILE *file = fopen("output_data","w");
+/*
+  for (int i = 0; i < kartez.size(); i += 1)
+    fprintf(file, "%f, %f\n", kartez[i].x, kartez[i].y);
+*/
+  for (int i = 0; i < lines.size(); i += 1)
+    fprintf(file, "%f, %f\n", lines[i].x, lines[i].y);
+
+  fclose(file);
+  
+  return 0;
+}
+