Skip to content

Commit a1c926c

Browse files
committed
aruco calibration is in beta
1 parent 5ef353a commit a1c926c

1 file changed

Lines changed: 2 additions & 85 deletions

File tree

hand_eye_calibration/include/hand_eye_calibration/calibrate_helpers.hpp

Lines changed: 2 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)