1. 课程导论与3D视觉基础:什么是3D视觉定位?手眼标定解决了什么问题?

大家好,欢迎来到这门实战课。我是你们的老朋友,一个在机器人和3D视觉领域摸爬滚打了十几年的工程师。

开始之前,我想先聊聊这门课到底要干什么。说白了,就是教会你:如何让机器人“看见”并“抓住”东西。

你可能会觉得,这不就是给机器人装个摄像头吗?嗯,没那么简单。我当年第一次做这个项目时,也以为接上相机就能用。结果呢?机器人抓了个寂寞——它看到了工件,但爪子伸过去,差了十万八千里。为什么?因为相机和机器人的“世界观”不一样。

这就是我们今天要解决的核心问题。

1.1 什么是3D视觉定位?

3D视觉定位,就是让计算机理解三维空间里物体的位置和姿态。注意,是六自由度的信息——X、Y、Z三个平移,加上绕这三个轴的旋转(Roll、Pitch、Yaw)。

举个例子:你面前有个螺丝钉。2D视觉只能告诉你“它在画面左上角”,但3D视觉能告诉你“它在桌子平面上,距离你右前方30厘米,头部朝上偏了15度”。

核心概念:3D视觉定位 = 获取物体的三维位姿(位置 + 姿态),通常用齐次变换矩阵表示。

我习惯把3D视觉定位拆成三个步骤:

  1. 数据获取——用深度相机、激光雷达或双目相机拿到三维点云或深度图。
  2. 特征提取与匹配——从点云里找到目标物体的特征(比如平面、圆柱、关键点)。
  3. 位姿解算——通过匹配结果,算出物体相对于相机的位姿矩阵。

你想想看,如果这一步做不准,后面机器人抓取、装配、焊接全都会偏。所以,定位精度是这门课的第一道坎。

1.2 手眼标定解决了什么问题?

好,现在你通过3D视觉定位,知道了工件相对于相机的位置。但机器人怎么知道往哪抓?

问题就在这里:相机看到的坐标系,和机器人手臂的坐标系,不是同一个。

手眼标定,就是求出一个变换矩阵,把相机坐标系下的坐标,转换到机器人基坐标系下。这样,机器人才能知道“相机看到的那个点,在我的世界里到底在哪”。

我的经验:我曾经在一个项目里,标定做了三遍还是差2毫米。后来发现是机器人运动学参数没校准。记住,手眼标定的精度上限,取决于机器人本身的定位精度。别指望标定能弥补机械误差。

手眼标定有两种常见配置:

配置类型 相机安装位置 典型场景 标定方程
眼在手上(Eye-in-Hand) 相机固定在机器人末端 小范围、高精度抓取 AX = XB
眼在手外(Eye-to-Hand) 相机固定在外部支架上 大范围、多工位作业 AX = YB

这两种配置,标定方法和精度影响因素都不一样。后面我们会专门花两章来手撕代码。

1.3 课程整体项目架构

这门课不是纯理论,也不是零散demo。我设计了一个完整的实战项目:用3D视觉引导机器人抓取随机摆放的工件。

整个项目架构分为四层:

课程项目整体架构 硬件层 工业机器人(六轴) + 3D深度相机(如RealSense / 双目) + 标定板 数据层 点云获取 → 滤波 → 下采样 → 平面分割 → 目标提取 算法层 3D位姿估计(ICP / 点云配准) + 手眼标定(AX=XB / AX=YB) 应用层 机器人运动规划 → 抓取姿态生成 → 实际抓取验证 每一层都有对应的代码实战章节,从零搭建完整系统

每一层我都会带着你写代码、调参数、踩坑。不是那种“复制粘贴就能跑”的教程,而是让你真正理解为什么这么写。

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视觉的书很多,讲机器人标定的也不少。但能把两者真正串起来、落地到实际项目的,太少。

我记得刚入行那会儿,照着抄代码,标定结果死活不对。后来才发现,里假设的“理想机器人”根本不存在——关节有回差、连杆有柔性、相机有畸变。这些坑,不会告诉你,但我会。

所以这门课里,我会把工程中真正有用的方法讲给你听。那些花里胡哨但实际用不上的算法,我会直接告诉你“别碰”。