9. 跳转至

9. RealSense相机内外参标定#

一种用于机械臂末端相机内外参自动化标定的方法

提醒

联络技术支持团队获取标定板pdf文件、aruco码pdf文件以及相机内外参标定脚本的文件夹。

前置教程:

9.1 环境准备#

9.1.1 Python环境准备#

硬件支持:Intel RealSense系列相机及USB相机(默认设备ID为0)

依赖 版本
pyrealsense2 2.55.1.6486
pyyaml 3.4.4

9.1.2 RealSense相机驱动准备#

依赖 版本
Intel RealSense SDK 2.0 2.0

9.1.2.1 标定板准备#

下载并打印标定板:

标定板

注意:打印时缩放比例保持100%!

9.1.3 环境安装步骤#

激活conda虚拟环境

sudo apt-get update
安装pyrealsense2:

pip install pyrealsense2 -i https://pypi.tuna.tsinghua.edu.cn/simple

9.1.4 物理环境准备(hand_in_eye眼在手上)#

按照距离机械臂底座约10cm距离,宽度6cm距离的样式放置标定板,以确保标定板保持在程序中自动标定的20个电位视野中。可以在calib/hand_eye_640*480/20250513112255格式的文件夹下检查标定板是否在相机捕捉的视野中,如果存在超出视野的,可以移动标定板的位置再次标定。

标定板
标定板

9.1.5 物理环境准备(hand_to_eye眼在手外)#

将标定板装配在机械臂末端,以标定相机与机械臂基坐标系之间的关系。

标定板

9.1.6 标定板参数#

程序使用10×8角点个数的标定板,标定板参数如下:

标定板参数

如果标定板参数发生改变需要在程序115行对应参数进行相应修改。

9.2 启动机械臂控制服务#

打开一个终端,运行机械臂控制服务

airbot_fsm -i <INTERFACE> -p <PORT>
airbot_server -i <INTERFACE> -p <PORT>

  • <INTERFACE> 为接口名称,可通过 ip link 查看,默认连接的设备名称为 canX(X 为编号,从0开始计数),如can0, can1等。
  • <PORT> 为 gRPC 服务器监听端口。如果连接多个设备,每个设备应使用不同的端口号。为不同的设备可自定义不同 PORT 值,如50000, 50001, 50010等。 关键要点包括: 例:
    airbot_server -i can0 -p 50051
    

9.3 执行自动化相机内参外参标定#

9.3.1 相机内参及眼在手上#

将脚本文件所在目录打开终端运行下列命令:

conda activate airbot
python3 -m airbot_calibration -t hand_in_eye_auto

## 若自动化标定不成功可使用手动标定,拖动机械臂至不同的位置并保证标定版完全在视野中,按下esc保存图片
python3 -m airbot_calibration -t hand_in_eye

注意

如需修改realsense相机分辨率,需要在cam_calibration_real_3.0/configs/rs_camera.yaml文件中对resolution参数进行修改。

脚本命令

运行结果如下:

脚本命令

可视化分析报告

可视化报告1
可视化报告2

程序将自动运行相机内参标定与外参标定,并将分析报告保存在类似目录下:

报告目录

标定后的精度要求为Project Error: <0.03 ,标定精度受机械臂定位精度影响,最好在进行相机内外参标定前先进行机械臂精度标定,确保机械臂定位精度符合标准,若相机内外参标定不符合标准可以略微移动标定板再次标定。

标定报告

9.3.2 相机内参及眼在手外标定#

将脚本文件所在目录打开终端运行下列命令:

conda activate airbot
python3 -m airbot_calibration -t hand_to_eye -c usbcam 

## 需要指定usb相机时可以-d输入
python3 -m airbot_calibration -t hand_to_eye -c usbcam -d 0
## 更多参数详见代码

## 此代码同样支持,当自动化标定位姿点不能满足要求时可以使用此代码 
python3 -m airbot_calibration -t hand_in_eye -c realsense 
拖动机械臂手动选择40个位姿,尽量覆盖相机视野以保证标定效果。分析报告保存示例类似于hand-in-eye部分。

9.4 内外参精度验证#

将标定板换成aurco码面,运行文件夹下的aruco_detect_realsense.py文件 将Calibration_Report.txt移动到cam_calibration_real/configs目录下:

python3 -m aruco_detect_realsense

正确验证结果如下,如果平均误差大于1mm则需要重新进行相机内外参标定:

内参精度

如果出现如下异常则说明标定板验证面超出相机视野,重新摆放以确保在相机视野内,可以运行airbot_realsense.py检查相机当前视野

异常处理

运行后程序会将内外参结果可视化:

  • Intrinsic calibration verification:内参结果可视化,显示五个marker在相机坐标系下的坐标及相机坐标系下四个marker之间的距离(真实距离是150mm),左上角显示的是四个maker与中心marker的距离的平均误差

    marker

  • Extrinsic calibration verification: 外参结果可视化,显示五个marker在base坐标系下的坐标及base坐标系下四个marker之间的距离(真实距离是150mm),左上角显示的是四个maker与中心marker的距离的平均误差

    外参Marker

9.5 异常处理#

如果图片中存在过多(超过10%)以下信息输出

重新标定

需要按照第一步环境准备尽量精确防止标定板,再重新进行标定程序