球面线性插值
Spherical Linear InterpolationSLERP常用在两个旋转之间沿最短弧、以恒定角速度平滑过渡的插值方法。
球面线性插值(Slerp)用来在两个旋转之间生成中间旋转,由 Ken Shoemake 在 1985 年的 SIGGRAPH 论文中引入计算机图形学。把单位四元数看作四维单位球面上的点,Slerp 沿连接两点的大圆弧前进:slerp(q₀,q₁;t) = [sin((1−t)Ω)/sinΩ]·q₀ + [sin(tΩ)/sinΩ]·q₁,其中 t 从 0 到 1 表示进度,Ω 是两个四元数之间的夹角。结果是绕固定轴、角速度恒定的转动。直接对四元数或欧拉角做线性插值会转速不均甚至绕远路;又因为 q 和 −q 表示同一个旋转,实现时若两者点积为负要先把一端取反,保证走短弧。机器人里常用于末端姿态轨迹插值、把低频策略输出插成高频控制指令、动捕数据重采样。
例子策略以 10 Hz 输出末端目标姿态、底层控制器以 500 Hz 运行时,可以用 SciPy 的 Slerp 类在相邻两个姿态之间插出 50 个中间姿态,让末端匀速转过去。
- 也叫
- Slerp、四元数插值、Quaternion Slerp
- 相关
- 四元数、四元数双倍覆盖、轨迹插值、特殊正交群 SO(3)、旋转测地距离、欧拉角
- 来源
- Wikipedia: Slerp
SciPy: scipy.spatial.transform.Slerp