0

对于一个项目,我想用 C++ 做一个非常简单的毕达哥拉斯计算。一个物体配备了一个 IMU 传感器,该传感器提供四元数旋转或欧拉角。我想知道的是对象下方三角形的对边。:

在此处输入图像描述


我想知道 X 轴和 Y 轴的三角形的这些边(黑色箭头):

在此处输入图像描述


这非常简单,除了对象可以旋转。当物体旋转时,我仍然想在世界空间中使用 X 和 Y 轴(黑色箭头),但是当偏航时,IMU 的欧拉角为我提供了局部空间中的俯仰和滚动(红色箭头):

在此处输入图像描述


在偏航时我仍然可以通过什么方式获得世界空间角度(黑色箭头),以便能够计算我的简单毕达哥拉斯计算?如果我不能得到它们,有没有办法使用四元数计算我想要的对边?

4

1 回答 1

2

我们可以通过按以下顺序考虑欧拉角来进行计算 -


  1. 沥青

首先,当您更改roll传感器时,传感器“射线”会扫出一个以 角度倾斜于地平线的平面pitch。我们需要首先计算 (i) 平面与地面之间的交线,以及 (ii) 地面上传感器正下方的点之间的最近距离。这是由 给出的d = h * tan(pitch)

在此处输入图像描述


接下来我们需要做另一个三角步骤。和之前一样roll扫过飞机。沿垂直于连接 (i) 和 (ii) 的线的轴的偏移距离由下式给出f = h / cos(pitch) * tan(roll)。这使得地面上的交点为(d, f)

在此处输入图像描述


  1. 偏航

之前,我们考虑了一个 0 的帧yaw。我们现在需要将这个交点绕 Z 轴旋转yaw. 因此,最终的交点由 给出(x, y) = (d * cos(yaw) - f * sin(yaw), d * sin(yaw) + f * cos(yaw))。你可以计算出你想要的“空间角度” atan2(y, x)

在此处输入图像描述

于 2017-07-13T15:11:22.420 回答