1. 课程导论与坐标系基础
各位同学,欢迎来到《手眼标定实战与运动规划联动》的第一章。
我是这门课的主讲。做了十几年机器人,我踩过不少坑。手眼标定这个事,说难不难,说简单也不简单。很多人卡在坐标系转换上,一算就晕。今天咱们先把地基打牢。
1.1 什么是手眼标定?
手眼标定,说白了就是让机器人知道自己的“眼睛”长在哪。
你想想看,机器人手臂末端装了个相机。相机能看到工件,但机器人手臂要抓取工件。相机看到的坐标是像素坐标,机器人手臂运动需要的是世界坐标。这两者之间怎么换算?
这就是手眼标定要解决的问题——建立相机坐标系与机器人坐标系之间的变换关系。
核心定义:手眼标定是通过数学方法,求解相机坐标系(眼)与机器人末端或基座坐标系(手)之间的刚体变换矩阵(旋转 + 平移)。
1.2 为什么需要手眼标定?
我刚开始做机器人视觉项目时,觉得标定这步可有可无。直接测个距离,写死一个偏移量不就行了?
结果呢?换一个工件位置,抓取就偏了。换一个相机角度,又偏了。折腾了两天,最后老老实实做标定。
需要手眼标定的场景,其实很明确:
- 视觉引导抓取:相机看到工件,机器人要去抓。没有标定,抓不准。
- 装配对位:视觉定位零件位置,机器人执行装配。标定精度直接影响装配成功率。
- 焊缝跟踪:相机实时检测焊缝,机器人调整姿态。标定误差会导致焊偏。
- 移动机器人导航:车载相机与底盘坐标系的标定,决定定位精度。
我曾经踩过的坑:有一次做3C产线的螺丝锁付项目,标定误差0.5mm,结果螺丝直接滑牙。后来重新标定,把误差压到0.1mm以内,才稳定生产。标定精度,直接决定项目成败。
1.3 课程整体框架
这门课一共30章。我把它分成四个模块,方便你按需学习。
| 模块 | 章节范围 | 核心内容 |
|---|---|---|
| 基础篇 | 第1-5章 | 坐标系、刚体变换、相机模型、标定板、基础标定流程 |
| 核心算法篇 | 第6-15章 | 眼在手上/眼在手外标定、Tsai法、张氏标定、非线性优化 |
| 实战篇 | 第16-25章 | ROS集成、OpenCV实现、手眼标定工具链、精度验证 |
| 运动规划联动篇 | 第26-30章 | 标定结果与运动规划融合、避障、轨迹优化、综合案例 |
我个人建议,基础篇一定要扎实。后面算法和实战,都是建立在坐标系变换之上的。
1.4 刚体变换与齐次矩阵
刚体变换,就是物体在空间中只做旋转和平移,不发生形变。机器人手臂的运动,就是典型的刚体变换。
为什么用齐次矩阵?因为方便。一个4x4矩阵,同时包含旋转和平移信息。而且可以连续变换——矩阵乘法。
小技巧:我个人习惯把齐次矩阵写成 [R | t; 0 0 0 1] 的形式。R是3x3旋转矩阵,t是3x1平移向量。最后一行是[0,0,0,1],保持齐次性。
齐次矩阵的乘法,对应坐标系的连续变换。比如:
# 齐次矩阵示例
T = [[R, t],
[0, 1]]
# 点P在坐标系A下的坐标,转换到坐标系B
P_b = T_ba * P_a
# 连续变换
T_ca = T_cb * T_ba
嗯,这里要注意:矩阵乘法不满足交换律。先旋转后平移,和先平移后旋转,结果完全不同。
1.5 旋转矩阵与欧拉角
旋转矩阵是3x3的正交矩阵,行列式为+1。它描述了坐标系之间的旋转关系。
欧拉角是另一种表示旋转的方式。绕X、Y、Z轴依次旋转,用三个角度表示。直观,但有个问题——万向锁。
| 表示方式 | 优点 | 缺点 |
|---|---|---|
| 旋转矩阵 | 无奇异性,适合计算 | 9个参数,冗余 |
| 欧拉角 | 直观,3个参数 | 万向锁,插值不自然 |
| 四元数 | 无奇异性,适合插值 | 不够直观 |
我在项目中遇到过一个问题:用欧拉角做轨迹规划,结果在某个姿态附近,机器人突然反转180度。查了半天,就是万向锁导致的。后来改用四元数,问题解决。
避坑指南:如果你在做连续运动规划,尽量别用欧拉角。用旋转矩阵或四元数更安全。我曾经因为欧拉角插值,让机器人撞了夹具……从那以后,我写代码第一件事就是检查旋转表示方式。
旋转矩阵还有一个重要性质:正交性。R^T * R = I。这意味着旋转矩阵的逆就是它的转置。在标定计算中,这个性质可以简化很多推导。