位姿运动学 xe=k(q) 是高度非线性的;但对时间求导之后,非线性问题就在速度层面线性化了——线性化后的映射正是雅可比矩阵。本节从几何角度(矢量传递)把它推出来:先解决「旋转矩阵怎么求导」(3.1.1),再沿关节链递推连杆速度(3.1.2),最后把每个关节的贡献拼成矩阵(3.1.3)。录播 0:27:00–1:12:12。
图解读图:雅可比是「每个关节单独动一点,末端往哪走」的偏导表。第 i 列是第 i 个关节速度对末端线速度 / 角速度的贡献;末端速度箭头是各列贡献的线性叠加。
考虑 n 自由度机械手,DH 法给出的正运动学
Te(q)=[ne(q)0se(q)0ae(q)0pe(q)1],Re=[neseae],T=[R0P1]
R 与 P 都是位形 q 的函数(Re 的三列 ne,se,ae 是末端坐标系三根轴的单位向量——法向 / 滑动 / 接近向量,见 定义 2.8.2)。微分运动学要找的是:关节速度与末端执行器线速度、角速度之间的关系。
定义 3.1.1 · 微分运动学方程与几何雅可比
末端执行器速度取六维堆叠 ve=[p˙eωe](3 平动 +3 转动),微分运动学方程为
[p˙eωe]=J(q)q˙=[JPJO]q˙,J∈R6×n
J 称几何雅可比矩阵,是位形 q 的函数;JP(position)对应线速度、JO(orientation)对应角速度,各 3×n。ωe 的三个分量是末端角速度在基坐标系三根轴上的投影(录播 0:29:11——这句话是几何/分析雅可比分歧的根源,见 3.6)。
位置部分好办——位移求导就是速度;关键在姿态部分:旋转矩阵怎么对时间求导?
定理 3.1.A · 旋转矩阵的导数与反对称算子
设 R=R(t) 为时变旋转矩阵。由正交性 RRT=I,两边求导并用乘积法则:
R˙RT+RR˙T=0.
记 S≜R˙RT,则 S+ST=0——S 反对称(对角线为零、非对角元素反对称)。上式两边右乘 R 得
R˙=SR.
证明的三个落点(老师逐步口述,0:30:55–0:32:30)
① RRT=I 是旋转矩阵正交性的直接结果(定义 2.2.2);② 求导用乘积法则,注意 (RT)˙=(R˙)T;③ 「上式两边右乘 R」的动机:R˙RT⋅R=R˙(把 R˙ 单独解出来),RR˙TR=−S 保持反对称。于是一个反对称算子 S 把 R 和 R˙ 联系起来。
□
S 里装的是什么?——角速度。 考虑常模向量 p′(在刚体系下不动),p(t)=R(t)p′:它的模长始终不变,方向却在变。求导并代入 R˙=SR:
p˙(t)=S(t)R(t)p′.
另一方面,从力学角度(大学物理):随坐标系 R(t) 一起转动的点,线速度是角速度叉乘矢径:
p˙(t)=ω(t)×p(t)=ω×R(t)p′.
两式对任意 p′ 成立,比较即得 S(t)R(t)=S(ω)R(t),即
定义 3.1.2 · 叉乘算子 / 反对称矩阵 S(ω)
(此算子已在 定义 2.5.2 作为「把叉积装进矩阵代数」的工具引入;本定义补上它的物理身份——角速度。用 2.5.3 的语言:S(ω) 是李代数 so(3) 的元素,ω 是它的摘帽。)
S(ω)=0ωz−ωy−ωz0ωxωy−ωx0,ω=ωxωyωz,S(ω)p≡ω×p
S 的 3 个独立元素与 ω 的 3 个分量一一对应。老师在这个点上补了一句(0:36:16):「一对一的映射关系,可以类比,但不完全一样」——数一数就明白:S 有 9 个元素、6 个约束,独立数恰为 3,与 R 同构,同样是「省参数」的表示。最终:
R˙=S(ω)R
(有的教材记 S(ω)=[ω]× 或 ω^,本编与原书统一用 S(⋅)。)
定理 3.1.B · 旋转共轭保持叉乘
对任意旋转矩阵 R 与向量 ω:
RS(ω)RT=S(Rω).
即「先叉乘再旋转」等于「先旋转再叉乘」。证明:由「旋转保持叉积」(证明 第 0 步已证:R(a×b)=(Ra)×(Rb)),对任意向量 p:
RS(ω)RTp=R(ω×RTp)=(Rω)×(RRTp)=(Rω)×p=S(Rω)p,
两边矩阵对一切 p 给出相同向量,故相等。□ 这个关系后面会用很多次(0:37:05 老师预告,连杆角速度递推 3.1.2 立刻用到)。
例 3.1(原书)· 绕 z 轴的时变旋转
Rz(α(t))=cαsα0−sαcα0001,ω=[0,0,α˙]T,S(ω)=0α˙0−α˙00000,R˙z=S(ω)Rz.
「比较简单,不详细讲,目的是给大家更感性的认识——反对称矩阵元素与坐标系旋转角速度之间的关系」(0:38:43):ω 的 x,y 分量为零、z 分量恰为 α˙——对着元素读一遍,反对称矩阵与坐标系角速度的对应关系就一目了然。该例在 3.2.1 与 3.7 都会以「Rz 的 R˙」身份复用(例 3.1)。
李代数视角:R˙RT 与 RTR˙ 各读出谁的角速度(本编补充)
同一个 R˙=S(ω)R,左乘还是右乘 RT,读出来的是两套角速度。两边右乘 RT 得 S(ω)=R˙RT;两边左乘 RT、再用 定理 3.1.B 把 RT 「拿进」算子,则得 RTR˙=S(RTω)——也是反对称阵。两个摘帽结果:
ω=(R˙RT)∨(基系读数——本课程用的就是它),ω′=RTω=(RTR˙)∨(刚体系读数).
同一段旋转、两套坐标读法——「角速度住在李代数 so(3) 里,但读数要问在哪套坐标」(2.5.3)。这正是 3.1.3 末「雅可比的坐标变换 Ju」在角速度层面的版本;姿态控制文献里的空间速度 / 物体速度之别即源于此。
这一小节的(a)–(e)五步层层递进:先看单个点如何做速度合成(a),再用 DH 记号把它搬到相邻连杆之间(b–c),接着推出角速度递推(d),最后落到单个关节的特例(e)——这些结论稍后组装雅可比时都要用。
(a)点的速度合成。 设点 P 在坐标系 1 中的位置为 p1,坐标系 1 的原点在基系 0 中为 o10、姿态为 R10:
p0=o10+R10p1.
老师强调(0:40:13):「不能直接加——能直接相加的量都必须在同一空间。要先把 p1 转到基坐标系,计算才是正确的、有意义的。」两边求时间导数,记 r10≜R10p1(p1 在基系中的表示),姿态项用 定理 3.1.A:
p˙0=o˙10+R˙10p1+R10p˙1=原点速度o˙10+牵连转动ω1×r10+相对速度R10p˙1
三项合起来,正是大学物理里的「绝对速度 = 牵连速度 + 相对速度」;若 P 与刚体固联(p˙1=0),它就进一步退化为定轴转动公式 p˙=o˙+ω×r。相对速度项仍带 R10——同样是「先转到同一坐标系再相加」。
(b)DH 建系回顾与记号。 要把(a)用到相邻连杆之间,先得把记号交代清楚——沿用第 2 章约定:连杆 i 连接关节 i(近端)与关节 i+1(远端),坐标系 i 建在远端(原点在关节 i+1 轴上)。老师特意警告(0:43:04):「也有 modified DH 建在近端的,咱们整本教材都按远端建,去年有同学搞混了这个问题,作业怎么做都不对。」记 pi−1,pi 为两坐标系原点在基系中的位置,ri−1,ii−1 为坐标系 i 的原点相对 i−1 的位置在 i−1 系中的表示,则
pi=pi−1+Ri−1ri−1,ii−1.
(c)连杆线速度递推。 对上式求时间导数(即把(a)的公式套到两连杆之间),记基系表示 ri−1,i=Ri−1ri−1,ii−1:
p˙i=p˙i−1+Ri−1r˙i−1,ii−1+ωi−1×Ri−1ri−1,ii−1
连杆 i 的线速度 = 前一连杆线速度 + 相对速度 + 前一连杆转动的牵连速度——又是三项合成(0:47:23)。
(d)连杆角速度递推。 从旋转合成 Ri=Ri−1Rii−1 出发,两边求导并用 R˙=SR:
S(ωi)Ri=S(ωi−1)Ri−1Rii−1+Ri−1S(ωi−1,ii−1)Rii−1
第二项用 定理 3.1.B 把 Ri−1 「拿进」算子(Ri−1S(ωi−1,ii−1)=S(Ri−1ωi−1,ii−1)Ri−1),三个算子便对同一矩阵 Ri=Ri−1Rii−1 作用,比较得
ωi=ωi−1+Ri−1ωi−1,ii−1
其中 ωi−1,ii−1 是坐标系 i 相对 i−1 的角速度在 i−1 系中的表示。「坐标系 i 的角速度 = 前一坐标系的角速度 + 相对角速度」。至于为什么角速度可以直接叠加(0:55:46),老师给的理由是:「两刚体传动相连、牵连到一起就可以叠加——大学物理讲转动合成时思考过的问题,从这里自己看出来。」
(e)单个关节的特例(组装雅可比的零件)。 相邻坐标系之间只有一个关节变量:
- 关节 i 为转动关节(变量 ϑi):ωi−1,i=ϑ˙izi−1,且 ri−1,ii−1 不变(r˙=0);
- 关节 i 为移动关节(变量 di):ωi−1,i=0,ri−1,ii−1 沿轴伸缩,r˙i−1,ii−1=d˙izi−1i−1。
其中 zi−1 是关节 i 轴向的单位向量(基系表示)。
3.1.2 的两条递推都是沿链累加的形式;下面把它按「单关节贡献」拆开——每一项正好对应 J 的一列。
线速度。 pe(q) 是 q 的函数、q 又是时间的函数,复合求导:
p˙e=i=1∑n∂qi∂pe(q)q˙i=JPq˙.
(投影仪常年显示不出这个 ∑ 符号,老师每年都要口头补,0:59:58。)关键物理解读(1:00:52):每一项表示其余关节全部锁死时,单个关节的速度对末端线速度的贡献——研究第 i 项时,其他系数全为零。于是逐项用 3.1.2(e):
- 关节 i 移动:纯平移,∂qi∂pe=zi−1;
- 关节 i 转动:i∼n 段连成刚体绕轴 zi−1 定轴转动,ω=ϑ˙izi−1,矢径 pe−pi−1,故 ∂qi∂pe=zi−1×(pe−pi−1)。
角速度。 沿链累加(末端执行器与连杆 n 之间只有固定齐次变换、无关节变量,故 ωe=ωn,1:04:05):
ωe=ωn=i=1∑nωi−1,i=i=1∑nJOiq˙i.
逐列取法与绿框公式。 把线速度与角速度两部分的结论合起来,就得到逐列的取法:
定理 3.1.C · 几何雅可比的逐列构造(绿框,1:05:52「这部分内容肯定是要考的」)
J=[J1⋯Ji⋯Jn],Ji=[JPiJOi],⎩⎨⎧关节 i 转动: JPi=zi−1×(pe−pi−1), JOi=zi−1关节 i 移动: JPi=zi−1, JOi=0
(课件用关节标志 σi 区分两类关节:转动 σi=0、移动 σi=1,上式两列取法据此二选一。)
逐列构造的物理图像(本教程绘):其余关节全部锁死、只以单位速度驱动第 i 个关节,末端产生的速度就是第 i 列。左图锁死关节 1 与 3、只驱动关节 2:i∼n 段(杆 2、杆 3)连成一个刚体绕轴 z1 定轴转动,末端速度方向垂直于矢径 pe−pi−1——这正是 zi−1×(pe−pi−1) 的几何内容。移动关节不转,故角速度行取零。
所需量全部来自正运动学(1:07:26–1:09:52,本节最重要的工程结论):
- zi−1 = 旋转矩阵 Ri−1(即 Ti−10 的左上 3×3 块)的第三列;
- pi−1 = Ti−10 第四列前三行;pe = Tn0 第四列前三行。
此外,在求 Tn0=A10⋯Ann−1 的过程中,中间的 T10,…,Tn−10 本来就要逐个算出来——「只要正运动学得到(对每个关节的),几何雅可比矩阵就都得到了」,中间任意关节的雅可比也能顺带求出(1:10:22)。
常见错误 · zi−1 不是 [0,0,1]T
「zi−1 表示在基坐标系下。它肯定不是 [0,0,1]T!只有表示在它自己的坐标系下才是 [0,0,1],表示在基坐标系下要乘很复杂的旋转矩阵」(1:06:52)。除 z0=[0,0,1]T 外,zi−1=Ri−1 第三列随位形变化。
雅可比的坐标变换。 上述 J 是相对基坐标系建立的。若要在其他坐标系 u(约束坐标系、传感器系——「传感器得到的结果都是相对它本身坐标系的」,1:11:30)中表示,由 p˙eu=Rup˙e、ωeu=Ruωe:
[p˙euωeu]=[Ru00Ru][p˙eωe]⟹Ju=[Ru00Ru]J.
「写代码开发的时候如果不考虑这个因素,结果肯定是错的」(1:12:01)。
默写点 · 合上书再写(主动回忆)
不看正文、不查速查卡,先把下面几条独立默写出来,再展开核对。写不出来,就说明这一节还没真正「拿走」。
- 重推 RRT=I⇒R˙=S(ω)R。
- 默写逐列构造的绿框公式(转动 / 移动两式)。
- zi−1 从 Ti−10 的哪一部分读?它是不是 [0,0,1]T?
核对
RRT=I 两边求导 ⇒ R˙RT+RR˙T=0,记 S=R˙RT 则 S+ST=0(反对称);两边右乘 R 得 R˙=SR。再用常模向量 p=Rp′ 求导与 p˙=ω×p 比对,认出 S=S(ω)。
转动:JPi=zi−1×(pe−pi−1)、JOi=zi−1;移动:JPi=zi−1、JOi=0。
zi−1=Ri−1(即 Ti−10 左上 3×3 块)的第三列,表示在基坐标系下。它不是 [0,0,1]T——只有 z0 才是;其余随位形变化。
- 一条主线:正交性求导 → R˙=SR(S 反对称)→ 常模向量识别出 S=S(ω) → 点速度三项合成 → 连杆两条递推(p˙i、ωi)→ 复合求导拆成单关节贡献 → 绿框逐列公式。
- 两个免费校验:J 的每一列要么是 [zi−1×(⋅)zi−1](转动),要么是 [zi−10](移动),形状不对就说明组装错了;数值上则可以用 p˙e≈(pe(q+δq)−pe(q−δq))/2δ 抽查任一列。
常见错误清单 · 自查三条
- 把 p˙i 递推里的牵连项写成 ωi×(⋅)——牵连的是前一连杆的角速度 ωi−1,不是本连杆的 ωi;
- 转动关节列忘了叉乘方向:JPi=zi−1×(pe−pi−1),矢径从关节轴上的点指向末端,写反顺序差一个负号;
- 误以为 ωe=ωn——末端执行器与连杆 n 之间没有关节变量,两者角速度必定相同;即便末端带工具偏置,那也只是固连变换。