Skip to content

Commit 3928ac4

Browse files
committed
added markers per tracker parameter. fixed some bugs.
1 parent c7ee7ab commit 3928ac4

File tree

6 files changed

+27
-17
lines changed

6 files changed

+27
-17
lines changed

AprilTagTrackers/AprilTagWrapper.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ AprilTagWrapper::AprilTagWrapper(const Parameters* params)
2424

2525
if (parameters->markerLibrary == ARUCO_4X4)
2626
{
27-
aruco_dictionary = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_4X4_50);
27+
aruco_dictionary = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_4X4_250);
2828
aruco_params = parameters->aruco_params;
2929
}
3030

@@ -56,7 +56,8 @@ void AprilTagWrapper::detectMarkers(
5656
const cv::Mat& image,
5757
std::vector<std::vector<cv::Point2f> >* corners,
5858
std::vector<int>* ids,
59-
std::vector<cv::Point2f>* centers)
59+
std::vector<cv::Point2f>* centers,
60+
std::vector<cv::Ptr<cv::aruco::Board>> trackers)
6061
{
6162
cv::Mat gray;
6263
if (image.type() != CV_8U)
@@ -76,8 +77,8 @@ void AprilTagWrapper::detectMarkers(
7677
{
7778
std::vector<std::vector<cv::Point2f>> rejectedCorners;
7879
cv::aruco::detectMarkers(gray, aruco_dictionary, *corners, *ids, aruco_params, rejectedCorners);
79-
for(int i = 0; i<parameters->trackers.size();i++)
80-
cv::aruco::refineDetectedMarkers(gray, parameters->trackers[i], *corners, *ids, rejectedCorners);
80+
//for(int i = 0; i<trackers.size();i++)
81+
// cv::aruco::refineDetectedMarkers(gray, trackers[i], *corners, *ids, rejectedCorners);
8182

8283
return;
8384
}

AprilTagTrackers/AprilTagWrapper.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ class AprilTagWrapper
2727
const cv::Mat& frame,
2828
std::vector<std::vector<cv::Point2f> >* corners,
2929
std::vector<int>* ids,
30-
std::vector<cv::Point2f>* centers
30+
std::vector<cv::Point2f>* centers,
31+
std::vector<cv::Ptr<cv::aruco::Board>> trackers
3132
);
3233

3334
std::vector<std::string> getTimeProfile();

AprilTagTrackers/Connection.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ void Connection::Connect()
9292
for (int i = 0; i < parameters->trackerNum; i++)
9393
{
9494
TrackerConnection temp;
95-
temp.TrackerId = i + 1;
95+
temp.TrackerId = i;
9696
temp.DriverId = i;
9797
temp.Name = "ApriltagTracker" + std::to_string(i + 1);
9898
temp.Role = "TrackerRole_Waist";

AprilTagTrackers/Parameters.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ void Parameters::Load()
1313

1414
if (!fs["cameraAddr"].empty()) //if file exists, load all parameters from file into variables
1515
{
16+
fs["markersPerTracker"] >> markersPerTracker;
17+
if (markersPerTracker <= 0)
18+
markersPerTracker = 45;
1619
aruco_params = cv::aruco::DetectorParameters::create();
1720
aruco_params->detectInvertedMarker = true;
1821
aruco_params->cornerRefinementMethod = 2;
@@ -137,6 +140,7 @@ void Parameters::Load()
137140
void Parameters::Save()
138141
{
139142
cv::FileStorage fs("params.yml", cv::FileStorage::WRITE);
143+
fs << "markersPerTracker" << markersPerTracker;
140144
fs << "arucoParams";
141145
fs << "{";
142146
fs << "cornerRefinementMethod" << aruco_params->cornerRefinementMethod;

AprilTagTrackers/Parameters.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ class Parameters
5757
float depthSmoothing = 0;
5858
float additionalSmoothing = 0;
5959
int markerLibrary = 0;
60+
int markersPerTracker = 45;
6061

6162
cv::Ptr<cv::aruco::DetectorParameters> aruco_params = cv::aruco::DetectorParameters::create();
6263

AprilTagTrackers/Tracker.cpp

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -824,7 +824,7 @@ void Tracker::CalibrateTracker()
824824

825825
AprilTagWrapper april{parameters};
826826

827-
int markersPerTracker = 45;
827+
int markersPerTracker = parameters->markersPerTracker;
828828
int trackerNum = parameters->trackerNum;
829829

830830
std::vector<cv::Vec3d> boardRvec, boardTvec;
@@ -847,6 +847,8 @@ void Tracker::CalibrateTracker()
847847
std::vector<int> idsList;
848848
std::vector<std::vector < std::vector<cv::Point3f >>> cornersList;
849849

850+
trackers.clear();
851+
850852
while (cameraRunning && mainThreadRunning)
851853
{
852854
CopyFreshCameraImageTo(image);
@@ -861,7 +863,7 @@ void Tracker::CalibrateTracker()
861863
std::vector<cv::Point2f> centers;
862864

863865
//cv::aruco::detectMarkers(image, dictionary, corners, ids, params);
864-
april.detectMarkers(image, &corners, &ids, &centers);
866+
april.detectMarkers(image, &corners, &ids, &centers,trackers);
865867
if (showTimeProfile)
866868
{
867869
april.drawTimeProfile(image, cv::Point(10, 60));
@@ -1003,8 +1005,6 @@ void Tracker::CalibrateTracker()
10031005
cv::imshow("out", drawImg);
10041006
cv::waitKey(1);
10051007
}
1006-
1007-
trackers.clear();
10081008

10091009
for (int i = 0; i < boardIds.size(); i++)
10101010
{
@@ -1241,11 +1241,11 @@ void Tracker::MainLoop()
12411241
}
12421242

12431243
//Then define your mask image
1244-
cv::Mat mask = cv::Mat::zeros(image.size(), image.type());
1244+
cv::Mat mask = cv::Mat::zeros(gray.size(), gray.type());
12451245

1246-
cv::Mat dstImage = cv::Mat::zeros(image.size(), image.type());
1246+
cv::Mat dstImage = cv::Mat::zeros(gray.size(), gray.type());
12471247

1248-
int size = image.rows * parameters->searchWindow;
1248+
int size = gray.rows * parameters->searchWindow;
12491249

12501250
bool doMasking = false;
12511251

@@ -1273,8 +1273,8 @@ void Tracker::MainLoop()
12731273
//Now you can copy your source image to destination image with masking
12741274
if (doMasking)
12751275
{
1276-
image.copyTo(dstImage, mask);
1277-
image = dstImage;
1276+
gray.copyTo(dstImage, mask);
1277+
gray = dstImage;
12781278
}
12791279

12801280
//cv::imshow("test", image);
@@ -1423,8 +1423,11 @@ void Tracker::MainLoop()
14231423

14241424
connection->SendStation(0, a, b, c, stationQ.w, stationQ.x, stationQ.y, stationQ.z);
14251425
}
1426-
1427-
april.detectMarkers(gray, &corners, &ids, &centers);
1426+
else
1427+
{
1428+
calibControllerLastPress = clock();
1429+
}
1430+
april.detectMarkers(gray, &corners, &ids, &centers, trackers);
14281431
for (int i = 0; i < trackerNum; ++i) {
14291432

14301433
//estimate the pose of current board

0 commit comments

Comments
 (0)