1. 课程导论与预备知识
大家好,欢迎来到这门课。
先说说我为什么想做这门课。做了快十年机器人抓取,我发现一个尴尬的事:很多同学场景重建学得不错,点云处理也溜,但一到真抓东西就翻车。为什么?因为重建和抓取之间,隔着一层「几何到物理」的鸿沟。
这门课就是来填这条沟的。
1.1 机器人抓取概述
机器人抓取,说白了就是让机器「看懂」物体,再「下手」拿起来。
听起来简单?我当年第一个抓取项目,目标是抓一个马克杯。结果呢?杯子是透明的,深度相机直接「看穿」了它。重建出来的点云只有杯把,杯身全是洞。那次之后我才明白——抓取不是「伸手就行」的事。
- 感知:知道物体在哪、长什么样
- 规划:决定怎么伸手、用什么姿态抓
- 控制:执行抓取动作,稳定拿起来
这三步环环相扣。感知错了,规划再好也没用;规划不合理,控制再稳也白搭。
常见的抓取策略
| 策略 | 适用场景 | 典型方法 |
|---|---|---|
| 顶抓 | 平面散乱工件 | 吸盘、两指夹爪 |
| 侧抓 | 货架、料箱 | 三指手、自适应夹爪 |
| 力控抓取 | 易碎品、精密件 | 阻抗控制、力位混合 |
| 灵巧手抓取 | 复杂形状、多姿态 | 深度学习+触觉反馈 |
我个人习惯:能顶抓就别侧抓,能吸就别夹。越简单的策略越可靠。
1.2 场景重建与抓取的关系
很多人觉得重建就是「拍个3D模型」。其实不是。
抓取需要的重建,不是好看,而是可用。
举个例子。你要抓一个螺丝刀。重建出来手柄完整,但刀头缺失。规划器会认为「刀头处可以抓」,结果一伸手就撞到桌面。这种坑,我踩过不止一次。
重建和抓取的关系,可以概括为三点:
- 几何支撑:重建提供物体的形状、位姿、表面法向
- 碰撞检测:没有完整场景,规划器无法避障
- 抓取点推理:从重建的局部几何特征,判断哪里能抓、哪里不能
你想想看,如果重建只给了一个残缺模型,后面所有工作都是「盲人摸象」。
重建到抓取的典型流程
下面这张图,是我自己项目里常用的流程框架。每次做新项目,我都会先画一遍这个图,确保每个环节都对齐。
1.3 数学基础
做机器人抓取,数学绕不开。但别怕,我们不需要推导所有公式,会用就行。
线性代数
核心就三样:
- 向量与点积:算夹角、投影、判断朝向
- 矩阵乘法:坐标变换、旋转矩阵
- 特征值与SVD:点云配准、主成分分析
刚体变换
这是抓取里最常用的东西。说白了就是:把物体从相机坐标系,转到机器人基坐标系。
刚体变换包含:
- 旋转:用旋转矩阵 R(3x3)或四元数 q
- 平移:用平移向量 t(3x1)
- 齐次变换矩阵 T:4x4,把 R 和 t 合在一起
举个例子。相机看到杯子在 (0.1, 0.2, 0.5) 米处。但机器人坐标系原点在别处。你需要一个变换矩阵 T,把相机坐标下的点,映射到机器人坐标下。
# Python 示例:刚体变换
import numpy as np
# 旋转矩阵(绕Z轴转30度)
theta = np.radians(30)
R = np.array([
[np.cos(theta), -np.sin(theta), 0],
[np.sin(theta), np.cos(theta), 0],
[0, 0, 1]
])
# 平移向量
t = np.array([0.1, 0.2, 0.5])
# 齐次变换矩阵
T = np.eye(4)
T[:3, :3] = R
T[:3, 3] = t
# 点变换
p_cam = np.array([0.05, 0.03, 0.2, 1.0]) # 齐次坐标
p_robot = T @ p_cam
print(f"机器人坐标系下位置: {p_robot[:3]}")
这段代码我几乎每个项目都会用。建议你直接封装成函数,别每次都手写。
1.4 编程基础
这门课主要用 Python 和 C++。Python 做原型验证,C++ 做落地部署。
Python 核心库
| 库 | 用途 | 我常用的版本 |
|---|---|---|
| NumPy | 矩阵运算、线性代数 | ≥1.21 |
| Open3D | 点云处理、可视化 | ≥0.15 |
| PyTorch | 深度学习模型 | ≥1.10 |
| Pinocchio | 运动学、动力学 | ≥2.6 |
C++ 关键点
如果你只做研究,Python 够用。但真上产线,C++ 是必须的。原因很简单:实时性。
你需要掌握:
- Eigen:C++ 的 NumPy,做矩阵运算
- PCL:点云库,处理重建数据
- ROS2:机器人通信框架
嗯,这里要注意:C++ 的编译坑很多。我建议你一开始就用 CMake + VSCode 搭好环境,别在 Makefile 上浪费时间。
1.5 课程路线图
最后,给你一张路线图。看看我们这30章要走到哪。
好了,这就是第一章的全部内容。别急着往下翻,先把数学和编程环境搭好。后面每一章都会用到这些基础。