NimbRo ROS Soccer Package
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Parameters.hpp
1 //Parameters.hpp
2 // Created on: Apr 20, 2015
3 // Author: Hafez Farazi <farazi@ais.uni-bonn.de>
4 #pragma once
5 
6 #include <config_server/parameter.h>
7 #include <config_server/ParameterLoadTime.h>
8 #include <string.h>
9 #include <opencv2/opencv.hpp>
10 #include <ros/package.h>
11 #include <ros/ros.h>
12 #include <std_msgs/Time.h>
13 #define IMGWIDTH 640
14 #define IMGHEIGHT 480
15 #define MAXIMGDIST 800
16 #define MAXCONSIDERDISTANCE 10.81
17 #define IMGBOX cv::Rect(0,0,IMGWIDTH,IMGHEIGHT)
18 #define IMGPYRDOWNBOX cv::Rect(0,0,320,240)
19 #define COLORED_OBJECT_COUNT 6
20 
21 using namespace std;
22 using namespace cv;
23 
24 #define GETS(x) #x
25 
26 #define CSTR(x) prefix + GETS(x)
27 
28 #define MP(x,...) x(CSTR(x),__VA_ARGS__)
29 
30 #define MPT(x,y,...) y(prefix+#x+#y,__VA_ARGS__)
31 
32 typedef config_server::Parameter<bool> pbool;
33 typedef config_server::Parameter<int> pint;
34 typedef config_server::Parameter<float> pfloat;
35 typedef config_server::Parameter<string> pstring;
36 
37 class GroupParameter
38 {
39  vector<bool> lastDataState;
40  vector<config_server::Parameter<bool>*> data;
41 public:
42 
43  GroupParameter()
44  {
45 
46  }
47 
48  void add(config_server::Parameter<bool>* _in)
49  {
50  data.push_back(_in);
51  lastDataState.resize(data.size());
52  for (size_t i = 0; i < data.size(); i++)
53  {
54  lastDataState[i] = data[i]->get();
55  }
56  }
57 
58  void update()
59  {
60  int firstChange2True = -1;
61  int numberOf2TrueChange = 0;
62  for (size_t i = 0; i < data.size(); i++)
63  {
64  if (data[i]->get() && !lastDataState[i])
65  {
66  numberOf2TrueChange++;
67  if (firstChange2True == -1)
68  {
69  firstChange2True = i;
70  }
71  }
72  }
73 
74  if (numberOf2TrueChange >= 1)
75  {
76  for (size_t i = 0; i < data.size(); i++)
77  {
78  if ((int) i == firstChange2True)
79  {
80  data[i]->set(true);
81  }
82  else
83  {
84  data[i]->set(false);
85  }
86  }
87  }
88 
89  for (size_t i = 0; i < data.size(); i++)
90  {
91  lastDataState[i] = data[i]->get();
92  }
93  }
94 };
95 
96 template<class T>
97 class localParameter
98 {
99 private:
100 
101 public:
102  T data;
103  localParameter(T in)
104  {
105  set(in);
106  }
107  inline T get() const
108  {
109  return data;
110  }
111  inline T operator()() const
112  {
113  return get();
114  }
115 
116  void set(T in)
117  {
118  data = in;
119  }
120 };
127 {
128 public:
129  pbool *active;
130  pint*h0;
131  pint*h1;
132  pint *s0;
133  pint *s1;
134  pint *v0;
135  pint *v1;
136 };
137 
138 #define GETHSVSTRUCT() \
139 hsvRangeC GetHSVRange() \
140 { \
141  hsvRangeC hsvRes; \
142  hsvRes.h0=&h0; \
143  hsvRes.h1=&h1; \
144  hsvRes.s0=&s0; \
145  hsvRes.s1=&s1; \
146  hsvRes.v0=&v0; \
147  hsvRes.v1=&v1; \
148  hsvRes.active=&active; \
149  return hsvRes; \
150 }
151 
157 {
158 public:
159  pbool enable;
160  pbool showMask;
161  pbool showResult;
162  pbool showDebug;
163  pint h0;
164  pint h1;
165  pint s0;
166  pint s1;
167  pint v0;
168  pint v1;
169  pbool active;
170  pint erode;
171  pint dilate;
172  pint erode2;
173  pint dilate2;
174  pint maxContourCount;
175  pint minArea;
176  pint maxDownDiffPixel;
177  pfloat approxPoly;
178  pfloat maxAcceptDistance;
179  pfloat minAcceptX;
180  fieldParamC(string prefix) :
181  enable(CSTR(enable), true), showMask(CSTR(showMask), false), showResult(
182  CSTR(showResult), false), showDebug(CSTR(showDebug), false), h0(
183  CSTR(hsv/h0), 0, 1, 180, 0), h1(CSTR(hsv/h1), 0, 1, 180, 0), s0(
184  CSTR(hsv/s0), 0, 1, 255, 0), s1(CSTR(hsv/s1), 0, 1, 255, 0), v0(
185  CSTR(hsv/v0), 0, 1, 255, 0), v1(CSTR(hsv/v1), 0, 1, 255, 0), active(
186  CSTR(hsv/active), false), erode(CSTR(morph/erode), 0, 1, 20,
187  1), dilate(CSTR(morph/dilate), 0, 1, 20, 1), erode2(
188  CSTR(morph/erode2), 0, 1, 100, 15), dilate2(
189  CSTR(morph/dilate2), 0, 1, 100, 0), maxContourCount(
190  CSTR(shape/maxContourCount), 1, 1, 10, 2), minArea(
191  CSTR(shape/minArea), 0, 1, IMGWIDTH * IMGHEIGHT, 0),MPT(shape/,maxDownDiffPixel,0,1,IMGHEIGHT,200), approxPoly(
192  CSTR(real/approxPoly), 0, 0.005, 1, 0.02),MPT(shape/,maxAcceptDistance,0,0.1,45,10.81),MPT(shape/,minAcceptX,-10.81,0.1,0,-1)
193  {
194 
195  }
196 
197  GETHSVSTRUCT()
198 
199 };
206 {
207 public:
208  Point debugThisPos;
209  bool debugThis;
210  vector<Point3d> distSizeVec;
211  string distSizeVecPath;
212  vector<Mat> histList[3];
213  string histListcPath[3];
214  localParameter<float> radius;
215  pbool enable;
216  pbool enableHog;
217  pbool showMask;
218  pbool showResult;
219  pbool showInput;
220  pbool showAllCircle;
221  pbool showCandidate;
222  pbool showBoxs;
223  pint h0;
224  pint h1;
225  pint s0;
226  pint s1;
227  pint v0;
228  pint v1;
229  pbool active;
230  pfloat histogramH;
231  pfloat histogramS;
232  pfloat histogramV;
233  pint erode;
234  pint dilate;
235  pint erode2;
236  pint dilate2;
237  pfloat BiggerRectHT;
238  pfloat BiggerRectHB;
239  pfloat BiggerRectW;
240  pfloat histogramH_C;
241  pfloat histogramS_C;
242  pfloat histogramV_C;
243  pint dist2cascade;
244  pfloat houghDP;
245  pint houghMaxDist;
246  pint houghCanny;
247  pint houghCircle;
248  pint houghMinR;
249  pint houghMaxR;
250  pfloat houghCandWRatio;
251  pfloat houghCandHTopRatio;
252  pfloat houghCandHDownRatio;
253  pbool pyrDown;
254  pint whitePercent;
255  pint notGreenPercent;
256  pint btnGCheckPercent;
257  pint kernelBlur;
258  pint sigmaBlur;
259  pbool subResultFromCanny;
260  pfloat btnGCheckBoxtop;
261  pfloat btnGCheckBoxdown;
262  pfloat btnGCheckBoxW;
263  pbool addSizeDistance;
264  pbool popSizeDistance;
265  pbool clearDistSizeVec;
266  pbool addHistogram;
267  pbool popHistogram;
268  pbool clearHistogram;
269  pbool savePositive;
270  pbool saveNegative;
271  pbool saveNegativeFull;
272  pint rectRotationMax;
273  pint rectRotationStep;
274  pint rectResizeWidth;
275  pint rectResizeHeight;
276  pfloat cascadeScale;
277  pint cascadeNinNeighbors;
278  pbool loadCascadeFile;
279  pbool printBallDetection;
280  pbool mergeResult;
281  ballParamC(string prefix) :
282  radius(0.095), enable(CSTR(enable), true), enableHog(
283  CSTR(cascade/enable), true), showMask(CSTR(showMask),
284  false), showResult(CSTR(showResult), false), showInput(
285  CSTR(showInput), false), showAllCircle(CSTR(showAllCircle),
286  false), showCandidate(CSTR(showCandidate), false), showBoxs(
287  CSTR(showBoxs), false), h0(CSTR(hsv/h0), 0, 1, 180, 0), h1(
288  CSTR(hsv/h1), 0, 1, 180, 0), s0(CSTR(hsv/s0), 0, 1, 255, 0), s1(
289  CSTR(hsv/s1), 0, 1, 255, 0), v0(CSTR(hsv/v0), 0, 1, 255, 0), v1(
290  CSTR(hsv/v1), 0, 1, 255, 0), active(CSTR(hsv/active),
291  false), histogramH(CSTR(hsv/histogramH), 0, 0.05, 1, 0.5), histogramS(
292  CSTR(hsv/histogramS), 0, 0.05, 1, 0.5), histogramV(
293  CSTR(hsv/histogramV), 0, 0.05, 1, 0.5), erode(
294  CSTR(morph/erode), 0, 1, 20, 1), dilate(CSTR(morph/dilate),
295  0, 1, 20, 1), erode2(CSTR(morph/erode2), 0, 1, 20, 0), dilate2(
296  CSTR(morph/dilate2), 0, 1, 20, 0), BiggerRectHT(
297  CSTR(cascade/BiggerRectHT), 0, 0.1, 5, 1.4), BiggerRectHB(
298  CSTR(cascade/BiggerRectHB), 0, 0.1, 5, 2), BiggerRectW(
299  CSTR(cascade/BiggerRectW), 0, 0.1, 5, 2), histogramH_C(
300  CSTR(cascade/histogramH_C), 0, 0.05, 1, 0.7), histogramS_C(
301  CSTR(cascade/histogramS_C), 0, 0.05, 1, 0.7), histogramV_C(
302  CSTR(cascade/histogramV_C), 0, 0.05, 1, 0.7), dist2cascade(
303  CSTR(cascade/dist2cascade), 0, 1, IMGWIDTH, 220), houghDP(
304  CSTR(hough/DP), 0.1, 0.1, 10, 2), houghMaxDist(
305  CSTR(hough/maxDist), 2, 1,
306  IMGWIDTH, 100), houghCanny(CSTR(hough/canny), 1, 1, 255,
307  200), houghCircle(CSTR(hough/circle), 1, 1, 255, 100), houghMinR(
308  CSTR(hough/minR), 1, 1, IMGWIDTH, 1), houghMaxR(
309  CSTR(hough/maxR), 1, 1, IMGWIDTH, 1), houghCandWRatio(
310  CSTR(hough/houghCandWRatio), 1, 0.05, 5, 1), houghCandHTopRatio(
311  CSTR(hough/houghCandHTopRatio), 1, 0.05, 2.5, 1), houghCandHDownRatio(
312  CSTR(hough/houghCandHDownRatio), 1, 0.05, 2.5, 1), pyrDown(
313  CSTR(hough/pyrDown), true), whitePercent(
314  CSTR(reject/whitePercent), 0, 1, 100, 10), notGreenPercent(
315  CSTR(reject/notGPercent), 0, 1, 100, 10), MPT(reject/,btnGCheckPercent,0,1,100,50), kernelBlur(
316  CSTR(hough/kernelBlur), 0, 1, 75, 15), sigmaBlur(
317  CSTR(hough/sigmaBlur), 0, 1, 150, 2), subResultFromCanny(
318  CSTR(subResultFromCanny), true), MPT(reject/,btnGCheckBoxtop,0,0.1,1.5,0),
319  MPT(reject/,btnGCheckBoxdown,0,0.1,1.5,1.3), MPT(reject/,btnGCheckBoxW,0,0.1,1.5,1.3),
320  MPT(gui/,addSizeDistance, false), MPT(gui/,popSizeDistance, false), MPT(gui/,clearDistSizeVec, false), MPT(gui/,addHistogram,false),
321  MPT(gui/,popHistogram, false), MPT(gui/,clearHistogram, false), MPT(gui/,savePositive, false), MPT(gui/,saveNegative, false), MPT(gui/,saveNegativeFull,false),
322  MPT(gui/,rectRotationMax,0,1,45,20), MPT(gui/,rectRotationStep,1,1,20,10), MPT(gui/,rectResizeWidth,0,1,IMGWIDTH,0), MPT(gui/,rectResizeHeight,0,1,IMGHEIGHT,0),
323  MPT(cascade/,cascadeScale,1,0.01,2,1.1), MPT(cascade/,cascadeNinNeighbors,0,1,20,10), MPT(cascade/,loadCascadeFile,false),MP(printBallDetection,false),MP(mergeResult,false)
324  {
325  distSizeVecPath = "ball_distSizeVec.yml";
326  histListcPath[0] = "ballColorHist0.yml";
327  histListcPath[1] = "ballColorHist1.yml";
328  histListcPath[2] = "ballColorHist2.yml";
329  debugThisPos.x = debugThisPos.y = -1;
330  debugThis = false;
331  }
332 
333  GETHSVSTRUCT()
334 
335 };
342 {
343 public:
344  pbool enable;
345  pbool showMask;
346  pbool showResult;
347  pbool showAllLine;
348  pbool showVote;
349  pbool showCanny;
350  pint h0;
351  pint h1;
352  pint s0;
353  pint s1;
354  pint v0;
355  pint v1;
356  pbool active;
357  pint MinLineLength;
358  pint AngleToMerge;
359  pfloat DistanceToMerge;
360  pint maxLineGapHough;
361  pfloat rhoHough;
362  pint thetaHough;
363  pint threasholdHough;
364  pint jumpMax;
365  pint jumpMin;
366  pfloat widthCheck;
367  pbool aprxDist;
368  pint doubleVote;
369  pint greenVote;
370  pint colorVote;
371  pbool doubleVUse;
372  pbool greenVUse;
373  pbool colorVUse;
374  pfloat doubleVStart;
375  pfloat greenVStart;
376  pfloat colorVStart;
377  pfloat doubleVEnd;
378  pfloat greenVEnd;
379  pfloat colorVEnd;
380  pint cannyThreadshold;
381  pint blurSize;
382  pint cannyaperture;
383 
384  lineParamC(string prefix) :
385  enable(CSTR(enable), true), showMask(CSTR(showMask), false), showResult(
386  CSTR(showResult), false), showAllLine(CSTR(showAllLine),
387  false), showVote(CSTR(showVote), false), showCanny(
388  CSTR(showCanny), false), h0(CSTR(hsv/h0), 0, 1, 180, 0), h1(
389  CSTR(hsv/h1), 0, 1, 180, 0), s0(CSTR(hsv/s0), 0, 1, 255, 0), s1(
390  CSTR(hsv/s1), 0, 1, 255, 0), v0(CSTR(hsv/v0), 0, 1, 255, 0), v1(
391  CSTR(hsv/v1), 0, 1, 255, 0), active(CSTR(hsv/active),
392  false), MinLineLength(CSTR(hough/MinLineLength), 10, 1,
393  1000, 100), AngleToMerge(CSTR(shape/AngleToMerge), 0, 1, 90,
394  10), DistanceToMerge(CSTR(shape/DistanceToMerge), 0, 0.05,
395  1, 0.1), maxLineGapHough(CSTR(hough/maxLineGapHough), 0, 1,
396  150, 20), rhoHough(CSTR(hough/rhoHough), 0.01, 0.01, 2, 1), thetaHough(
397  CSTR(hough/thetaHough), 1, 1, 180, 45), threasholdHough(
398  CSTR(hough/threasholdHough), 1, 1, 255, 20), jumpMax(
399  CSTR(vote/jumpMax), 0, 1, 150, 20), jumpMin(
400  CSTR(vote/jumpMin), 1, 1, 20, 3), widthCheck(
401  CSTR(vote/widthCheck), 0.01, 0.01, 1, 0.07), aprxDist(
402  CSTR(vote/aprxDist), true), doubleVote(
403  CSTR(vote/doubleVote), 0, 1, 100, 60), greenVote(
404  CSTR(vote/greenVote), 0, 1, 100, 60), colorVote(
405  CSTR(vote/colorVote), 0, 1, 100, 60), doubleVUse(
406  CSTR(vote/doubleVoteUse), true), greenVUse(
407  CSTR(vote/greenVoteUse), true), colorVUse(
408  CSTR(vote/colorVoteUse), true), doubleVStart(
409  CSTR(vote/doubleVStart), 0, 0.1, 1, 0), greenVStart(
410  CSTR(vote/greenVStart), 0, 0.1, 1, 0), colorVStart(
411  CSTR(vote/colorVStart), 0, 0.1, 1, 0), doubleVEnd(
412  CSTR(vote/doubleVEnd), 0, 0.1, 1, 1), greenVEnd(
413  CSTR(vote/greenVEnd), 0, 0.1, 1, 1), colorVEnd(
414  CSTR(vote/colorVEnd), 0, 0.1, 1, 1), MPT(canny/,cannyThreadshold, 1, 1, 100, 23), MPT(canny/,blurSize, 1, 1, 20, 3), MPT(canny/,cannyaperture
415  , 1, 1, 20, 3)
416  {
417 
418  }
419 
420  GETHSVSTRUCT()
421 
422 };
429 {
430 public:
431  vector<Point3d> distSizeVec;
432  string distSizeVecPath;
433  pbool enable;
434  pbool showMask;
435  pbool showResult;
436  pbool showAllLines;
437  pbool showResLine;
438  pbool showVote;
439  pint h0;
440  pint h1;
441  pint s0;
442  pint s1;
443  pint v0;
444  pint v1;
445  pbool active;
446  pint MinLineLength;
447  pint MaxOutField;
448  pfloat DistanceToMerge;
449  pfloat NearestDistance;
450  pfloat FarestDistance;
451  pint NearMinLen;
452  pint NearMaxLen;
453  pint FarMinLen;
454  pint FarMaxLen;
455  pint jumpMax;
456  pint doubleVote;
457  pint minDoubleLength;
458  pint minContinuesColor;
459 
460  pbool addSizeDistance;
461  pbool popSizeDistance;
462  pbool clearDistSizeVec;
463  goalParamC(string prefix) :
464  enable(CSTR(enable), true), showMask(CSTR(showMask), false), showResult(
465  CSTR(showResult), false), showAllLines(CSTR(showAllLines),
466  false), showResLine(CSTR(showResLine), false), showVote(
467  CSTR(showVote), false), h0(CSTR(hsv/h0), 0, 1, 180, 0), h1(
468  CSTR(hsv/h1), 0, 1, 180, 0), s0(CSTR(hsv/s0), 0, 1, 255, 0), s1(
469  CSTR(hsv/s1), 0, 1, 255, 0), v0(CSTR(hsv/v0), 0, 1, 255, 0), v1(
470  CSTR(hsv/v1), 0, 1, 255, 0), active(CSTR(hsv/active), true), MinLineLength(
471  CSTR(shape/MinLineLength), 40, 1, IMGWIDTH, 50), MaxOutField(
472  CSTR(shape/MaxOutField), -40, 1, 40, 0), DistanceToMerge(
473  CSTR(shape/DistanceToMerge), 0, 1, 100, 15), NearestDistance(
474  CSTR(shape/NearestDistance), 0, 0.1, 10.81, 0), FarestDistance(
475  CSTR(shape/FarestDistance), 0, 0.1, 10.81, 10.81), NearMinLen(
476  CSTR(shape/NearMinLen), 0, 1, IMGWIDTH, 0), NearMaxLen(
477  CSTR(shape/NearMaxLen), 0, 1, IMGWIDTH, IMGWIDTH), FarMinLen(
478  CSTR(shape/FarMinLen), 0, 1, IMGWIDTH, 0), FarMaxLen(
479  CSTR(shape/FarMaxLen), 0, 1, IMGWIDTH, IMGWIDTH), jumpMax(
480  CSTR(vote/JumpDouble), 0, 1, 64, 2), doubleVote(
481  CSTR(vote/VoteDouble), 0, 1, 100, 40), minDoubleLength(
482  CSTR(vote/minDoubleLength), 0, 1, 480, 3), minContinuesColor(
483  CSTR(vote/minContinuesColor), 0, 1, 480, 7), MPT(gui/,addSizeDistance,false), MPT(gui/,popSizeDistance,false), MPT(gui/,clearDistSizeVec,false)
484  {
485  distSizeVecPath = "goal_distSizeVec.yml";
486  }
487 
488  GETHSVSTRUCT()
489 
490 };
497 {
498 public:
499  pbool enable;
500  pbool mask;
501  pbool showResult;
502  pint h0;
503  pint h1;
504  pint s0;
505  pint s1;
506  pint v0;
507  pint v1;
508  pbool active;
509  pint erode;
510  pint dilate;
511  pint minArea;
512  pfloat decayConfidence;
513  pfloat maxPossibleJump;
514  pfloat lowPassCoef;
515  pfloat minDistance;
516  pfloat maxDistance;
517 
518  obstacleParamC(string prefix) :
519  enable(CSTR(enable), true), mask(CSTR(showMask), false), showResult(
520  CSTR(showResult), false), h0(CSTR(hsv/h0), 0, 1, 180, 0), h1(
521  CSTR(hsv/h1), 0, 1, 180, 0), s0(CSTR(hsv/s0), 0, 1, 255, 0), s1(
522  CSTR(hsv/s1), 0, 1, 255, 0), v0(CSTR(hsv/v0), 0, 1, 255, 0), v1(
523  CSTR(hsv/v1), 0, 1, 255, 0), active(CSTR(hsv/active),
524  false), erode(CSTR(morph/erode), 0, 1, 20, 1), dilate(
525  CSTR(morph/dilate), 0, 1, 20, 1), minArea(
526  CSTR(shape/minArea), 0, 1,
527  IMGWIDTH * IMGHEIGHT, 500),MPT(model/,decayConfidence,0,0.001,1,0.99),MPT(model/,maxPossibleJump,0,0.01,10,0.4),
528  MPT(model/,lowPassCoef,0,0.01,1,0.9),MPT(shape/,minDistance,0,0.01,10.81,0),MPT(shape/,maxDistance,0,0.01,10.81,10.81)
529 
530  {
531 
532  }
533 
534  GETHSVSTRUCT()
535 
536 };
543 {
544 public:
545  pbool active;
546  pint h0;
547  pint h1;
548  pint s0;
549  pint s1;
550  pint v0;
551  pint v1;
552 
553  igusParamC(string prefix) :
554  active(CSTR(hsv/active), false), h0(CSTR(hsv/h0), 0, 1, 180, 0), h1(
555  CSTR(hsv/h1), 0, 1, 180, 0), s0(CSTR(hsv/s0), 0, 1, 255, 0), s1(
556  CSTR(hsv/s1), 0, 1, 255, 0), v0(CSTR(hsv/v0), 0, 1, 255, 0), v1(
557  CSTR(hsv/v1), 0, 1, 255, 0)
558 
559  {
560 
561  }
562 
563  GETHSVSTRUCT()
564 
565 };
571 class cameraC
572 {
573 public:
574  pbool flipHor;
575  pbool flipVer;
576  localParameter<int> width;
577  localParameter<int> height;
578  localParameter<int> widthUnDistortion;
579  localParameter<int> heightUnDistortion;
580  pfloat diagonalAngleView;
581  pfloat aspW;
582  localParameter<float> aspH;
583  pbool freezInput;
584  cameraC(string prefix) :
585  flipHor(CSTR(flipHor), false), flipVer(CSTR(flipVer), false), width(
586  IMGWIDTH), height(
587  IMGHEIGHT), widthUnDistortion(0), heightUnDistortion(0), diagonalAngleView(
588  CSTR(diagonalAngleView), 1, 0.05, 180, 75), aspW(CSTR(aspW),
589  0, 0.1, 40, 4.0), aspH(3.0),MP(freezInput,false)
590  {
591  freezInput.set(false);
592  }
593 };
599 class topViewC
600 {
601 public:
602  pfloat scale;
603  pint width;
604 
605  topViewC(string prefix) :
606  scale(CSTR(scale), 1, 0.5, 10, 3), width(CSTR(width), 200, 1, 10000,
607  900)
608  {
609 
610  }
611 };
617 class calibC
618 {
619 public:
620  pstring filePath;
621  pint boardWidth;
622  pint boardHeight;
623  pint squareSize;
624  pint delay;
625  pint frameCount;
626  pbool high_dimension;
627 
628  calibC(string prefix) :
629  filePath(CSTR(filePath), "cCFile.yml"), MP(boardWidth, 1, 1, 15, 7), MP(boardHeight, 1, 1, 15, 10), MP(squareSize
630  , 1, 1, 200, 58), MP(delay, 1, 1, 3000,
631  200), MP(frameCount, 0, 1, 200, 60), MP(high_dimension,true)
632 
633  {
634 
635  }
636 };
642 class debugC
643 {
644 public:
645  pint publishTime;
646  pint webpublishTime;
647  pbool showHorizonBox;
648  pbool showCameraPoints;
649  pbool showTopView;
650  pbool showPCL;
651 
652  debugC(string prefix) :
653  publishTime(CSTR(publishTime), 1, 1, 300, 1), webpublishTime(
654  CSTR(webpublishTime), 1, 1, 300, 7), showHorizonBox(
655  CSTR(showHorizonBox), false), showCameraPoints(
656  CSTR(showCameraPoints), false), showTopView(
657  CSTR(showTopView), false),MP(showPCL,false)
658  {
659 
660  }
661 };
667 class circleC
668 {
669 public:
670  pbool enable;
671  pfloat minLineLen;
672  pfloat maxLineLen;
673  pfloat maxDistBetween2LS;
674  pfloat radiusMaxCoef;
675  pfloat radiusMinCoef;
676  pfloat confiusedDist;
677  pint minLineSegmentCount;
678 
679  circleC(string prefix) :
680  enable(CSTR(enable), true), minLineLen(CSTR(minLineLen), 0, 0.01, 2,
681  0.2), maxLineLen(CSTR(maxLineLen), 0, 0.01, 3, 1.5), maxDistBetween2LS(
682  CSTR(maxDistBetween2LS), 0, 0.01, 2, 0.3), radiusMaxCoef(
683  CSTR(Coef/radiusMaxCoef), 0, 0.01, 3, 1.5), radiusMinCoef(
684  CSTR(Coef/radiusMinCoef), 0, 0.01, 2, 0.7), confiusedDist(
685  CSTR(confiusedDist), 0, 0.01, 3, 1), minLineSegmentCount(
686  CSTR(minLineSegmentCount), 0, 1, 10, 3)
687  {
688 
689  }
690 };
697 {
698 public:
699  pbool enable;
700  pfloat minLineLen;
701  pfloat UPDATENORMAL;
702  pfloat UPDATESTRONG;
703  pfloat UPDATEWEAK;
704  pfloat TOTALGAIN;
705  pfloat VerLineMinDistanceToUpdate;
706  pbool useKalman;
707  pbool forwardRobotTrackerXY;
708  pbool forwardRobotTrackerZ;
709 
710  localizationC(string prefix) :
711  enable(CSTR(enable), true), minLineLen(
712  CSTR(minLineLen), 0, 0.01, 5, 1.5), UPDATENORMAL(
713  CSTR(coef/UPDATENORMAL), 0, 0.01, 1, 0.1), UPDATESTRONG(
714  CSTR(coef/UPDATESTRONG), 0, 0.01, 1, 0.2), UPDATEWEAK(
715  CSTR(coef/UPDATEWEAK), 0, 0.01, 1, 0.05), TOTALGAIN(
716  CSTR(coef/TOTALGAIN), 0, 0.01, 1, 1), VerLineMinDistanceToUpdate(
717  CSTR(coefs/VerLineMinDistanceToUpdate), 0, 0.01, 2, 0.7), useKalman(
718  CSTR(useKalman), false), forwardRobotTrackerXY(
719  CSTR(forwardRobotTrackerXY), false), forwardRobotTrackerZ(
720  CSTR(forwardRobotTrackerZ), false)
721  {
722 
723  }
724 };
730 class tfC
731 {
732 public:
733  pfloat locationX;
734  pfloat locationY;
735  pfloat locationZ;
736  pfloat robotX;
737  pfloat robotY;
738  pfloat robotZ;
739  pfloat orientationX;
740  pfloat orientationY;
741  pfloat orientationZ;
742  pbool calibrateKinematicHill;
743  pbool calibrateKinematicSimplex;
744  pbool precalculateProjection;
745  pfloat timeToShift;
746  pint maxIteration;
747 
748  tfC(string prefix) :
749  locationX(CSTR(location/x), -2, 0.005, 2, 0), locationY(
750  CSTR(location/y), -2, 0.005, 2, 0), locationZ(
751  CSTR(location/z), -2, 0.005, 2, 0), robotX(CSTR(robot/x),
752  -10, 0.01, 10, 0), robotY(CSTR(robot/y), -10, 0.01, 10, 0), robotZ(
753  CSTR(robot/z), -M_PI, 0.001,
754  M_PI, 0), orientationX(CSTR(orientation/x), -M_PI, 0.001,
755  M_PI, 0), orientationY(CSTR(orientation/y), -M_PI, 0.001,
756  M_PI, 0), orientationZ(CSTR(orientation/z), -M_PI, 0.001,
757  M_PI, 0), calibrateKinematicHill(CSTR(kinCalibHill), false), calibrateKinematicSimplex(
758  CSTR(kinCalibSimplex), false), precalculateProjection(
759  CSTR(precalculateProjection), false), timeToShift(
760  CSTR(timeToShift), 0, 0.005, 3, 0.20), maxIteration(
761  CSTR(maxIteration), 1, 1, 100000, 100)
762  {
763 
764  }
765 };
771 class guiC
772 {
773 public:
774  GroupParameter grpRviz;
775  GroupParameter grpGui;
776 
777  pbool calibDistSize_Goal;
778  pbool calibDistSize_Ball;
779  pbool showDistSize_Goal;
780  pbool showDistSize_Ball;
781  pbool saveSample;
782  pbool saveHistogram;
783  pbool debugCascade;
784  pbool debugBallCandidates;
785  pbool tfCalib;
786  pbool rvizSetLoc;
787  pbool rvizSetCalibTF;
788  pbool printUnderMouseInfo;
789  pbool rvizSetRobotTFOrigin;
790 
791  guiC(string prefix) :
792  MP(calibDistSize_Goal,false), MP(calibDistSize_Ball,false), MP(showDistSize_Goal,false), MP(showDistSize_Ball,false), MP(saveSample,false),
793  MP(saveHistogram,false), MP(debugCascade,false), MP(debugBallCandidates,false), MP(tfCalib,false), rvizSetLoc(
794  CSTR(rviz/setLoc), false), rvizSetCalibTF(
795  CSTR(rviz/setCalibTF), false), MP(printUnderMouseInfo,false) ,rvizSetRobotTFOrigin(
796  CSTR(rviz/setRobotTFOrigin), false)
797  {
798  grpRviz.add(&rvizSetLoc);
799  grpRviz.add(&rvizSetCalibTF);
800  grpRviz.add(&rvizSetRobotTFOrigin);
801 
802 
803  grpGui.add(&calibDistSize_Goal);
804  grpGui.add(&calibDistSize_Ball);
805  grpGui.add(&showDistSize_Goal);
806  grpGui.add(&showDistSize_Ball);
807  grpGui.add(&saveSample);
808  grpGui.add(&saveHistogram);
809  grpGui.add(&debugCascade);
810  grpGui.add(&debugBallCandidates);
811  grpGui.add(&tfCalib);
812  grpGui.add(&printUnderMouseInfo);
813 
814  debugCascade.set(false); //To prevent running with debugCascade=true
815  }
816  void update()
817  {
818  grpRviz.update();
819  grpGui.update();
820  }
821 };
828 {
829 public:
830  vector<Point> clicked;
831  vector<Point2f> rvizClicked;
832  vector<Point3d> cameraLocation, opticalAngle;
833  bool IsReady()
834  {
835  return (rvizClicked.size() == clicked.size()
836  && clicked.size() == opticalAngle.size()
837  && opticalAngle.size() == cameraLocation.size()
838  && rvizClicked.size() > 0);
839  }
840 };
847 {
848 public:
849  bool inited;
850  bool destroyed;
851  string configPath;
852  localParameter<int> maxrate;
853  localParameter<float> fps;
854  localParameter<unsigned long> counter;
855  Point2f locClicked;
856  bool locIsClicked;
857  CameraCalibratorC camCalibrator;
858 
859  ballParamC *ball;
860  fieldParamC *field;
861  obstacleParamC *obstacle;
862  goalParamC *goal;
863  lineParamC *line;
864  igusParamC *igus;
865  cameraC *camera;
866  topViewC *topView;
867  calibC *calib;
868  debugC *debug;
869  circleC *circle;
870  localizationC *loc;
871  tfC *tfP;
872  guiC *gui;
873  ros::Time lastLoadTime;
874  string lastLoadPath;
875  ros::Subscriber loadTime_sub;
876  ParametersC() :
877  inited(false), destroyed(false), maxrate(30), fps(maxrate.get()), counter(
878  0), locClicked(Point2f(0, 0)), locIsClicked(false), camCalibrator(), ball(
879  NULL), field(NULL), obstacle(NULL), goal(NULL), line(NULL), igus(
880  NULL), camera(NULL), topView(NULL), calib(NULL), debug(
881  NULL), circle(NULL), loc(NULL), tfP(NULL), gui(NULL)
882  {
883  configPath = ros::package::getPath("launch") + "/config/vision/";
884  lastLoadTime.sec=lastLoadTime.nsec=0;
885  lastLoadPath="";
886  }
887 
888  void loadTime_callback(const config_server::ParameterLoadTimeConstPtr &msg)
889  {
890  if(lastLoadTime.sec!=0 && lastLoadTime.nsec!=0 && lastLoadPath!="" && msg->filename!=lastLoadPath && msg->stamp.sec!=lastLoadTime.sec && msg->stamp.nsec!=lastLoadTime.nsec)
891  {
892  ROS_ERROR("Config server reloaded, so this node will be shutdown intentionally.");
893  exit(1);
894  }
895  else
896  {
897  lastLoadTime=msg->stamp;
898  lastLoadPath=msg->filename;
899  }
900  }
901 
902  void Init(ros::NodeHandle &nh)
903  {
904  if (inited)
905  {
906  return;
907  }
908  loadTime_sub=nh.subscribe<config_server::ParameterLoadTime>("/config_server/load_time",10,&ParametersC::loadTime_callback,this);
909  ball = new ballParamC("/vision/ball/");
910  field = new fieldParamC("/vision/field/");
911  obstacle = new obstacleParamC("/vision/obstacle/");
912  goal = new goalParamC("/vision/goal/");
913  line = new lineParamC("/vision/line/");
914  igus = new igusParamC("/vision/igus/");
915  camera = new cameraC("/vision/camera/");
916  topView = new topViewC("/vision/topView/");
917  calib = new calibC("/vision/calib/");
918  debug = new debugC("/vision/debug/");
919  circle = new circleC("/vision/circle/");
920  loc = new localizationC("/localization/");
921  tfP = new tfC("/vision/tf/");
922  gui = new guiC("/vision/gui/");
923  inited=true;
924  }
925 
926  void Destroy()
927  {
928  if (!inited)
929  {
930  return;
931  }
932  if (!destroyed)
933  {
934  delete ball;
935  delete field;
936  delete obstacle;
937  delete goal;
938  delete line;
939  delete igus;
940  delete camera;
941  delete topView;
942  delete calib;
943  delete debug;
944  delete circle;
945  delete loc;
946  delete tfP;
947  delete gui;
948  destroyed = true;
949  }
950  }
951 
952  void update()
953  {
954  gui->update();
955  }
956 
957  virtual ~ParametersC()
958  {
959  Destroy();
960  }
961 };
962 
963 extern ParametersC params;
Parameters container class for camera.
Definition: Parameters.hpp:571
Parameters container class for obstacle detection.
Definition: Parameters.hpp:496
Parameters container class.
Definition: Parameters.hpp:846
Parameters container class for camera calibration.
Definition: Parameters.hpp:827
Parameters container class for top view.
Definition: Parameters.hpp:599
Parameters container class for circle detection.
Definition: Parameters.hpp:667
Parameters container class for igus color.
Definition: Parameters.hpp:542
Parameters container class for camera calibration.
Definition: Parameters.hpp:617
Parameters container class for goal detection.
Definition: Parameters.hpp:428
Parameters container class for field detection.
Definition: Parameters.hpp:156
Parameters container class for ball detection.
Definition: Parameters.hpp:205
Parameters container class for localization.
Definition: Parameters.hpp:696
Parameters container class for gui.
Definition: Parameters.hpp:771
Parameters container class for debuging purposes.
Definition: Parameters.hpp:642
Parameters container class for tf calibration.
Definition: Parameters.hpp:730
HSV range class.
Definition: Parameters.hpp:126
Parameters container class for line detection.
Definition: Parameters.hpp:341