1. 课程导论与预备知识

大家好,欢迎来到这门课。

先说说我为什么想做这门课。做了快十年机器人抓取,我发现一个尴尬的事:很多同学场景重建学得不错,点云处理也溜,但一到真抓东西就翻车。为什么?因为重建和抓取之间,隔着一层「几何到物理」的鸿沟。

这门课就是来填这条沟的。

1.1 机器人抓取概述

机器人抓取,说白了就是让机器「看懂」物体,再「下手」拿起来。

听起来简单?我当年第一个抓取项目,目标是抓一个马克杯。结果呢?杯子是透明的,深度相机直接「看穿」了它。重建出来的点云只有杯把,杯身全是洞。那次之后我才明白——抓取不是「伸手就行」的事。

抓取的核心三要素:
  • 感知:知道物体在哪、长什么样
  • 规划:决定怎么伸手、用什么姿态抓
  • 控制:执行抓取动作,稳定拿起来

这三步环环相扣。感知错了,规划再好也没用;规划不合理,控制再稳也白搭。

常见的抓取策略

策略 适用场景 典型方法
顶抓 平面散乱工件 吸盘、两指夹爪
侧抓 货架、料箱 三指手、自适应夹爪
力控抓取 易碎品、精密件 阻抗控制、力位混合
灵巧手抓取 复杂形状、多姿态 深度学习+触觉反馈

我个人习惯:能顶抓就别侧抓,能吸就别夹。越简单的策略越可靠。

1.2 场景重建与抓取的关系

很多人觉得重建就是「拍个3D模型」。其实不是。

抓取需要的重建,不是好看,而是可用。

我的经验:重建精度不需要毫米级,但完整性必须够。你缺了关键面,抓取规划就会「凭空想象」。

举个例子。你要抓一个螺丝刀。重建出来手柄完整,但刀头缺失。规划器会认为「刀头处可以抓」,结果一伸手就撞到桌面。这种坑,我踩过不止一次。

重建和抓取的关系,可以概括为三点:

  1. 几何支撑:重建提供物体的形状、位姿、表面法向
  2. 碰撞检测:没有完整场景,规划器无法避障
  3. 抓取点推理:从重建的局部几何特征,判断哪里能抓、哪里不能

你想想看,如果重建只给了一个残缺模型,后面所有工作都是「盲人摸象」。

重建到抓取的典型流程

下面这张图,是我自己项目里常用的流程框架。每次做新项目,我都会先画一遍这个图,确保每个环节都对齐。

场景重建 → 抓取落地 核心流程 RGB-D 采集 点云重建 物体分割 位姿估计 抓取点生成 运动规划 执行抓取 失败反馈 → 重新规划 关键:重建质量直接影响抓取成功率。残缺模型 → 错误位姿 → 抓取失败 我习惯在重建后加一步「完整性校验」,不达标就补扫

1.3 数学基础

做机器人抓取,数学绕不开。但别怕,我们不需要推导所有公式,会用就行。

线性代数

核心就三样:

  • 向量与点积:算夹角、投影、判断朝向
  • 矩阵乘法:坐标变换、旋转矩阵
  • 特征值与SVD:点云配准、主成分分析
注意:不要死磕矩阵论。你只需要知道:一个3x3矩阵可以描述旋转,一个4x4齐次矩阵可以描述旋转+平移。够了。

刚体变换

这是抓取里最常用的东西。说白了就是:把物体从相机坐标系,转到机器人基坐标系。

刚体变换包含:

  1. 旋转:用旋转矩阵 R(3x3)或四元数 q
  2. 平移:用平移向量 t(3x1)
  3. 齐次变换矩阵 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
我的建议:Python 版本用 3.8 以上。别用 2.7,很多库已经不兼容了。

C++ 关键点

如果你只做研究,Python 够用。但真上产线,C++ 是必须的。原因很简单:实时性。

你需要掌握:

  • Eigen:C++ 的 NumPy,做矩阵运算
  • PCL:点云库,处理重建数据
  • ROS2:机器人通信框架

嗯,这里要注意:C++ 的编译坑很多。我建议你一开始就用 CMake + VSCode 搭好环境,别在 Makefile 上浪费时间。

1.5 课程路线图

最后,给你一张路线图。看看我们这30章要走到哪。

课程知识路线 阶段一:基础 数学、编程、传感器 (第1-5章) 阶段二:重建 点云、网格、位姿 (第6-15章) 阶段三:抓取 规划、控制、力控 (第16-25章) 阶段四:实战 完整项目、部署、调优 (第26-30章) 每阶段结束有 一个综合小项目 检验学习效果

好了,这就是第一章的全部内容。别急着往下翻,先把数学和编程环境搭好。后面每一章都会用到这些基础。