APRITTAG เป็นระบบที่เป็นภาพที่เป็นที่นิยมในการวิจัยหุ่นยนต์ ที่เก็บนี้มีเวอร์ชันล่าสุดของ APRITTAG, APRITTAG 3 ซึ่งรวมถึงเครื่องตรวจจับที่เร็วขึ้น (> 2X) อัตราการตรวจจับที่ดีขึ้นบนแท็กขนาดเล็กเค้าโครงแท็กที่ยืดหยุ่นและการประมาณท่า Apriltag ประกอบด้วยห้องสมุด C ขนาดเล็กที่มีการพึ่งพาน้อยที่สุด
คุณสามารถค้นหาภาพแท็กสำหรับเลย์เอาต์ที่สร้างไว้ล่วงหน้าได้ที่นี่ เราขอแนะนำให้ใช้เลย์เอาต์ Tagstandard41h12
APRITTAG เป็นเรื่องของเอกสารต่อไปนี้
apriltag: ระบบ fiducial ภาพที่แข็งแกร่งและยืดหยุ่น
APRITTAG 2: การตรวจจับ fiducial ที่มีประสิทธิภาพและมีประสิทธิภาพ
เลย์เอาต์ที่ยืดหยุ่นสำหรับแท็ก fiducial
รองรับระบบปฏิบัติการ Linux อย่างเป็นทางการเท่านั้นแม้ว่าผู้ใช้จะประสบความสำเร็จในการติดตั้งบน Windows ด้วย
การติดตั้งเริ่มต้นจะวางส่วนหัวใน/usr/local/include library และ chared library ใน/usr/local/lib นอกจากนี้ยังติดตั้งสคริปต์ pkg-config ลงใน/usr/local/lib/pkgconfig และจะติดตั้ง wrapper python หากติดตั้ง Python3
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --target install
สิ่งนี้จะสร้างไลบรารีที่ใช้ร่วมกัน (*.o) โดยค่าเริ่มต้น หากคุณต้องการไลบรารีคงที่ (*.a) ตั้งค่า BUILD_SHARED_LIBS
เป็น OFF
:
cmake -B build -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF
cmake --build build --target install
หากคุณติดตั้ง Ninja ( sudo apt install ninja-build
) คุณสามารถใช้:
cmake -B build -GNinja -DCMAKE_BUILD_TYPE=Release
cmake --build build --target install
เพื่อสร้างและรวบรวมผ่านสคริปต์สร้างนินจา มันจะเร็วกว่าตัวสร้าง MakeFile เริ่มต้นของ CMake มาก
คุณสามารถละเว้น --target install
หากคุณต้องการใช้งานนี้โดยไม่ต้องติดตั้ง
สำหรับแอพพลิเคชั่นส่วนใหญ่ตระกูล TAGSTANDARD41H12 จะเป็นตัวเลือกที่ถูกต้อง คุณสามารถค้นหารูปภาพสำหรับแท็กใน repo apriltag-imgs ขยายภาพในตัวแก้ไขที่คุณชื่นชอบและพิมพ์ออกมา
ฮิวริสติกบางอย่างเมื่อใดที่จะเลือกครอบครัวแท็กอื่น ๆ :
หากสิ่งเหล่านี้ไม่เหมาะกับความต้องการของคุณให้สร้างตระกูลแท็กที่กำหนดเองของคุณเองที่นี่
import cv2
import numpy as np
from apriltag import apriltag
imagepath = 'test.jpg'
image = cv2.imread(imagepath, cv2.IMREAD_GRAYSCALE)
detector = apriltag("tagStandard41h12")
detections = detector.detect(image)
อีกวิธีหนึ่งคุณสามารถใช้การผูก python apriltag ที่สร้างขึ้นโดย Duckietown
image_u8_t* im = image_u8_create_from_pnm("test.pnm");
if (im == NULL) {
fprintf(stderr, "Failed to load pnm image.n");
exit(1);
}
apriltag_detector_t *td = apriltag_detector_create();
apriltag_family_t *tf = tagStandard41h12_create();
apriltag_detector_add_family(td, tf);
zarray_t *detections = apriltag_detector_detect(td, im);
for (int i = 0; i < zarray_size(detections); i++) {
apriltag_detection_t *det;
zarray_get(detections, i, &det);
// Do stuff with detections here.
}
// Cleanup.
apriltag_detections_destroy(detections);
tagStandard41h12_destroy(tf);
apriltag_detector_destroy(td);
จัดทำโดยบุคคลที่สามที่นี่
จัดทำโดยบุคคลที่สามที่นี่
สำหรับกรณีการใช้งานส่วนใหญ่สิ่งนี้ควรลดลง
โปรดทราบว่าไลบรารีนี้ไม่มีการพึ่งพาภายนอก แอปพลิเคชั่นส่วนใหญ่จะต้องมีวิธีการรับภาพอย่างน้อยที่สุด
ดูตัวอย่าง/opencv_demo.cc สำหรับตัวอย่างของการใช้ apriltag ใน C ++ ด้วย openCV แอปพลิเคชันตัวอย่างนี้สามารถสร้างได้โดยดำเนินการดังต่อไปนี้:
$ cd examples
$ make opencv_demo
ข้อมูลภาพในวัตถุ CV :: MAT สามารถส่งผ่านไปยัง APRILTAG โดยไม่ต้องสร้างสำเนาลึก เพียงสร้างส่วนหัว image_u8_t สำหรับ CV :: MAT Data Buffer:
cv::Mat img;
image_u8_t img_header = { .width = img.cols,
.height = img.rows,
.stride = img.cols,
.buf = img.data
};
การเพิ่มพารามิเตอร์ quad_decimate จะเพิ่มความเร็วของเครื่องตรวจจับที่ค่าใช้จ่ายในการตรวจจับ หากคุณมีคอร์ CPU เพิ่มเติมที่จะโยนปัญหาคุณสามารถเพิ่ม nthreads หากภาพของคุณค่อนข้างมีเสียงดังการเพิ่มพารามิเตอร์ quad_sigma สามารถเพิ่มความเร็วได้
ก่อนอื่นเลือกภาพตัวอย่างและเรียกใช้เครื่องตรวจจับด้วย debug = 1 เพื่อสร้างภาพการดีบัก สิ่งเหล่านี้แสดงเอาต์พุตของเครื่องตรวจจับในแต่ละขั้นตอนในไปป์ไลน์การตรวจจับ หากไม่พบเส้นขอบของแท็กของคุณเป็นรูปสี่เหลี่ยมจัตุรัสให้ลด quad_decimate (ไปจนถึง 1 หากจำเป็น) หากตรวจพบเส้นขอบของแท็กให้ทำการทดสอบด้วยการเปลี่ยน decode_sharpening
เราให้วิธีการคำนวณท่าทางของแท็กดังต่อไปนี้ (สลับกันใช้ตัวแก้ปัญหา PNP ของ OpenCV ด้วย SolidePNP_IPPE_SQUARE) คุณจะต้องรวมไฟล์ส่วนหัว apriltag_pose.h จากนั้นเรียกฟังก์ชัน estimate_tag_pose ดังนี้:
// First create an apriltag_detection_info_t struct using your known parameters.
apriltag_detection_info_t info;
info.det = det;
info.tagsize = tagsize;
info.fx = fx;
info.fy = fy;
info.cx = cx;
info.cy = cy;
// Then call estimate_tag_pose.
apriltag_pose_t pose;
double err = estimate_tag_pose(&info, &pose);
// Do something with pose.
...
ที่พารามิเตอร์มีดังนี้:
det
: โครงสร้างการตรวจจับแท็ก (April_detection_t)tagsize
: ขนาดของแท็กเป็นเมตร การออกแบบแท็กแต่ละครั้งมีเส้นขอบสีดำและเส้นขอบสีขาว แต่การออกแบบบางอย่างมีเส้นขอบสีขาวด้านในและบางส่วนมีเส้นขอบสีดำด้านใน แท็กขนาดจึงวัดจากที่ที่ชายแดนทั้งสองมาพบกันดูรูปด้านล่างสำหรับตัวอย่างfx
, fy
: ความยาวโฟกัสของกล้อง (เป็นพิกเซล) สำหรับกล้องส่วนใหญ่ fx
และ fy
จะเท่ากันหรือเกือบจะเป็นเช่นนั้นcx
, cy
: ศูนย์โฟกัสของกล้อง (เป็นพิกเซล) สำหรับกล้องส่วนใหญ่สิ่งนี้จะใกล้เคียงกับศูนย์ภาพหมายเหตุ: ไม่ควรวัดขนาดแท็กจากด้านนอกของแท็ก ขนาดแท็กถูกกำหนดเป็นระยะห่างระหว่างมุมตรวจจับหรือสลับกันความยาวของขอบระหว่างเส้นขอบสีขาวและขอบสีดำ ภาพประกอบต่อไปนี้ทำเครื่องหมายมุมการตรวจจับด้วย XS สีแดงและขนาดแท็กด้วยลูกศรสีแดงสำหรับแท็กจากตระกูลแท็ก 48H12Custom
ระบบพิกัดมีต้นกำเนิดที่ศูนย์กล้อง จุด Z-Axis จากศูนย์กล้องจะออกเลนส์กล้อง แกน x อยู่ทางขวาในภาพที่ถ่ายโดยกล้องและ y จะลง เฟรมพิกัดของแท็กอยู่ตรงกลางที่กึ่งกลางของแท็กโดยมีแกน x ไปทางขวาแกน y ลงและแกน z ลงในแท็ก
คุณสามารถเปิดใช้งาน addresssanitizer ปัญหาการแก้ไขปัญหาหน่วยความจำสำหรับการดีบัก builds โดยการตั้งค่าตัวเลือก ASAN
:
cmake -B build -GNinja -DCMAKE_BUILD_TYPE=Debug -DASAN=ON
cmake --build build
ส่วนใหญ่คุณสามารถเรียกใช้หน้าที่ของคุณได้ตามปกติและตรวจสอบเอาต์พุต sanitiser หากคุณได้รับข้อความอย่าง ASan runtime does not come first in initial library list; you should either link runtime to your application or manually preload it with LD_PRELOAD.
คุณต้องโหลด libasan.so.5
เช่นนี้:
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.5 ./build/opencv_demo
APRITTAG 3 รองรับเค้าโครงแท็กที่เป็นไปได้ที่หลากหลายนอกเหนือจากเค้าโครงคลาสสิกที่รองรับใน APRITTAG 2 บิตข้อมูลของแท็กสามารถออกไปด้านนอกของแท็กได้และเป็นไปได้ที่จะกำหนดเลย์เอาต์ด้วย "หลุม" ภายในแท็กแท็ก ชายแดนที่ไม่มีบิตข้อมูล ใน repo นี้เราได้รวม:
คุณสามารถสร้างครอบครัวแท็กของคุณเองโดยใช้ repo อื่น ๆ ของเรารุ่น apriltag
โปรดสร้างปัญหาเกี่ยวกับ GitHub นี้สำหรับคำถามใด ๆ แทนที่จะส่งข้อความส่วนตัว สิ่งนี้ช่วยให้คนอื่นมีคำถามเดียวกันเพื่อค้นหาคำตอบของคุณ