← 返回首页

水平尺里的数学与物理

发布时间: 2026-01-19 11:44(北京时间)

摘要: 作者从使用水平尺的日常体验切入,探讨了数显倾角功能的实现原理,涉及加速度计、IMU传感器和姿态解算的数学与物理基础。文章逐步解释了从三轴加速度计到九轴IMU的演进,以克服测量缺陷,并对比了欧拉角和四元数在姿态表达中的优劣,强调后者在避免万向节死锁和计算稳定性方面的优势。整体语调冷静、技术导向,带有反思和知识分享的意图。

标签: 传感器技术, 姿态解算, 数学物理, 技术反思, 冷静分析, 知识分享, 日常观察

字数: 1326

原文链接: /7402396589/QnOKOhC0U

差生文具多。买了一把水平尺,还带倾角数显。试用了一下,我体感水平的时候数显是-2.25度,于是照着数显调到0度水平。但不知道为何,仅看数显0度我是不太相信的,我还是觉得这样是有点歪,但看到气泡也是居中我就立马信了。

水平尺的数显倾角如何才能做到的呢,最可靠的办法就是获得加速度的矢量。因为水平尺在静止状态下合外力产生的加速度为零,但重力加速度方向是垂直于水平面,所以可以通过测量重力加速度的方向来得到水平尺于水平面的夹角(严格来说,测量的是“比力”)。

我们很难直接测量加速度的“方向”,但矢量是可以分解的,所以可以测量XYZ三轴下的加速度分量,从而计算出水平尺的“姿态”。而能做这件事的传感器叫做“三轴加速度计”。

得益于 MEMS 技术,加速度计可以把体积做得非常小型,封装在一颗小芯片里面。世界上第一款单芯片集成的 MEMS 加速度计一般认为是1991年ADI推出的ADXL50,而 MEMS 技术得到广泛应用离不开汽车安全气囊的发展。感应撞击的传感器换成 MEMS 加速度计后,具备了体积小、反应快、成本低等显著优势。

虽然只依赖三轴加速度计就可以完成水平尺数显角度的功能,但我还是想再拓展一下。一般这类单芯片传感器被称作IMU,除了三轴加速度计还会有三轴陀螺仪和三轴磁力计,合起来一般就称作9轴传感器。

这是因为三轴加速度计有一些“缺陷”,它无法感知绕重力轴旋转的动作(偏航),而且在运动状态下无法分辨重力加速度和惯性加速度。因此,如果想要获得更加稳定、更全的姿态监测,9轴IMU就成了标配。

三轴陀螺仪测量的是角速度,动态响应很好地弥补了加速度计在振动或移动时的数据波动。而三轴磁力计测量地磁场,相当于一个电子指南针,能够锁定偏航角。

image

image

有这么多类型的传感器集成在一颗芯片中,那监测“姿态”应该是比较轻松的事情。那要如何在数学层面表达物体姿态呢?最直观的是欧拉角,把姿态分解成Roll、Pitch、Yaw三个维度,如图1所示,似乎只要给出Roll、Pitch、Yaw,大家都能想象出飞机的姿态。但实际上用欧拉角表达姿态可能会遇到一个万向节死锁(Gimbal Lock)的问题,如图2所示,当某个轴旋转到 90 度时,会丢失一个自由度。

为了规避万向节死锁的问题,以及提升姿态解算的效率,很多底层算法会在高维空间中使用四元数q=(w,x,y,z)进行运算。虽然四元数并不直观,但能够很平滑地描述空间中任意角度的旋转。

如果我这个水平尺底层使用的是欧拉角,那么在做垂直测量的时候,因为欧拉角的计算涉及tan的计算,这时候分母就可能无限接近于0,如果这时候再扭动尺子,可能会出现数据发疯似的乱跳动。不过还好,我试了一下,并没有发疯,所以底层的计算应该还是基于四元数的。

如果这把尺子求解出来的姿态可以通过无线传出,那么我就可以在屏幕上渲染一把3D的水平尺,把姿态实时展示出来。以前为了让算法的同事更好理解姿态,我就这么做过,把IMU安装在飞机模型上,用 Processing 写了个实时展示姿态的界面。

关于欧拉角与四元数的学问还蛮深的,我只是简单讲讲,就不继续展开了。感兴趣的朋友可以去了解一下w