math - 对齐 IMU 方向,然后获得相对旋转

标签 math orientation sensors quaternions

我在两个物体上使用两个相同类型的 IMU(BHI160,即方向是相对于北方并与北方对齐,IMU 的局部 y 轴指向北方)在两个物体上,比如说笔,增加了难度如果我将两个物体平行放置,两个 IMU 的 z 轴都指向上方,但是一个 IMU 相对于另一个围绕 z 轴旋转 180°。

现在,如果我正确理解这里的数学,我从 IMU 接收的四元数数据是相对于北方向的半角旋转,因此 q * north_dir * q_inv = IMU_y_axis (为了计算,north_dirIMU_y_axis 是全局空间中的 3D 向量,或纯四元数)。

由于 IMU 的旋转,我假设当两支笔都指向同一方向时,我应该能够将第二支笔的方向计算为 q_2 = q_rot_z * q_1 , 其中 q_rot_z等于绕 z 轴旋转 90°——根据直觉,如果我将两支笔都指向北方,我将获得笔 2 的 y 轴的全局方向(即笔 1 的 y 轴绕 z 轴旋转180°) 通过计算 q_rot_z * north_dir * q_rot_z_inv
因此,如果我想知道 Nib 的相对旋转(比如说,我需要从第一支笔的 Nib 到第二支 Nib 的旋转),我需要计算 q_r = q_2 * q_rot_z_inv * q_1_inv 是否正确?为了通过计算 q_r * q_1 从提示 1 到提示 2 ?或者在这种情况下围绕 z 轴的“先前”旋转是否无关紧要,我只需要计算 q_r = q_2 * q_1_inv照常?

编辑:
这基本上是 this question 的扩展,但我想知道相同的答案是否也适用于我的情况,或者在我的情况下是否也需要包括已知的相对 IMU 旋转

最佳答案

让我们一步一步来。您有一个全局坐标系 G , 与北方向对齐。它如何对齐或是否完全对齐并不重要。

然后我们必须使用具有各自坐标系的 IMU I1I2 .坐标系作为从全局系统到局部系统的旋转给出。在下文中,我们将使用符号 R[G->I1]为了那个原因。这表示来自 G 的旋转至 I1 .如果你对 G 中的任何向量进行变换通过此旋转,您将在 I1 中获得相同的向量以坐标系表示G .让我们表示向量的变换 v带变换 T来自 T ° v .下图说明了这一点:

Transform

在这个图中,我在变换中添加了一个翻译(四元数当然不能代表)。这只是为了更清楚地说明这一点。所以,我们有一个向量 v .相同的向量可以位于任一坐标系 GI .和变换后的向量 R[G->I] ° v代表vIG的坐标系中.请确保这实际上是您从 IMU 获得的旋转。您也有可能获得逆变换(这将是系统变换 View ,而我们使用模型变换 View )。这在以下推导中变化不大。因此,我将坚持第一个假设。如果您需要相反,只需相应地调整公式。

如您所知,操作 R ° v可以通过转动 v 来完成变成纯四元数,计算 R * v * conjugate(R) ,并再次将其转换为向量(或在整个过程中使用纯四元数)。

现在笔开始发挥作用。笔有一个固有的坐标系,您可以任意定义。从您的描述来看,您似乎想将其定义为笔的局部 y 轴指向 Nib 。因此,我们每支笔都有一个额外的坐标系,并具有相应的旋转R[I1->P1]R[I2->P2] .我们可以连接旋转以找到全局方向(* 是四元数乘法):

R[G->P1] = R[G->I1] * R[I1->P1]
R[G->P2] = R[G->I2] * R[I2->P2]

根据您定义笔的局部坐标系的方式,我们知道 R[I1->P1]是身份(局部坐标系与 IMU 对齐)和 R[I2->P2]是绕 z 轴旋转 180°。所以,这简化为:
R[G->P1] = R[G->I1]
R[G->P2] = R[G->I2] * RotateZ(180°)

请注意,z 旋转是在 IMU 的局部坐标系中执行的(在右侧相乘)。我不知道你为什么认为它应该是 90°。这真的是一个180°的旋转。

如果要找到提示之间的相对旋转,首先需要定义旋转应该在哪个坐标系中表示。假设我们想在 P1 的坐标系中表达旋转。 .那么,你要找的是一个旋转R[P1->P2] , 使得
R[G->P1] * R[P1->P2] = R[G->P2]

这解决了
R[P1->P2] = conjugate(R[G->P1]) * R[G->P2]

如果你插入上面的定义,你会得到:
R[P1->P2] = conjugate(R[G->I1]) * R[G->I2] * RotateZ(180°)

就是这样。

您很可能想要一些略有不同的东西。这就是我如此详细解释的原因,因此您将能够相应地修改计算。

关于math - 对齐 IMU 方向,然后获得相对旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45917547/

相关文章:

查找集合中所有连续子串之和的算法

ios - 旋转变化不再触发

android - 共享首选项和旋转

swift - TI SensorTag 2 CC2650 服务计算(IR 温度 - MPU9250)

javascript - 转换为 css 的设备方向数据在使用真实设备时表现异常

python - 生成加权中位数的随机整数

algorithm - Pagerank 与 SVD

Mathematica 不计算具有实系数的复数的绝对值

带有 configChanges 的 Android DayNight 主题

android - Android KitKat 中的计步器