@@ -495,91 +495,8 @@ inline void findTarget2Cam(CalibrationPattern &pattern, CalibrationData &data) {
495495 const rclcpp::Logger &logger = pattern.getLogger ();
496496 switch (pattern.getPatternName ()) {
497497 case PatternOption::ARUCO : {
498- std::vector<std::vector<cv::Point2f>> imagePoints;
499- std::vector<std::vector<cv::Point3f>> objectPoints;
500- cv::Mat image;
501- cv::Size imageSize;
502-
503- std::unordered_set<size_t > &rejectedImages = data.rejectedImages ;
504-
505- const size_t imageNum = *countImages (pattern.getDatasetPath ());
506- const fs::path &datasetPath = pattern.getDatasetPath ();
507-
508- imagePoints.reserve (imageNum);
509- objectPoints.reserve (imageNum);
510-
511- RCLCPP_INFO (logger,
512- " Press any key to go to the next image. Press 'd' to reject "
513- " the image" );
514-
515- for (size_t i = 0 ; i < imageNum; ++i) {
516- const std::string filename = std::format (" {}.png" , i);
517- #if CV_VERSION_MAJOR == 4 && CV_VERSION_MINOR <= 9
518- image = cv::imread (datasetPath / IMG_FOLDERNAME / filename);
519- #else
520- cv::imread (datasetPath / IMG_FOLDERNAME / filename, image);
521- #endif
522-
523- if (imageSize.empty ()) {
524- imageSize = image.size ();
525- }
526-
527- pattern.detectOn (image);
528- const std::vector<cv::Point2f> &corners = pattern.getImgPoints ();
529-
530- if (corners.empty ()) {
531- RCLCPP_WARN (logger, " Aruco marker not found in %s" , filename.c_str ());
532- rejectedImages.insert (i);
533- continue ;
534- }
535-
536- cv::aruco::drawDetectedMarkers (
537- image, std::vector<std::vector<cv::Point2f>>{corners});
538- cv::imshow (filename, image);
539- int32_t key = cv::waitKey (0 );
540- if (key == ' d' ) {
541- RCLCPP_WARN (logger, " Image %s is rejected" , filename.c_str ());
542- rejectedImages.insert (i);
543- cv::destroyWindow (filename);
544- continue ;
545- }
546-
547- cv::destroyWindow (filename);
548-
549- imagePoints.emplace_back (corners);
550- objectPoints.emplace_back (pattern.getObjPoints ());
551- }
552-
553- cv::destroyAllWindows ();
554-
555- if (imagePoints.size () < 3 ) {
556- throw std::runtime_error (" Error: need more images. Need at least 3" );
557- }
558-
559- std::vector<cv::Mat> rvecs;
560-
561- std::cout << std::format (
562- " Calibrating camera with {} valid images. It may take some time...\n " ,
563- imagePoints.size ());
564-
565- const double rms = cv::calibrateCamera (
566- objectPoints, imagePoints, imageSize, data.K , data.D , rvecs,
567- data.t_target2cam , 0 ,
568- cv::TermCriteria (cv::TermCriteria::EPS + cv::TermCriteria::COUNT , 30 ,
569- 1e-6 ));
570-
571- std::vector<cv::Mat> &Rs = data.R_target2cam ;
572- Rs.reserve (rvecs.size ());
573- for (const cv::Mat &rvec : rvecs) {
574- cv::Mat R;
575- cv::Rodrigues (rvec, R);
576- Rs.emplace_back (R);
577- }
578-
579- RCLCPP_DEBUG (logger,
580- " Camera calibration successfull! Reprojection error is %f" ,
581- rms);
582- break ;
498+ // TODO: add aruco routine
499+ throw std::runtime_error (" Not implemented!" );
583500 }
584501 case PatternOption::CHARUCO : {
585502 // TODO: add charuco calibration routine
0 commit comments