AUV-Coop-Assembly
Master Thesis for Robotics Engineering. Cooperative peg-in-hole assembly with two underwater vehicles guided by vision
vision.h
1 #ifndef VISION_H
2 #define VISION_H
3 
4 #include <iostream>
5 #include "../rosInterfaces/header/robotVisionInterface.h"
6 #include "../rosInterfaces/header/worldInterface.h"
7 #include "../helper/header/infosVision.h"
8 #include "../helper/header/logger.h"
9 
10 #include <visp3/gui/vpDisplayX.h>
11 #include <visp3/gui/vpDisplayOpenCV.h>
12 #include <visp3/io/vpImageIo.h>
13 #include <visp3/vision/vpKeyPoint.h>
14 #include <visp3/mbt/vpMbGenericTracker.h>
15 
16 //#include <visp3/tt/vpTemplateTrackerSSDInverseCompositional.h>
17 //#include <visp3/tt/vpTemplateTrackerWarpHomography.h>
18 
19 #include <ros/ros.h>
20 #include <sensor_msgs/Image.h>
21 
22 #include <opencv2/highgui/highgui.hpp>
23 #include <opencv2/imgcodecs.hpp>
24 #include <opencv2/imgproc.hpp>
25 
26 //feature 2d + homography
27 #include "opencv2/features2d.hpp"
28 #include "opencv2/xfeatures2d.hpp"
29 
30 #include <cmat/cmat.h>
31 
32 
33 
34 const std::string configFileL = "/home/tori/UWsim/Peg/src/peg/src/vision/data/camera_left.xml";
35 const std::string configFileR = configFileL; //ONLY because instrinsic param of cameras L and R are the same
36 const std::string caoModel = "/home/tori/UWsim/Peg/src/peg/src/vision/data/blockHoleCilinder.cao";
37 const std::string configFileDetector = "/home/tori/UWsim/Peg/src/peg/src/vision/data/detection-config-MONO.xml";
38 const std::string initFileClickLeft = "/home/tori/UWsim/Peg/src/peg/src/vision/data/3DPointSquareFace4_left.init";
39 const std::string initFileClickRight = "/home/tori/UWsim/Peg/src/peg/src/vision/data/3DPointSquareFace4_right.init";
40 const std::string initFileClickLeft_w2D = "/home/tori/UWsim/Peg/src/peg/src/vision/data/3DPointSquareFace4_w2d_left.init";
41 const std::string initFileClickRight_w2D = "/home/tori/UWsim/Peg/src/peg/src/vision/data/3DPointSquareFace4_w2d_right.init";
42 const std::string learnData = "/home/tori/UWsim/Peg/src/peg/src/vision/data/blockHole_learning_data.bin";
43 const std::string transfcameraLtoR = "/home/tori/UWsim/Peg/src/peg/src/vision/data/lTr.txt";
44 
45 
46 int objDetectionInit(vpImage<unsigned char> I, vpMbGenericTracker *tracker);
47 int objDetection(vpImage<unsigned char> I, vpMbGenericTracker *tracker,
48  vpKeyPoint *keypoint_detection, vpHomogeneousMatrix *cMo,
49  double *error, double* elapsedTime);
50 int stereoTracking(vpImage<unsigned char> I_left, vpImage<unsigned char> I_right,
51  vpMbGenericTracker *tracker,
52  vpHomogeneousMatrix *cLeftTo, vpHomogeneousMatrix *cRightTo);
53 int initTracker(vpMbGenericTracker *tracker, int nCameras, Eigen::Matrix4d cLTcR);
54 
55 
57 void drawSquares( cv::Mat& image, const std::vector<std::vector<cv::Point> >& squares,
58  const char* wndname = "Square Detection Demo");
59 void findSquares( const cv::Mat& image, std::vector<std::vector<cv::Point> >& squares,
60  int thresh = 50, int N = 11);
61 int orderAngles(std::vector<std::vector<cv::Point>> angles, std::vector<std::vector<cv::Point>> *orderedAngles);
62 int orderAngles(std::vector<cv::Point> angles, std::vector<cv::Point> *orderedAngles);
63 cv::Point getCenter(std::vector<cv::Point> points);
64 double angle( cv::Point pt1, cv::Point pt2, cv::Point pt0 );
65 
66 
67 #endif // VISION_H