一篇看懂雅可比矩阵与手眼协调:Every-Embodied速度运动学入门指南,新手也能快速上手
【免费下载链接】every-embodied仅需Python基础,从0构建自己的具身智能机器人;从0逐步构建VLA/OpenVLA/SmolVLA/Pi0, 深入理解具身智能项目地址: https://gitcode.com/gh_mirrors/ev/every-embodied
Every-Embodied是一个仅需 Python 基础就能"从 0 构建具身智能机器人"的开源教程仓库。这篇文章带你一次看懂两个新手最容易卡住的概念:雅可比矩阵(速度运动学的核心)和手眼协调(视觉引导抓取的基石)。不需要高深数学背景,读完你就能明白:关节速度如何变成末端速度、机械臂为什么会在某些姿态"使不上劲"、以及相机怎么"告诉"机械臂物体在哪。
为什么速度运动学重要:从"在哪"到"多快"
学机器人时,你会先学位置运动学(DH 参数、正运动学),解决的是"关节转到多少度,末端在哪个位置"。但真实控制关心的是另一件事:
末端想以某个速度移动,每个关节该以多快的角速度转动?
这就是速度运动学要解决的问题,而连接"关节速度"与"末端速度"的桥梁,正是雅可比矩阵(Jacobian Matrix)。项目里 04速度运动学与雅可比矩阵.md 开头就点明了它的地位:
- 没有雅可比矩阵,你无法根据末端想要的速度反推关节转速;
- 也无法根据末端抓取的负载计算关节电机需要多大的力矩。
下图是仓库"综合实战"章节中的单摆动力学仿真结果(时域响应 + 相图),可以看到速度(角速度 ω)如何随位置变化——这正是"从位置到速度"这一思想在动力学里的直观体现:
雅可比矩阵速览:一个偏导数矩阵
对于一个 n 自由度机器人,关节变量为 $q=[q_1,\dots,q_n]^T$,末端位姿 $x=f(q)$。雅可比矩阵就是末端位姿对关节角的偏导数矩阵:
$$J(q)=\frac{\partial f}{\partial q}$$
它只有两条核心公式,记住即可:
- 速度映射(关节速度 → 末端速度):$v = J(q)\dot{q}$
- 力映射(末端受力 → 关节力矩,虚功原理):$\tau = J^T(q)F$
以平面 2R 两连杆机械臂为例,取末端位姿 $[x,y,\phi]^T$,雅可比是 3×2 矩阵:前两行对应线速度,第三行对应末端姿态角速度。仓库里用sympy符号推导自动求出了这个雅可比,并做了数值验证,完整代码见 04速度运动学与雅可比矩阵.md。
💡 新手记忆技巧:J 管"快慢",J 的转置管"力气"。方向一致,维度转置。
奇异性:机械臂"伸直胳膊"时为什么会卡住
雅可比矩阵最重要的实践含义之一是奇异性判断。当机械臂完全伸直(2R 臂的 $\theta_2=0$)时,线速度子矩阵 $J_v$ 的行列式趋近于 0:
- 此时末端在某些方向上"动不了",无论关节怎么动都无法产生该方向的线速度;
- 反过来,末端只要在该方向有微小外力,关节就需要极大的力矩——这就是机械臂接近奇异位形时必须减速保护的原因。
仓库的代码对"手臂伸直"这一姿态做了奇异性数值测试(det(Jv)接近 0),见 04速度运动学与雅可比矩阵.md。
⚠️ 新手常见误区:对 3×2 这类非方阵不能直接取
det(J),位置任务的奇异性判断要用前两行组成的线速度子矩阵 $J_v$。
手眼协调两种形态:Eye In Hand 还是 Eye To Hand
机械臂要"看着抓",必须知道相机坐标系和机器人末端坐标系之间的变换关系,这就是手眼标定(Hand-Eye Calibration)。它只解决一个关系:手与眼之间相对位姿(相机装在哪、朝向如何)。
根据相机安装位置,分为两种经典形态:
| 形态 | 相机位置 | 标定方式 | 典型场景 |
|---|---|---|---|
| Eye In Hand(眼在手上) | 装在机械臂末端,随手臂一起动 | 标定板固定,机械臂移动到多个位姿拍照 | 近距离精细操作、跟随抓取 |
| Eye To Hand(眼在手外) | 固定在外部(如底座、支架) | 标定板固定在末端,机械臂拿着板绕相机拍照 | 大范围俯视工作区、安全隔离 |
完整定义与坐标系关系(基座、末端、相机、标定目标四个坐标系)见 补充01手眼协调.md。
手眼标定的数据采集:两种形态怎么拍
Eye In Hand:相机随末端一起动,标定板不动。机械臂摆出多个不同位姿,每个位姿拍一张:
Eye To Hand:相机不动,标定板固定在机械臂末端。机械臂拿着标定板绕固定相机运动、拍照:
手眼标定的核心方程:AH = HB 与 OpenCV 一行求解
两种形态推导后都会得到同一个方程 $AH = HB$(H 就是要求的"手眼变换矩阵")。求法上有两类经典思路:
- 独立闭式解:先解旋转、再解平移(如 Tsai-Lenz 法、Park 法);
- 同时闭式解 / 迭代法:整体优化求解,精度与算力开销需权衡。
推导过程(基于 SO(3) 李群伴随性质、最小二乘与点云配准视角)在 补充01手眼协调.md 中有完整展开。而实际工程上,OpenCV 已经把常用方法都封装好了:
采集多组标定数据后,把机械臂末端位姿和标定板定位结果传给cv2.calibrateHandEye,选择CALIB_HAND_EYE_TSAI(默认)或CALIB_HAND_EYE_PARK即可得到手眼变换矩阵 H。标定效果的评估,则是比较"测量值"与"预测值"的距离误差,计算均值(系统误差)和标准差(随机误差)。
新手手眼标定 6 条实操避坑清单
结合仓库文档总结的标定注意事项(源自 补充01手眼协调.md),第一次标定前请逐条核对:
- 内参一致:用
calibrateCamera求标定板到相机的 R、t 时,内参要和实际抓取用的内参一致,否则引入误差; - 角点方向统一:标定板角点检测默认从左到右,若出现从右到左会导致坐标系不统一;
- 覆盖工作区:标定板不要只在画面中心小范围移动,要覆盖到边缘,否则边缘精度差;
- 姿态要变化:拍照时要有旋转姿态变化,不能只平移;
- 数量要够:至少10 张以上照片;
- 深度相机注意:RGB-D 相机的变换矩阵要特别留意(彩色相机与深度相机光心不同)。
Every-Embodied 学习路径:从雅可比到手眼协调的完整路线
这篇入门指南对应的知识,在仓库里都配有可运行的 Python 验证代码,建议按以下顺序推进:
| 步骤 | 模块 | 文件 |
|---|---|---|
| 1️⃣ 坐标与空间描述 | 02-机器人基础和控制 | 01机器人空间描述与坐标变换.md |
| 2️⃣ 位置运动学 | 02-机器人基础和控制 | 02机器人运动学与 DH 参数.md |
| 3️⃣ 速度运动学 | 02-机器人基础和控制 | 04速度运动学与雅可比矩阵.md |
| 4️⃣ 手眼标定 | 02-机器人基础和控制 | 补充01手眼协调.md |
| 5️⃣ 综合实战 | 02-机器人基础和控制 | 05综合实战与仿真.md |
🎯 想动手玩控制算法?仓库还有 CartPole 的 PID / LQR / MPC 三种算法实战:cartpole建模与控制.md
想获取完整资料,可以克隆仓库:
git clone https://gitcode.com/gh_mirrors/ev/every-embodied小结:一张表记住雅可比与手眼协调
| 概念 | 一句话理解 | 核心公式 / 工具 |
|---|---|---|
| 雅可比矩阵 J | 关节速度 → 末端速度的桥梁 | $v=J(q)\dot{q}$ |
| 雅可比转置 Jᵀ | 末端受力 → 关节力矩的桥梁 | $\tau=J^T F$ |
| 奇异性 | 雅可比"降秩",臂伸直时最危险 | 判断 $\det(J_v)\approx 0$ |
| 手眼标定 | 求相机与末端的手眼变换 H | $AH=HB$ |
| 标定实操 | OpenCV 一行调用 | cv2.calibrateHandEye |
雅可比矩阵解决"手怎么动、要出多大力",手眼标定解决"眼怎么看、坐标怎么统一"。两者一结合,机械臂就具备了"看着抓"的能力——这也是 Every-Embodied 后续 VLA 与视觉抓取内容的重要基础。
【免费下载链接】every-embodied仅需Python基础,从0构建自己的具身智能机器人;从0逐步构建VLA/OpenVLA/SmolVLA/Pi0, 深入理解具身智能项目地址: https://gitcode.com/gh_mirrors/ev/every-embodied
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考