使用视觉方法校准机械臂

0x01 打印标定板
我们选用 ChArUco标定板,它结合了 棋盘标定板亚像素准确的角点检测特性和ArUco标记板快速检测和多用途能性,相机内外参标定一块板子解决。

更多相机标定和标定板知识 见 Camera Calibration Pattern Generator – calib.io

我们统一使用 200mm* 280mm 10X14的标定板,方便a4打印
可打印pdf文件 https://cloud.scumaker.org/s/mAZ9qrnYpraimYa
点阵图像 https://cloud.scumaker.org/s/WrAQANNfoZSgPtC

具体打印规格参数和打印文件创建方法如下

创建标定板点阵图像
(opencv 4.7 跟之前ChArUco图案和检测接口有些许不向前兼容的差异?
什么sb操作,暂时使用4.5.5.62版

pip install opencv-contrib-python==4.5.5.62 -i Simple Index


https://docs.opencv.org/3.4/d0/d3c/classcv_1_1aruco_1_1CharucoBoard.html

import cv2
aruco_dict = cv2.aruco.Dictionary_get(cv2.aruco.DICT_ARUCO_ORIGINAL)
board = cv2.aruco.CharucoBoard_create(10, 14, 0.02, 0.014, aruco_dict)
img_board = board.draw((2000, 2800))
cv2.imwrite(‘charuco.png’, img_board)

创建标定板pdf文件

python MarkerPrinter.py --charuco --file “./charuco.pdf” --dictionary DICT_ARUCO_ORIGINAL --size_x 10 --size_y 14 --square_length 0.02 --marker_length 0.014 --border_bits 1

打印时记得选择实际大小避免放缩
image

打印后大概测量一下
总尺寸200mm*280mm
棋盘 10 * 14 边长20mm
内部二维码 边长14mm 居中

有条件的定制一块高精度的标定板 (maker是不是应该安排上)

补充

  1. 关于相机标定最好的介绍还是 Learning openCV 3 第18章 相机模型与标定
    https://item.jd.com/12418514.html
    安利

  2. CharucoBoard 输出标定板不兼容
    CharucoBoard_create regression / incompatible patterns (only even row count) with 4.6.0 · Issue #3291 · opencv/opencv_contrib · GitHub

  3. Aruco api重大修改
    opencv 4.7.0 Aruco markers, module functionality was moved to objdetect module

Objdetect module:

  • ArUco markers and April tags support including ChAruco and diamond boards detection and calibration #22986.

https://docs.opencv.org/4.x/d9/d6a/group__aruco.html

  1. so 暂时使用 4.5.5.62 看看之后api和标定板是什么情况

定制的玻璃基板标定板已经送到maker
图案精度 ±0.01mm

大家先用打印a4版本调通代码
高精度标定板随用随还,玻璃材质使用时小心

请多分享项目经验