From 2f5eb5c882f26a0bfe2f7f3be87e5ce27f862ef9 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 27 Jul 2013 10:35:19 +0200 Subject: Use extrinsic guess, fix coord handedness, get rid of marker size --- ftnoir_tracker_aruco/aruco-trackercontrols.ui | 35 --------------------------- ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp | 33 ++++++++++++++++--------- 2 files changed, 22 insertions(+), 46 deletions(-) diff --git a/ftnoir_tracker_aruco/aruco-trackercontrols.ui b/ftnoir_tracker_aruco/aruco-trackercontrols.ui index 173accdf..a04f2659 100644 --- a/ftnoir_tracker_aruco/aruco-trackercontrols.ui +++ b/ftnoir_tracker_aruco/aruco-trackercontrols.ui @@ -442,41 +442,6 @@ 0.000000000000000 - - - - 390 - 100 - 58 - 16 - - - - Marker size - - - - - - 455 - 97 - 70 - 22 - - - - cm - - - 1 - - - 100 - - - 10 - - diff --git a/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp b/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp index fb5d91f7..236fc684 100644 --- a/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp +++ b/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp @@ -186,7 +186,7 @@ void Tracker::run() aruco::MarkerDetector detector; detector.setDesiredSpeed(3); - cv::Mat color, grayscale; + cv::Mat color, grayscale, rvec, tvec; while (!stop) { @@ -206,29 +206,44 @@ void Tracker::run() for (int i = 0; i < 5; i++) dist_coeffs.at(i) = dc[i]; - aruco::CameraParameters params(intrinsics, dist_coeffs, cv::Size(grayscale.cols, grayscale.rows)); - std::vector< aruco::Marker > markers; - detector.detect(grayscale, markers, params, marker_size / 100., false); + detector.detect(grayscale, markers, cv::Mat(), cv::Mat(), -1, false); QMutexLocker lck(&mtx); - if (markers.size() == 1) { + if (markers.size() == 1 && markers[0].size() == 4) { const aruco::Marker& m = markers.at(0); + const float halfSize = 1; + + cv::Mat ObjPoints(4,3,CV_32FC1); + ObjPoints.at(1,0)=-halfSize; + ObjPoints.at(1,1)=-halfSize; + ObjPoints.at(1,2)=0; + ObjPoints.at(2,0)=halfSize; + ObjPoints.at(2,1)=-halfSize; + ObjPoints.at(2,2)=0; + ObjPoints.at(3,0)=halfSize; + ObjPoints.at(3,1)=halfSize; + ObjPoints.at(3,2)=0; + ObjPoints.at(0,0)=-halfSize; + ObjPoints.at(0,1)=halfSize; + ObjPoints.at(0,2)=0; + + cv::solvePnP(ObjPoints, m, intrinsics, dist_coeffs, rvec, tvec, tvec.rows == 3 || tvec.cols == 3); cv::Mat rotation_matrix = cv::Mat::zeros(3, 3, CV_64FC1); cv::Mat junk1(3, 3, CV_64FC1), junk2(3, 3, CV_64FC1); - cv::Rodrigues(m.Rvec, rotation_matrix); + cv::Rodrigues(rvec, rotation_matrix); cv::Vec3d foo = cv::RQDecomp3x3(rotation_matrix, junk1, junk2); for (int i = 0; i < 3; i++) { pose[i+3] = foo[i]; - pose[i] = m.Tvec.at(i); + pose[i] = tvec.at(i); } } @@ -402,8 +417,6 @@ void TrackerControls::loadSettings() ui.doubleSpinBox_4->setValue(iniFile.value("dc3").toDouble()); ui.doubleSpinBox_5->setValue(iniFile.value("dc4").toDouble()); - ui.markerSize->setValue(iniFile.value("marker-size", 10).toInt()); - iniFile.endGroup(); settingsDirty = false; } @@ -449,8 +462,6 @@ void TrackerControls::save() iniFile.setValue("dc3", ui.doubleSpinBox_4->value()); iniFile.setValue("dc4", ui.doubleSpinBox_5->value()); - iniFile.setValue("marker-size", ui.markerSize->value()); - iniFile.endGroup(); settingsDirty = false; } -- cgit v1.2.3