Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

4.3.1 路径基元

关节空间的算法回答的是「关节怎么动」;从这一节开始,问题换成操作空间的问法:「末端要沿一条给定的几何曲线走」。几何曲线得先能被解析地写出来——这类基本曲线就是路径基元。本节先把任意路径参数化(参数 σ\sigma 与弧长 ss),再引入随曲线走的三个单位向量(切向 / 法向 / 副法向),最后落实到两种最常用的基元:直线与圆弧。录播 1:57:28–2:14:03。

4.3.0 为什么要在操作空间里规划

关节空间的轨迹规划算法生成 q(t)q(t) 的时间序列,把机械手从初始位形带到最终位形(沿途经过一系列中间位形)。但正运动学是非线性的,末端执行器的运动不易预测(2:00:00)。所以,如果希望末端遵循在操作空间中用几何方法指定的路径,就必须在同一空间中规划:

操作空间轨迹的两种生成方式(教材 §4.3)
  1. 内插一个规定的路径点序列:不需要精确遵循路径时,只需指定 NN 个点 xkx_k(xex_e 是六维量:3 位置 + 3 姿态),点与点之间用光滑内插函数过渡(把 4.2.2 的方法逐分量套用);
  2. 按时间生成分析运动基元:需要精确遵循路径时,则要把路径解析地表示出来,并分别定义运动基元(表达路径的几何特性)与时间基元(表达路径自身的时间律)。

落地时还有两个工程要点(2:00:00、教材 §4.3):

  • 采样率上限:操作空间的轨迹生成与逆运动学计算叠加在一起,运算量非常大,因此要给生成序列的最大采样率设一个上限——采样率不能太大,否则「太大的话计算就计算不过来了」;
  • 线性微小内插:实际做法是:规划时采样率不高,但把它输入底层伺服控制系统时先做一次线性微小内插——在相邻两点之间再插一个点。这样提高了参考输入的更新频率,「对于增强系统的动态性能是有关键的」。

4.3.1 路径的参数表示与弧长

定义 4.3.1 · 路径的参数表示与弧长参数化

令 pp 为 (3×1)(3\times1) 向量,f(σ)f(\sigma) 为定义在区间 [σi,σf][\sigma_i,\sigma_f] 上的连续向量函数。考虑方程

p=f(σ).(4.31)p=f(\sigma). \tag{4.31}

随着 σ\sigma 在区间上变化,pp 的取值序列称为空间路径,σ\sigma 称为参数。σ\sigma 增大时,pp 沿给定方向在路径上移动,该方向称为由 (4.31) 导出的路径方向。若终点与起点重合,即 p(σf)=p(σi)p(\sigma_f)=p(\sigma_i),路径是闭的;否则是开的。

弧长参数化:令 plp_l 为方向固定的开路径 Γ\Gamma 上的一点,ss 为一般点 pp 的弧长。若 pp 在 plp_l 之后,ss 为 Γ\Gamma 上连接 pp 与 plp_l 的弧的长度;若 pp 在 plp_l 之前,ss 取相反值。plp_l 称为弧长的起点(s=0s=0)。于是每个 ss 都对应着唯一的路径点,弧长也就可以充当路径的参数:

p=f(s).(4.32)p=f(s). \tag{4.32}

一般路径用参数 σ\sigma 表示即可;弧长 ss 则是更「自然」的参数——它把参数增量与几何长度绑在一起,后面规划时间律 s(t)s(t) 时正要以它为落脚点。

定理 4.3.A · Frenet 标架:三个单位向量与弧长的关系

除特殊情形外,路径上相应于弧长 ss 的点 pp 处,可以定义 3 个表征路径的单位向量:它们所在的直线只由路径几何决定,而向量的正负指向还取决于路径方向:

  • 切线单位向量 tt:指向沿 ss 导出的路径方向;
  • 法线单位向量 nn:沿过 pp 且与 tt 垂直的直线,位于密切平面(p′→pp'\to p 时包含 tt 与 p′p' 的平面所趋于的极限平面)内;它的正负指向由「使路径 Γ\Gamma 位于 nn 的同一侧」确定;
  • 副法线单位向量 bb:与前两者一起使 (t,n,b)(t,n,b) 构成右手系。

三者与路径表达式之间有如下简单关系:

t=dpds,n=d2pds2∥d2pds2∥,b=t×n.(4.33)t=\frac{\mathrm dp}{\mathrm ds},\qquad n=\frac{\dfrac{\mathrm d^2p}{\mathrm ds^2}}{\left\|\dfrac{\mathrm d^2p}{\mathrm ds^2}\right\|},\qquad b=t\times n. \tag{4.33}

证明的两个关键落点(老师课堂口述,2:06:38–2:08:08)

① t=dp/dst=\mathrm dp/\mathrm ds 为什么是切向单位向量。 从物理直觉迁移过来:速度方向的单位向量就是「速度除以速度的模长」,

p˙∥p˙∥=dpdss˙∥dpds∥ s˙=dp/ds∥dp/ds∥,\frac{\dot p}{\|\dot p\|}=\frac{\dfrac{\mathrm dp}{\mathrm ds}\dot s}{\left\|\dfrac{\mathrm dp}{\mathrm ds}\right\|\,\dot s}=\frac{\mathrm dp/\mathrm ds}{\|\mathrm dp/\mathrm ds\|},

而 ds/dt=s˙\mathrm ds/\mathrm dt=\dot s 只是一个标量,可以约掉——于是 dp/ds\mathrm dp/\mathrm ds 本身就是单位向量(弧长参数化下切向量自动归一),方向也与速度一致。

② nn 为什么是 d2p/ds2\mathrm d^2p/\mathrm ds^2 的方向。 tt 是单位向量,故 tTt=1t^{\mathrm T}t=1;两边对 ss 求导,得 tTdtds=0t^{\mathrm T}\dfrac{\mathrm dt}{\mathrm ds}=0——这说明 dtds=d2pds2\dfrac{\mathrm dt}{\mathrm ds}=\dfrac{\mathrm d^2p}{\mathrm ds^2} 与 tt 正交。于是取它的方向、再除以自身的模长,就得到单位向量 nn。几何含义:nn 指向曲线凹侧,也就是向心加速度的方向(2:14:00)。

□

4.3.1.1 直线路径

定义 4.3.2 · 直线路径

考虑连接 plp_l 与 pfp_f 的线段,路径的参数表达式为

p(s)=pl+s∥pf−pl∥ (pf−pl).(4.34)p(s)=p_l+\frac{s}{\|p_f-p_l\|}\,(p_f-p_l). \tag{4.34}

注意 p(0)=plp(0)=p_l、p(∥pf−pl∥)=pfp(\|p_f-p_l\|)=p_f,可见由 (4.34) 导出的路径方向正是从 plp_l 指向 pfp_f。对 ss 求导:

dpds=1∥pf−pl∥(pf−pl),(4.35)\frac{\mathrm dp}{\mathrm ds}=\frac{1}{\|p_f-p_l\|}(p_f-p_l), \tag{4.35}

d2pds2=0.(4.36)\frac{\mathrm d^2p}{\mathrm ds^2}=\mathbf 0. \tag{4.36}

退化提示:二阶导数为零,法线方向便无从定义——直线路径上不能唯一地定义坐标系 (t,n,b)(t,n,b)(2:10:01)。这不是推导出了错,而是直线作为路径基元的固有性质。

4.3.1.2 圆形路径

圆比直线复杂,但有一条捷径:「如果在经过它自己圆心、然后有一个面跟圆弧面重合的坐标系里表示,这个角是非常简单的」——这用的其实就是初中平面几何的知识(2:10:32)。

定义 4.3.3 · 圆形路径

参数:圆轴的单位向量 rr、圆轴上一点的位置向量 dd、圆上一点的位置向量 plp_l(图 4.12)。令

δ=pl−d.\delta=p_l-d .

为使 plp_l 不在轴上(即圆不退化成一点),必有

∣δTr∣<∥δ∥.|\delta^{\mathrm T}r|&lt;\| \delta\| .

在此情形下,圆心的位置向量为

c=d+(δTr) r.(4.37)c=d+(\delta^{\mathrm T}r)\,r . \tag{4.37}

随体坐标系 o′ ⁣− ⁣x′y′z′o&#x27;\!-\!x&#x27;y&#x27;z&#x27;:原点 o′o&#x27; 与圆心重合;轴 z′z&#x27; 沿 rr 方向;轴 x′x&#x27; 沿向量 pl−cp_l-c 的方向;轴 y′y&#x27; 按右手系选取。在参考坐标系中,圆的参数表达式为

p′(s)=[ρcos⁡(s/ρ)ρsin⁡(s/ρ)0],ρ=∥pl−c∥(4.38)p&#x27;(s)=\begin{bmatrix}\rho\cos(s/\rho)\\ \rho\sin(s/\rho)\\ 0\end{bmatrix},\qquad \rho=\|p_l-c\| \tag{4.38}

(已假定 plp_l 为弧长的起点)。换到一般参考坐标系 o ⁣− ⁣xyzo\!-\!xyz:

p(s)=c+R p′(s),R=[ x′  y′  z′ ](4.39)p(s)=c+R\,p&#x27;(s),\qquad R=[\,x&#x27;\ \ y&#x27;\ \ z&#x27;\,] \tag{4.39}

其中 RR 为坐标系 o′ ⁣− ⁣x′y′z′o&#x27;\!-\!x&#x27;y&#x27;z&#x27; 相对 o ⁣− ⁣xyzo\!-\!xyz 的旋转矩阵(其列为各轴单位向量在 o ⁣− ⁣xyzo\!-\!xyz 中的表示)。对 ss 求导:

dpds=R[−sin⁡(s/ρ)  cos⁡(s/ρ)0],d2pds2=R[−cos⁡(s/ρ)/ρ−sin⁡(s/ρ)/ρ0].(4.40,4.41)\frac{\mathrm dp}{\mathrm ds}=R\begin{bmatrix}-\sin(s/\rho)\\ \ \ \cos(s/\rho)\\ 0\end{bmatrix},\qquad \frac{\mathrm d^2p}{\mathrm ds^2}=R\begin{bmatrix}-\cos(s/\rho)/\rho\\ -\sin(s/\rho)/\rho\\ 0\end{bmatrix}. \tag{4.40,4.41}

Frenet 标架与圆弧的三要素 左图:一条空间曲线,切向 t 沿路径方向、法向 n 指向凹侧(向心加速度方向)、副法向 b = t × n 构成右手系。右图:圆弧由轴向量 r、轴上点 d、圆上点 p_l 定义,δ = p_l − d,圆心 c = d + (δ^T r)r,半径 ρ = |p_l − c|;随体坐标系的 z′ 沿 r、x′ 沿 p_l − c。 Frenet 标架(任意曲线) t=dp/dst=\mathrm dp/\mathrm ds nn(指向凹侧 = 向心加速度方向) b=t×nb=t\times n (t,n,b)(t,n,b) 右手系:随曲线走的局部坐标架 直线退化:d2p/ds2=0\mathrm d^2p/\mathrm ds^2=0 ⇒ nn 无法定义 圆弧三要素与随体坐标系 x′x&#x27; z′z&#x27;(沿 rr) plp_l dd(轴上点) 圆心 cc δ=pl−d\delta=p_l-d ρ=∥pl−c∥\rho=\|p_l-c\| c=d+(δTr) rc=d+(\delta^{\mathrm T}r)\,r, ∣δTr∣<∥δ∥\ |\delta^{\mathrm T}r|&lt;\| \delta\|
Frenet 标架与圆弧三要素(本教程绘):左图的 t,n,bt,n,b 是后面所有操作空间轨迹的局部坐标架;右图的 c=d+(δTr)rc=d+(\delta^{\mathrm T}r)r 把「圆心在哪」变成一次投影——圆心就是轴上点 dd 沿轴方向「挪」到与 plp_l 垂直的位置。

考点 · 老师原话(录播时间点)

圆弧要在随体坐标系里写。 「我们表示这个圆弧,如果在经过它自己圆心、然后有一个面跟圆弧面重合的坐标系里表示这个角是非常简单的——这是咱们初中平面几何就知道的知识」(2:10:32)。考试/作业里推圆弧轨迹,第一步就是把随体坐标系建出来。

法向向量就是向心加速度方向。 「二阶对 ss 求二阶导数,就是法向单位向量,或者是向心加速度的方向,它一定是沿着半径的一条线」(2:13:56)。

直线是退化情形。 「因为法线方向的向量是零,证明这个直线它是没有向心加速度的方向……这种情况下就不能唯一地来定义这个坐标系」(2:10:01)。

采样率与线性内插。 「实际应用过程中有一个最大采样率的限制……输入给底层伺服控制系统的时候,我们可以进行一个微小的线性内插,相当于提高了底层控制参考输入的更新频率,这对于增强系统的动态性能是有关键的」(2:00:02)。

默写点 · 合上书再写(主动回忆)

先不翻正文与速查表,凭记忆写出下面几条,再展开核对。写不出来,就说明这一节还没真正「拿走」。

  1. 写出 Frenet 标架三个单位向量与 ss 的关系 (4.33),并说明 nn 的几何含义。
  2. 写出直线路径的 p(s)p(s) 与 d2p/ds2d^2p/ds^2;直线为什么不能唯一定义 (t,n,b)(t,n,b)?
  3. 写出圆心公式 c=d+(δTr)rc=d+(\delta^{\mathrm T}r)r 与退化条件。
核对

t=dp/dst=\mathrm dp/\mathrm ds;n=d2p/ds2∥d2p/ds2∥n=\dfrac{\mathrm d^2p/\mathrm ds^2}{\|\mathrm d^2p/\mathrm ds^2\|};b=t×nb=t\times n。nn 指向曲线凹侧,即向心加速度方向(tTt=1t^{\mathrm T}t=1 求导 ⇒ d2p/ds2⊥t\mathrm d^2p/\mathrm ds^2\perp t)。

p(s)=pl+s∥pf−pl∥(pf−pl)p(s)=p_l+\dfrac{s}{\|p_f-p_l\|}(p_f-p_l);d2pds2=0\dfrac{\mathrm d^2p}{\mathrm ds^2}=\mathbf 0。二阶导为零 ⇒ 法线方向无定义 ⇒ 坐标系 (t,n,b)(t,n,b) 不唯一。

c=d+(δTr)rc=d+(\delta^{\mathrm T}r)r,其中 δ=pl−d\delta=p_l-d;退化条件 ∣δTr∣<∥δ∥|\delta^{\mathrm T}r|&lt;\| \delta\|(否则 plp_l 落在轴上,圆退化为一点)。

4.3.1 小结与常见错误

  • 一条主线:操作空间规划要先有解析路径(操作空间轨迹的两种生成方式 的两条生成方式)⇒ 路径参数化(σ\sigma 或弧长 ss)⇒ Frenet 标架 (t,n,b)(t,n,b) ⇒ 两种最常用基元:直线(退化、无 nn)与圆弧(随体坐标系 + 圆心投影公式)。
  • 一个技巧:圆弧的圆心 = 轴上点沿轴方向投影到过 plp_l 的垂面——c=d+(δTr)rc=d+(\delta^{\mathrm T}r)r。
  • 一句话:「一般路径用参数 σ\sigma 就够了;一旦要规划时间律,就换到弧长 ss——因为 ss 的增量就是走过的几何长度。」
常见错误清单 · 自查三条
  1. 把参数 σ\sigma 当弧长:一般参数下 ∥dp/dσ∥≠1\|\mathrm dp/\mathrm d\sigma\|\ne1,tt 必须再归一化;只有弧长参数化才有 t=dp/dst=\mathrm dp/\mathrm ds。
  2. 忘了退化条件:算圆弧前先检查 ∣δTr∣<∥δ∥|\delta^{\mathrm T}r|&lt;\| \delta\|,否则圆心公式给出的「圆」是一个点。
  3. RR 的列写错:R=[x′ y′ z′]R=[x&#x27;\ y&#x27;\ z&#x27;] 是随体坐标系三轴在基系中的表示,不是把基系轴写进随体系——2.2.2 的上下标约定在这里最容易翻车。