我试图从四元数中找到旋转矩阵。我使用了numpy和scipy中的预定义函数。我已经尝试了很长时间,甚至尝试改变数组的维数。最初我得到的是一个4D数组。类似于(3,4,17291,1)。我重新整形并减小了大小。即使在那之后,函数也是3D数组(4,17291,1)。
quat_w = dat[[" IMU2.quat_w"]]
quat_i = dat[[" IMU2.quat_i"]]
quat_j = dat[[" IMU2.quat_j"]]
quat_k = dat[[" IMU2.quat_k"]]
len_array = len(quat_w)
quat_temp = np.array([quat_w, quat_i, quat_j, quat_k])
quat = np.reshape(quat_temp, (4, len_array))
from scipy.spatial.transform import Rotation as R
rot = R.from_quat([quat_w, quat_i, quat_j, quat_k])
错误:
ValueError Traceback (most recent call last)
Input In [86], in <cell line: 2>()
1 from scipy.spatial.transform import Rotation as R
----> 2 rot = R.from_quat([quat_w, quat_i, quat_j, quat_k])
File rotation.pyx:626, in scipy.spatial.transform.rotation.Rotation.from_quat()
File rotation.pyx:515, in scipy.spatial.transform.rotation.Rotation.__init__()
ValueError: Expected `quat` to have shape (4,) or (N x 4), got (4, 17219, 1).
1条答案
按热度按时间8cdiaqws1#
Rotate.from_quat
期望得到一个四元数列表,但你没有传递它,而是传递了一个包含四个坐标列表的列表,它希望第一行有[x,y,z,w],下一行有另一个[x,y,z,w],这意味着你需要转置已有的列表。你必须这样做,当然,未经测试,因为我们没有你的数据:
我在这里假设
quat_w
和friends只是分量的向量,也就是一个一维的数字列表。