我不知所措。
我正在尝试评估旋转矢量传感器,以确定我的设备面向哪个方向。 基本上,我需要的是一个人工地平线的数据(东方,北方,...的方向将是一个很好的额外,但不是严格需要。)
我不明白任何一个。我尝试过的任何公式都没有,或者似乎更接近。
我应该能够判断我的显示器是朝上还是朝下,以及它在哪个角度,对吧? (电话级别,30度天使等)
在这个阶段,我甚至不确定我的问题是否有意义。
快速简便的解决方案会很好,但如果有任何东西可以帮助我理解我想要做的事情,我也会很感激。
答案 0 :(得分:0)
据你所说,我推断你有一个3轴MEMS IMU(惯性测量单元),也许还有一个数字磁力计。
如果不是这种情况并且您只有一个3轴数字陀螺仪,则无法知道设备的“绝对”方向(相对于北,东,下 - NED),只有相对于程序开始运行的方向的方向。为了能够获得NED方向,需要额外的传感器,例如加速度计,磁力计或GPS(以及其他)。我将继续假设你有一个加速度计和磁力计。
由于您说您只需要“人工视野”,我认为您不需要任何姿态跟踪或过滤,您可以进行IMU测量并估计视野。如果您需要进行姿态跟踪或过滤,则此方法将为您提供一些可用于卡尔曼滤波器或互补DCM滤波器的测量模型(请参阅http://www.x-io.co.uk/open-source-imu-and-ahrs-algorithms处的报告和论文)。 / p>
以下是在MATLAB中实现的两种测量模型,它们都可以相对于NED(北,东,向下)帧进行滚动,俯仰和偏航的噪声测量。请注意,第二个功能仅在IMU大部分是平的时才起作用,您可以使用我上面提到的一种姿态跟踪系统来改善这一功能。
function rpy = tiltFromAccel(a)
%% Gets the roll and pitch wrt. gravity using the accelerometer
rpy = zeros(3,1);
rpy(1) = atan2(a(2), sqrt(a(1).^2 + a(3).^2));
rpy(2) = atan2(-a(1), sqrt(a(2).^2 + a(3).^2));
rpy(3) = 0; % Yaw is unobservable from accelerometer alone
end
function yaw = northFromMag(m)
%% Gets the yaw of North using the magnetometer
% This will be really noisy. Effects that are not modelled: hard iron,
% soft iron, non-orthogonality of the sensors, scaling and bias.
% This function assumes that the magnetometer is flat.
yaw = atan2(m(1),m(2));
end
一旦你有了滚动角和俯仰角,就可以很容易地执行一些简单的逻辑,如你所描述的那样,旋转是一次一个地完成的;如果旋转同时围绕多个轴,则更复杂。这是使用欧拉角作为态度表示的缺点,有关更多信息,请参阅https://en.wikipedia.org/wiki/Euler_angles#Proper_Euler_angles。
希望这是你正在寻找的。 p>