关于Drake库QuaternionToHopfCoordinate公式推导及输入假设的咨询
背景与正向转换回顾
Hopf纤维化是将3维球面(单位四元数集合$S3$)映射到2维球面($S2$)的纤维丛结构,每个纤维是1维球面($S^1$)。Drake用$(\theta, \phi, \psi)$三个参数表示Hopf坐标:
- $(\theta, \phi)$对应基空间$S^2$的球坐标
- $\psi$对应纤维方向$S^1$的角度
已知的正向转换(HopfCoordinateToQuaternion)公式为:
w = cos(ψ/2) * cos(θ/2) x = cos(ψ/2) * sin(θ/2) * cos(φ) y = cos(ψ/2) * sin(θ/2) * sin(φ) z = sin(ψ/2) * cos(θ/2)
注意:不同文献的参数定义顺序可能略有差异,Drake的实现对应上述形式。
逆向转换(QuaternionToHopfCoordinate)的推导
从单位四元数$q=(w,x,y,z)$反解Hopf坐标的过程如下:
求解θ:
对正向公式的平方项求和:
$w^2 + z^2 = \cos2(\psi/2)\cos2(\theta/2) + \sin2(\psi/2)\cos2(\theta/2) = \cos^2(\theta/2)$
$x^2 + y^2 = \cos2(\psi/2)\sin2(\theta/2)$
两式开方后相除得$\tan(\theta/2) = \sqrt{x^2 + y^2} / \sqrt{w^2 + z^2}$,因此:
$\theta = 2\arctan\left( \frac{\sqrt{x^2 + y2}}{\sqrt{w2 + z^2}} \right)$求解φ:
由x和y的表达式可知$\tan(\phi) = y/x$,为了正确处理所有象限,使用反正切函数的双参数形式:
$\phi = \arctan2(y, x)$求解ψ:
观察w和z的表达式,两式相除得$\tan(\psi/2) = z/w$,同样用双参数反正切处理象限:
$\psi = 2\arctan2(z, w)$
Drake中的QuaternionToHopfCoordinate实现完全基于上述推导逻辑。
输入假设
- 单位四元数:输入必须是单位长度的四元数(满足$w^2 + x^2 + y^2 + z^2 = 1$),否则推导中的平方和关系不成立,转换结果会出现偏差。
- 奇异点处理:当$x=y=0$时,$\theta=0$,此时φ的取值不影响正向转换结果,Drake会将φ设为固定值;当$w=z=0$时,$\theta=\pi$,同样φ无意义,实现会做特殊处理避免计算错误。
q与-q的等价性问题解释
单位四元数中,$q$和$-q$表示同一个旋转,这是四元数的固有性质。在Hopf坐标转换中:
- 若$q=(w,x,y,z)$对应的Hopf坐标是$(\theta, \phi, \psi)$,则$-q=(-w,-x,-y,-z)$对应的Hopf坐标为$(\theta, \phi, \psi+\pi)$
- 因此执行
QuaternionToHopfCoordinate(HopfCoordinateToQuaternion(q))时,得到的四元数可能是$q$或$-q$——这是因为Hopf纤维化的每个纤维对应两个四元数,逆向转换返回的是纤维中的一个代表元,而非原输入的精确值。 - 你观察到
HopfCoordinateToQuaternion(-q)返回$-q$,正是因为$-q$对应的Hopf坐标仅ψ增加π,正向转换后会准确还原为$-q$。
内容的提问来源于stack exchange,提问作者odunkl

