RBF 中的旋转表示
解释为什么旋转不适合直接作为欧氏向量插值,并整理 rotation vector、log map 与 exp map 在 RBF 中的用法。
RBF 本身处理的是向量空间里的距离和线性组合,所以平移、位移、权重、PCA 系数、参数向量等都很自然。但旋转不是普通向量,它生活在旋转群上,因此不能随便把旋转表示直接塞进 RBF。
工程中常见的结论是:可以用 quaternion 或旋转矩阵来存储和组合旋转,但在 RBF 里真正作为输入或输出参与插值的,通常应当是 相对于 reference rotation 的 rotation vector。
为什么不直接插值常见旋转表示
不同旋转表示各有问题:
- Euler angle 有旋转顺序、角度跳变、万向节锁问题。
- 旋转矩阵展平成 9 维后做线性组合,结果通常不再是正交矩阵。
- Quaternion 在单位球面上,而且 与 表示同一个旋转,直接用欧氏距离或线性混合会有二义性。
RBF 需要的是可以计算距离、可以线性组合、局部看起来像 的表示。因此更合适的做法是先把旋转映射到李代数,也就是转成 rotation vector。
rotation vector
rotation vector 是一个三维向量
其中 是单位旋转轴, 是旋转角度。它的方向表示旋转轴,长度表示旋转角:
也可以把它理解成旋转矩阵的 log map:
其中
这里的 不是对矩阵逐元素取普通对数,而是 到其李代数的映射。反过来,从 rotation vector 回到旋转矩阵,用 exp map:
所以在 RBF 中可以采用这样的流程:
rotation -> rotation vector -> RBF -> rotation vector -> rotation使用相对于 reference rotation 的 delta
在一般场景里,输入特征优先使用局部坐标系下、相对于 reference rotation 的 delta rotation,而不是直接使用全局旋转。
如果当前局部旋转是 ,reference rotation 是 ,那么
然后把它转成 rotation vector:
如果 reference rotation 就是 identity,那么
这时 local rotation 和 delta local rotation 在数值上等价。但概念上仍然建议保留 “delta from reference” 的写法,因为这样更换参考坐标系或初始状态时不容易混乱。
多个旋转特征如何拼接
如果一个输出由多个旋转特征共同驱动,可以分别计算它们的 delta rotation vector:
然后直接拼成一个 6 维输入向量:
RBF 的输入空间就是这个 6 维欧氏空间。两个样本之间的距离可以写成
也可以根据不同 feature block 的重要性使用加权距离:
这比直接把世界空间矩阵或 Euler 角拼在一起更稳,也更接近 “当前旋转状态离样本旋转状态有多远” 这个语义。
exp map 如何从向量回到矩阵
给定 rotation vector
先构造反对称矩阵
令
则
工程中通常用 Rodrigues 公式计算:
当 很小时,要用小角度近似或库函数的稳定实现,避免除以很小的数。
log map 如何从矩阵得到向量
从旋转矩阵 到 rotation vector,先由 trace 得到旋转角:
然后
这里假设矩阵下标从 开始。实际实现中同样要处理 接近 或接近 的情况。
quaternion 与 rotation vector 不是二选一
说 RBF 中插值 rotation vector,并不表示工程里完全不用 quaternion。更合理的分工是:
- quaternion 适合存储旋转、组合旋转、避免矩阵正交漂移、做 slerp。
- rotation vector 适合作为 RBF / ML / PCA / regression 的欧氏特征。
如果输入原本是 quaternion,可以先计算相对于 reference rotation 的 delta quaternion:
做 hemisphere 修正后,再映射成 rotation vector:
RBF 输出的 correction 也可以是 rotation vector:
最后再转回 quaternion 或旋转矩阵:
所以更完整的流程是
q_current
-> q_delta
-> rotation vector
-> RBF
-> correction rotation vector
-> q_correction实用建议
对于旋转驱动的 correction problem,第一版通常可以优先使用 normalized RBF blend,因为它稳定、直观、调参成本低。对于必须命中样本输出的 correction vector,可以考虑 exact RBF,但最好加入 regularization、输出 clamp 和 fallback。
旋转特征本身还要注意:
- 使用 delta rotation,不要直接使用全局旋转。
- 多个旋转输入可以拼接 rotation vector,但最好给不同 feature block 设置合理尺度。
- RBF 的样本应覆盖主要输入区域,远离样本时不要期待它自动给出可靠外推。
- rotation vector 在 reference rotation 附近非常自然,但大角度尤其接近 时要小心 log map 的不连续性。
- quaternion 作为存储格式没有问题,但直接对 quaternion 做 RBF 距离和线性混合通常不是好主意。
简洁地说:RBF 需要的是一个局部欧氏特征空间,而 rotation vector 正是在 reference rotation 附近把旋转问题拉回 的工具。