#pragma once #include #include #include #include enum ArucoTagType { FLOWER, SOLAR_PANEL }; class ArucoTag { public: int id; std::string name; float length; cv::Mat objectRepresenation; ArucoTagType type; ArucoTag(const int id, std::string name, const float length, const ArucoTagType type) : id(id), name(std::move(name)), length(length), type(type) { this->objectRepresenation = cv::Mat(4, 1, CV_32FC3); this->objectRepresenation.ptr(0)[0] = cv::Vec3f(-length/2.f, length/2.f, 0); this->objectRepresenation.ptr(0)[1] = cv::Vec3f(length/2.f, length/2.f, 0); this->objectRepresenation.ptr(0)[2] = cv::Vec3f(length/2.f, -length/2.f, 0); this->objectRepresenation.ptr(0)[3] = cv::Vec3f(-length/2.f, -length/2.f, 0); } void setFlowerObjectRepresentation() { this->objectRepresenation = cv::Mat(4, 1, CV_32FC3); this->objectRepresenation.ptr(0)[0] = cv::Vec3f(-19/2.f, 19/2.f, 0); this->objectRepresenation.ptr(0)[1] = cv::Vec3f(19/2.f, 19/2.f, 0); this->objectRepresenation.ptr(0)[2] = cv::Vec3f(18.7f/2.f, -19/2.f, 0); this->objectRepresenation.ptr(0)[3] = cv::Vec3f(-18.7f/2.f, -19/2.f, 0); } };