93 std::deque<StampedFrame> leftQueue;
94 std::deque<StampedFrame> rightQueue;
96 double toleranceSeconds{0.020};
97 std::size_t maxQueueSize{5};
99 mutable std::mutex _mutex;
101 void trimLeftQueue();
102 void trimRightQueue();
108 void pushLeft(
const ImageOf<PixelRgb>& leftFrame,
const Stamp& timestamp);
109 void pushRight(
const ImageOf<PixelRgb>& rightFrame,
const Stamp& timestamp);
120 enum class CalibrationState
129 std::atomic<CalibrationState> calibrationState{CalibrationState::Idle};
130 std::atomic<bool> collectionResetRequested{
false};
134 double _syncToleranceSeconds{0.020};
135 std::size_t _syncQueueSize{5};
137 double minCaptureIntervalSeconds{2.0};
138 double lastProcessedCandidateTime{-1.0};
139 double minimumBoardSpanRatio{0.15};
141 Size _expectedImageSize{};
143 ImageOf<PixelRgb> *imageL;
144 ImageOf<PixelRgb> *imageR;
150 yarp::sig::Vector qL;
151 yarp::sig::Vector qR;
153 mutable std::mutex mtx;
166 yarp::dev::PolyDriver polyHead;
167 yarp::dev::IEncoders *posHead;
169 yarp::dev::PolyDriver polyTorso;
170 yarp::dev::IEncoders *posTorso;
176 string inputLeftPortName;
177 string inputRightPortName;
181 string currentPathDir;
182 std::vector<string> imageListR;
183 std::vector<string> imageListL;
184 std::vector<string> imageListLR;
187 std::vector<stereo_calib::StereoObservation> _observations;
188 std::size_t _rejectedDetections{0};
195 std::string _calibrationError;
197 bool _saveImages{
false};
198 bool _drawDiagnosticCorners{
true};
199 std::string _observationsFile;
202 BufferedPort<ImageOf<PixelRgb> > imagePortInLeft;
203 BufferedPort<ImageOf<PixelRgb> > imagePortInRight;
204 BufferedPort<ImageOf<PixelRgb> > outPortRight;
205 BufferedPort<ImageOf<PixelRgb> > outPortLeft;
215 void printMatrix(Mat &matrix);
216 bool checkTS(
double TSLeft,
double TSRight,
double th=0.08);
217 void preparePath(
const char * imageDir,
char* pathL,
char* pathR,
int num);
218 void saveStereoImage(
const char * imageDir,
const Mat& left,
const Mat& right,
int num);
219 double monoCalibration(
const vector<string>& imageList,
int boardWidth,
int boardHeight, Mat &K, Mat &Dist,
const char* cameraName);
220 void stereoCalibration(
const vector<string>& imagelist,
int boardWidth,
int boardHeight,
float sqsizee);
221 void saveCalibration(
const string& extrinsicFilePath,
const string& intrinsicFilePath);
222 void calcChessboardCorners(Size boardSize,
float squareSize, vector<Point3f>& corners);
223 bool updateIntrinsics(
int width,
int height,
double fx,
double fy,
double cx,
double cy,
double k1,
double k2,
double p1,
double p2,
const string& groupname);
224 bool updateExtrinsics(Mat Rot, Mat Tr,
const string& groupname);
225 void saveImage(
const char * imageDir,
const Mat& left,
int num);
226 void stereoCalibRun();
228 bool shouldQueueFrameForCollection(
const Stamp& timestamp)
const;
constexpr double tolerance