1. 课程导论与3D视觉基础:什么是3D视觉定位?手眼标定解决了什么问题?
大家好,欢迎来到这门实战课。我是你们的老朋友,一个在机器人和3D视觉领域摸爬滚打了十几年的工程师。
开始之前,我想先聊聊这门课到底要干什么。说白了,就是教会你:如何让机器人“看见”并“抓住”东西。
你可能会觉得,这不就是给机器人装个摄像头吗?嗯,没那么简单。我当年第一次做这个项目时,也以为接上相机就能用。结果呢?机器人抓了个寂寞——它看到了工件,但爪子伸过去,差了十万八千里。为什么?因为相机和机器人的“世界观”不一样。
这就是我们今天要解决的核心问题。
1.1 什么是3D视觉定位?
3D视觉定位,就是让计算机理解三维空间里物体的位置和姿态。注意,是六自由度的信息——X、Y、Z三个平移,加上绕这三个轴的旋转(Roll、Pitch、Yaw)。
举个例子:你面前有个螺丝钉。2D视觉只能告诉你“它在画面左上角”,但3D视觉能告诉你“它在桌子平面上,距离你右前方30厘米,头部朝上偏了15度”。
核心概念:3D视觉定位 = 获取物体的三维位姿(位置 + 姿态),通常用齐次变换矩阵表示。
我习惯把3D视觉定位拆成三个步骤:
- 数据获取——用深度相机、激光雷达或双目相机拿到三维点云或深度图。
- 特征提取与匹配——从点云里找到目标物体的特征(比如平面、圆柱、关键点)。
- 位姿解算——通过匹配结果,算出物体相对于相机的位姿矩阵。
你想想看,如果这一步做不准,后面机器人抓取、装配、焊接全都会偏。所以,定位精度是这门课的第一道坎。
1.2 手眼标定解决了什么问题?
好,现在你通过3D视觉定位,知道了工件相对于相机的位置。但机器人怎么知道往哪抓?
问题就在这里:相机看到的坐标系,和机器人手臂的坐标系,不是同一个。
手眼标定,就是求出一个变换矩阵,把相机坐标系下的坐标,转换到机器人基坐标系下。这样,机器人才能知道“相机看到的那个点,在我的世界里到底在哪”。
我的经验:我曾经在一个项目里,标定做了三遍还是差2毫米。后来发现是机器人运动学参数没校准。记住,手眼标定的精度上限,取决于机器人本身的定位精度。别指望标定能弥补机械误差。
手眼标定有两种常见配置:
| 配置类型 | 相机安装位置 | 典型场景 | 标定方程 |
|---|---|---|---|
| 眼在手上(Eye-in-Hand) | 相机固定在机器人末端 | 小范围、高精度抓取 | AX = XB |
| 眼在手外(Eye-to-Hand) | 相机固定在外部支架上 | 大范围、多工位作业 | AX = YB |
这两种配置,标定方法和精度影响因素都不一样。后面我们会专门花两章来手撕代码。
1.3 课程整体项目架构
这门课不是纯理论,也不是零散demo。我设计了一个完整的实战项目:用3D视觉引导机器人抓取随机摆放的工件。
整个项目架构分为四层:
每一层我都会带着你写代码、调参数、踩坑。不是那种“复制粘贴就能跑”的教程,而是让你真正理解为什么这么写。
1.4 学习路径与前置知识
这门课一共30章,我把它分成了五个阶段:
| 阶段 | 章节范围 | 核心内容 | 产出物 |
|---|---|---|---|
| 基础篇 | 第1-5章 | 3D视觉基础、坐标系变换、相机模型 | 能写齐次变换矩阵运算 |
| 视觉篇 | 第6-12章 | 点云处理、3D位姿估计算法 | 能从点云中定位工件 |
| 标定篇 | 第13-20章 | 手眼标定原理、代码实现、精度优化 | 完成机器人-相机标定 |
| 集成篇 | 第21-26章 | 机器人通信、抓取规划、系统联调 | 跑通完整抓取流程 |
| 进阶篇 | 第27-30章 | 多相机融合、动态标定、部署优化 | 能应对复杂工业场景 |
你需要的基础:
- 懂一点Python或C++(代码以Python为主,关键部分会讲C++接口)
- 了解线性代数基础(矩阵乘法、旋转矩阵)
- 用过OpenCV或PCL(不熟也没关系,我会从零教起)
注意:如果你完全没接触过机器人学,建议先补一下“刚体变换”和“四元数”的基本概念。第2章我会快速带过,但不会从零讲数学。
1.5 我的一些心里话
做这门课,我其实挺纠结的。市面上讲3D视觉的书很多,讲机器人标定的也不少。但能把两者真正串起来、落地到实际项目的,太少。
我记得刚入行那会儿,照着抄代码,标定结果死活不对。后来才发现,里假设的“理想机器人”根本不存在——关节有回差、连杆有柔性、相机有畸变。这些坑,不会告诉你,但我会。
所以这门课里,我会把工程中真正有用的方法讲给你听。那些花里胡哨但实际用不上的算法,我会直接告诉你“别碰”。