8000 GitHub - yuanzhongqiao/apriltag: AprilTag 是一种在机器人研究中流行的视觉基准系统。
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

yuanzhongqiao/apriltag

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

四月标签 3

AprilTag 是机器人研究中流行的视觉基准系统。该存储库包含 AprilTag 的最新版本 AprilTag 3,其中包括更快(> 2x)的检测器、改进的小标签检测率、灵活的标签布局和姿势估计。AprilTag 由一个具有最小依赖性的小型 C 库组成。

您可以在此处找到预生成布局的标签图像。我们建议使用 tagStandard41h12 布局。

目录

文件

AprilTag 是以下论文的主题。

AprilTag:强大且灵活的视觉基准系统

四月标签 2:高效、稳健的基准检测

基准标签的灵活布局

安装

官方仅支持 Linux 操作系统,尽管用户也可以在 Windows 上成功安装。

默认安装会将标头放置在 /usr/local/include 中,将共享库放置在 /usr/local/lib 中。它还将 pkg-config 脚本安装到 /usr/local/lib/pkgconfig 中,并且如果安装了 python3,则会安装 python 包装器。

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --target install

默认情况下,这将构建共享(*.so)库。如果您需要静态 (*.a) 库,请设置BUILD_SHARED_LIBSOFF

cmake -B build -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF
cmake --build build --target install

如果您sudo apt install ninja-build安装了 Ninja ( ),您可以使用:

cmake -B build -GNinja -DCMAKE_BUILD_TYPE=Release
cmake --build build --target install

通过 ninja 构建脚本生成和编译。它比 cmake 的默认 Makefile 生成器快得多。

--target install如果您只想在本地使用而不安装,则可以省略。

用法

选择标签系列

对于绝大多数应用,tagStandard41h12 系列将是正确的选择。您可以在apriltag-imgs repo中找到标签的图像。在您最喜欢的编辑器中放大图像并将其打印出来。

关于何时选择其他标签系列的一些启发:

  1. 如果您需要更多标签,请使用 tagStandard52h13
  2. 如果需要最大限度地利用小圆形对象上的空间,请使用 tagCircle49h12(或 tagCircle21h7)。
  3. 如果您想创建递归标签,请使用 tagCustom48h12。
  4. 如果您想与 ArUcO 检测器兼容,请使用 tag36h11

如果这些都不满足您的需求,请在此处生成您自己的自定义标签系列。

探测器入门

Python

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)

或者,您可以使用由duckietown创建的 AprilTag python 绑定。

C

image_u8_t* im = image_u8_create_from_pnm("test.png");
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);

MATLAB

此处由第三方提供。

朱莉娅

此处由第三方提供

从 AprilTag 2 升级

对于大多数用例来说,这应该是替代品的下降。

  • 选项 Fine_decode、refine_pose 和 black_border 已被删除。
  • 如果您生成了自己的系列,则需要为这些系列重新生成 c 代码。然而,java 代码不需要重新生成,因此这应该是快速且简单的。

OpenCV 集成

请注意,该库没有外部依赖项。大多数应用至少需要一种获取图像的方法。

有关在 C++ 中与 OpenCV 结合使用 AprilTag 的示例,请参阅 example/opencv_demo.cc。该示例应用程序可以通过执行以下命令来构建:

$ cd examples
$ make opencv_demo

cv::Mat 对象中的图像数据可以传递到 AprilTag,而无需创建深层副本。只需为 cv::Mat 数据缓冲区创建一个 image_u8_t 标头:

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。

姿势估计。

我们提供了一种计算标签位姿的方法,如下所示(或者使用 OpenCv 的 Pnp 求解器和 SOLVEPNP_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: 相机的焦距(以像素为单位)。对于大多数相机来说fxfy将相等或接近如此。
  • cx, cy:相机的焦点中心(以像素为单位)。对于大多数相机来说,这与图像中心大致相同。

注意:标签尺寸不应从标签外部测量。标签尺寸定义为检测角之间的距离,或者白色边框和黑色边框之间的边缘长度。下图对于 48h12Custom 标签系列中的标签,使用红色 X 标记检 70AE 角,并使用红色箭头标记标签大小。

标签尺寸是白边框和黑边框之间的边缘宽度。

坐标系

坐标系的原点位于相机中心。z 轴从相机中心指向相机镜头。在相机拍摄的图像中,x 轴位于右侧,y 轴位于下方。标签的坐标系以标签的中心为中心,x 轴向右,y 轴向下,z 轴进入标签。

调试

您可以通过设置选项启用AddressSanitizer来调试调试版本的内存问题ASAN

cmake -B build -GNinja -DCMAKE_BUILD_TYPE=Debug -DASAN=ON
cmake --build build

大多数情况下,您可以像往常一样运行可执行文件并检查清理程序输出。如果您收到类似消息,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

灵活的布局

除了 AprilTag 2 支持的经典布局之外,AprilTag 3 还支持多种可能的标签布局。标签的数据位现在可以超出标签边界,并且还可以定义标签内部带有“孔”的布局没有数据位的边界。在此存储库中,我们包括:

  • 两个系列的新标准布局。这种布局在标签边界外部添加了一层数据位,增加了数据密度和可能的标签数量,但代价是检测距离略有缩短。
  • 两个圆形标签系列。
  • 有一个家庭,中间有一个洞。例如,这可以用于无人机应用,通过将不同尺寸的标签放置在彼此内部,以允许在较宽的距离范围内进行检测。

您可以使用我们的其他存储库AprilTag-Generation生成您自己的标签系列。

支持

如果有任何问题,请在此 GitHub 上创建问题,而不是发送私人消息。这可以让其他有相同问题的人找到您的答案。

About

AprilTag 是一种在机器人研究中流行的视觉基准系统。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 99.4%
  • Other 0.6%
0