-
[Apriltag Nav] 2. Apriltag 이란?개발/안드로이드 2023. 3. 3. 17:09
Apriltag 구조 및 생성
https://github.com/AprilRobotics/apriltag
GitHub - AprilRobotics/apriltag: AprilTag is a visual fiducial system popular for robotics research.
AprilTag is a visual fiducial system popular for robotics research. - GitHub - AprilRobotics/apriltag: AprilTag is a visual fiducial system popular for robotics research.
github.com
위 오픈소스를 cmake로 빌드하여 example을 돌려보는 것으로 시작했습니다.
Apriltag에는 tag family라는 것이 존재합니다.
여러가지 tag family Tag36h11에서 36은 표현할 수 있는 비트 수 입니다. 36인 이유는 tag36h11에서는 내부 6 X 6 사이즈 만큼의 영역만이 바뀔 수 있기 때문입니다.
이론상으로는 하얀색 또는 검정색으로 표현이 가능하므로 2 ^ 36 = 68719476736 개의 경우의 수만큼 표현할 수 있습니다.
비슷하게 TagStandard41h12에서 41의 의미는 (외각 32개 + 내부 3 X 3 9개) = 41개 입니다.
Standard가 붙게 되면 외각에도 태그에 변화를 준다는 의미입니다.
h 뒤에 붙는 숫자는 hamming bit를 의미합니다.
tag36h11의 의미는 hamming bit를 최소 11bit로 사용하겠다는 의미입니다.
hamming bit는 태그의 모양을 다채롭게 해주는 역할을 합니다.
만약 hamming bit가 없다면 태그가 비슷한 모양으로 생성되기 때문에 구분하기 어려워지고, 오류가 생길 가능성이 있습니다.
따라서 hamming bit를 두어 생성되는 태그의 모양을 최대한 다양하게 하는 것입니다.
태그의 모양을 다양하게 할수록, 생성되는 태그의 총 양이 줄어들기 때문에 적절한 값으로 설정해야 합니다.
hamming bit를 적용시키면 tag36h11의 경우 약 587개, tag41h12의 경우 약 2115개의 태그를 생성할 수 있습니다.
태그 생성 규칙에 대한 자세한 설명은 모두 github에 설명되어 있으니 참고하시기 바랍니다.
아랫글은 tag 생성에 대해 보다 자세히 설명을 해주는 글입니다.
https://webnautes.tistory.com/1040
ArUco Marker Detection 구현 및 Pose Estimation
계속 내용을 보완하고 추가할 예정입니다. 기준 마커(fiducial marker)는 일정한 포맷으로 만들어진 인공적인 랜드마크입니다. 증강 현실(Augmented Reality)을 구현하데 이용할 수 있습니다. 영상에서 마
webnautes.tistory.com
Apriltag Detection
tagStandard41h12_create(); //... apriltag_detector_create(); //... apriltag_detector_detect(tag_detector, img_source) { //... }
Apriltag를 detection하는 과정을 간단하게 표현하면 다음 과정을 거치게 됩니다.
- tag family 생성
- tag detector 생성
- decimater, quad_sigma, nthreads 등등 변수 초기화
- tag detection
Tag detection에 대한 결과는 다음 형태로 반환됩니다.
struct apriltag_detection { // ... int id; // 태그 ID double c[2]; // 태그 중심 좌표 double p[4][2]; // 태그 기준 4방향 좌표 // ... };
프로젝트에서 사용할 정보는 이렇게 3가지 정도입니다. (태그 id, 태그 중심 좌표, 태그 기준 4방향 좌표)
이 정보를 바탕으로 지금 detect한 tag의 id가 몇 번인지, 이미지 기준 태그가 어디에 위치해 있는지 알아낼 수 있습니다.
자세한 코드 분석보다는 코드를 어떻게 활용하는 지가 중요하다고 생각이 들기 때문에, 다음 챕터에서 jni를 활용한 안드로이드에서 ndk 적용법에 대해 알아보도록 하겠습니다.
'개발 > 안드로이드' 카테고리의 다른 글
[Apriltag Nav] 3. 안드로이드 프로젝트에 apriltag ndk 적용시키기 (0) 2023.03.10 [Apriltag Nav] 1. 프로젝트 소개 : Apriltag를 활용한 실내 네비게이션 (1) 2023.03.03