環境
- Python 3.12.4
- pyquaternion 0.9.9
内容
回転行列からクォータニオンを生成しようとしたら、ValueError
が発生しました。
In [438]: np.array([[-0.9878369, -0.0169982, -0.1545619],
...: ...: [ 0.0140767, -0.9997013, 0.0199772],
...: ...: [-0.1548553, 0.0175585, 0.9877811]])
Out[438]:
array([[-0.9878369, -0.0169982, -0.1545619],
[ 0.0140767, -0.9997013, 0.0199772],
[-0.1548553, 0.0175585, 0.9877811]])
In [439]: from pyquaternion import Quaternion
In [440]: Quaternion(matrix=matrix)
---------------------------------------------------------------------------
ValueError: Matrix must be orthogonal, i.e. its transpose should be its inverse
回転行列は直行行列でないといけないのですが、直行行列でなかったようです。
if not np.allclose(np.dot(R, R.conj().transpose()), np.eye(3), rtol=rtol, atol=atol):
raise ValueError("Matrix must be orthogonal, i.e. its transpose should be its inverse")
トレランスのデフォルト値は以下の通りです。
-
atol
: 絶対誤差(1e-8
) -
rtol
: 絶対誤差(1e-5
)
以下の通りatol
を指定することで、クォータニオンを生成することができました。
In [442]: Quaternion(matrix=matrix, atol=1e-7)
Out[442]: Quaternion(0.007792803681116881, -0.07759405485330212, 0.009413009893299702, 0.9969101388791268)