最近在整理“地磁场仿真与导航方案设计”这个项目,正好把一年来踩过的坑和验证过的思路重新过了一遍。地磁场导航不是什么新鲜概念,本质就是利用地球磁场本身在空间中的分布特征,把它当成一张天然指纹地图,载体一边运动一边测量磁场强度或方向,然后把测量值跟这张“地图”做匹配,从而估计出自己大概在哪、航向是多少。很多做无人车、物流 AGV、室内机器人、无人机和水下无人潜器的人,都会在某个阶段碰到这个问题:GPS 在室内或水下不可用,视觉在昏暗环境失效,最后发现地磁导航是个不错的互补手段。
但直接上一套实机系统去验证地磁导航,成本并不低。磁力计要选型、要标定,载体的电动机和铁质结构会对观测产生不可控干扰,室外跑一圈还要找一片磁场特征足够丰富的区域。这个项目选择把“地磁场仿真”放在第一步,就是希望先把算法逻辑、参数边界和性能上限搞清楚,再决定实机怎么做。下面我会按从仿真到实机的顺序,把整个方案的组织方式、关键参数和现场教训都拆开讲。
1. 方案设计思路:地磁场仿真为什么值得做
1.1 地磁导航到底解决什么问题
地磁导航解决的核心问题,是在缺少外部基站或卫星信号的环境里,提供一个无源、稳定、不依赖光照的定位参考。GPS 在开阔地带很好用,可一旦进入隧道、地下车库、密集楼宇、矿洞,或者到了水下,卫星信号会快速衰减,这时候想要知道自己在哪里,通常只能靠惯性导航推算。惯性导航短时间精度不错,但误差会随着时间累积,十分钟过去可能偏移几十米甚至上百米。地磁导航的价值就在于,它可以提供一种绝对位置约束,把惯导发散的趋势拉回来。
地磁导航并不是要替代惯导,而是跟惯导配合。惯导负责短时间内连续递推,地磁匹配负责周期性“划掉”累积误差。实际方案里,我会让惯导输出一个初始位置和不确定范围,地磁匹配在这个范围内搜索最相似的点,得到一个修正后的位置估计,再把这个估计反馈给组合滤波器。这个思路跟图像匹配导航、地形匹配导航很像,只是把传感器从相机或高度计换成了磁力计。
这里有个很关键的设计判断:不要试图用单点磁场值反算经纬度。地磁场在空间上是平滑变化的,同一个总强度数值可能对应一大片位置,直接做反演是严重欠定问题。正确做法是构建一幅局部参考图,把“测量序列”或者“测量向量”跟参考图上的局部窗口做相似度匹配。地磁场仿真在这个环节尤其重要,因为参考图的生成方式、分辨率、噪声特性会直接决定你后面匹配算法的设计。
1.2 仿真的边界与价值
这个项目的仿真部分,并不是为了把地球磁场建得多精致,而是为了回答几个非常具体的问题:参考图网格应该做到多少米一格?匹配窗口开多大才能既稳定又不至于算不动?粒子滤波的粒子数取多少合适?观测噪声到什么量级,算法会开始发散?
这些问题在实机上很难快速试出来。磁力计在不同位置读数会飘,载体姿态变化会引入投影误差,环境里的铁磁性干扰又很难重复,你很难判断算法发散是参数问题还是环境问题。仿真最大的价值就是把环境变量固定住,让你能单独调整算法参数,观察每个参数对结果的影响。比如说,我在仿真里可以严格控制观测噪声从 5nT 加到 50nT,然后看匹配误差怎么变化;放到实机上,这种控制几乎做不到。
仿真还有一个价值,就是可以提前暴露“这个区域到底适不适合用地磁导航”的问题。有些区域地磁场梯度太小,地图太平,匹配结果天然就是模糊的,算法再强也救不回来。通过仿真先看一下区域磁场特征的分布,就能在项目早期决定是换区域、换分量,还是增加额外的观测约束。这种风险前置,往往比省下的那几周开发时间更值钱。
1.3 整体技术选型上的取舍
做地磁导航方案,第一件事不是写匹配算法,而是确定你拿什么数据源生成参考图。目前可选的包括全球地磁场模型、区域地磁测数据和航空磁测数据。全球模型使用方便,但只代表地球主磁场和长期变化,空间分辨率很低;区域实测数据精度高,但需要投入采集工作。这个项目里我采用了“全球模型生成背景场 + 模拟叠加局部磁异常”的仿真路线,原因很简单:前期在没有实测数据的情况下,先用全球模型把算法链路跑通,后面再把实测异常叠加进去。
在传感器选型上,我优先推荐分辨率较高的磁阻传感器。消费级三轴磁力计如果标定得当,慢速运动时噪声可以压到几十 nT 以内,用于验证匹配算法基本够用;如果要追求更稳定的航向和匹配结果,可以考虑 RM3100 这类专业磁传感器,它的分辨率和温度稳定性会好不少。需要说明的是,磁力计精度并不是越高越好,因为参考图本身的误差可能比传感器噪声大得多,传感器做到一定程度之后再提升,边际收益就很有限了。整个方案的关键,反而是把参考图、传感器、匹配算法三者之间的误差关系理清楚。
2. 地磁场参考图仿真:从全球模型到局部地图
2.1 模型选择:IGRF、WMM 还是实测数据
地磁场模型的常见选择有 IGRF、WMM 和 EMM,我简单列一下区别,方便你直接对号入座。
| 模型 | 更新方式 | 特点 | 适用场景 |
|---|---|---|---|
| IGRF | 每5年更新一版 | 学术通用,主磁场球谐展开,稳定可靠 | 算法验证、科研仿真 |
| WMM | 每5年更新 | 面向导航应用,精度较高 | 航空航天、惯导组合 |
| EMM | 更高阶模型 | 包含更多短波磁场信息 | 需要细节更强的区域分析 |
| 实测地磁数据 | 自采 | 最贴近真实环境,但覆盖范围有限 | 实机导航、高精度匹配 |
对初学者来说,直接用 IGRF 作为参考图生成源是最稳妥的。IGRF 的球谐阶次足够描述全球尺度磁场,而且网上有大量现成库可以调用,不需要自己实现球谐函数。WMM 的导航属性更强,但它和 IGRF 在仿真层面的差异,对匹配算法的影响通常比局部异常和硬件噪声小得多。所以我建议第一版参考图先不用纠结模型精度,先用 IGRF 把流程跑通,后面需要高精度时再替换成实测数据或者高阶模型。
这里要提醒一句:全球模型生成的是“正常场”,它不包含近地表岩石剩磁、铁轨、建筑钢筋等造成的局部异常。实际环境中,局部异常往往才是地磁匹配算法真正依赖的“特征”。如果只用全球模型做参考图,在仿真里跑出来的效果会偏理想,换到实机后容易出现“明明地图很平滑,结果怎么都不收敛”的情况。解决思路是,在仿真的参考图里人为叠加一个空间相关的随机磁异常场,让地图拥有真实的“起伏感”,再拿这个更接近实际的地图去测试算法。
2.2 局部参考图生成实操流程
局部参考图生成的流程不复杂,但有几个参数要趁早定下来。我习惯先把目标区域用经纬度网格化,然后在每个网格点上计算地磁总强度 F、北向分量 X、东向分量 Y 和垂直分量 Z,最后保存成一幅多通道栅格图。
第一步,确定工作区域范围。区域范围取决于载体活动范围和惯导递推不确定度。比如我的测试场景设定在东经 120.00° 到 120.01°、北纬 30.00° 到 30.01° 的范围内,换算下来大约是一公里乘一公里。这个范围不算大,但足够跑一段完整的匹配仿真。
第二步,确定网格分辨率。网格分辨率需要同时考虑载体速度、匹配窗口和计算量。对地面机器人来说,速度一般不超过 5m/s,匹配更新频率按 1Hz 算的话,单步位移 5m,网格取 5m 到 10m 会比较合适。如果做成每 0.1 秒更新一次的序列匹配,网格可以更细,但计算量也会增加。我在仿真里用 50m 左右的网格距,是为了先验证算法链路,不追求高分辨率。网格太细不一定好,它会放大参考图和实测之间的配准误差;网格太粗则会丢失细节特征。
第三步,计算每个网格点的磁场值。这里可以直接调用现成的 IGRF 库,输入经纬度、日期和高度,得到该点的 X、Y、Z、F 等分量。需要特别注意高度参数,地磁场随高度衰减,如果你把地面附近测得的数据拿去和 500 米高度的参考图匹配,会出现系统性偏差。所以仿真里一定要固定一个高度层,实机验证时也要把高度作为状态量处理。
第四步,叠加局部磁异常。这一步是仿真逼真度的关键。我建议用高斯随机场生成一个空间相关的异常场,例如均方根为 20nT、相关长度为 200 米的随机扰动。这样生成的参考图画出来会有明显的“山头”和“山谷”,而不是一片光滑曲面,更接近真实环境。
第五步,保存为带地理坐标的栅格文件。格式上最简单的做法是存成 NumPy 的 npy 文件,同时保存一个包含经纬度起点和网格间距的元数据。后面匹配算法直接从栅格里做双线性插值,查询任意位置对应的磁场值。
2.3 精度与误差来源分析
参考图的精度,决定了整个导航方案性能的上限。仿真阶段最常见的误差来源有三个:模型截断误差、网格插值误差和未建模的局部异常误差。
模型截断误差来自全球模型的球谐阶次限制,它只能描述比较长波长的磁场变化。在几百米到几公里的尺度上,全球模型给出的完全平滑背景场,无法表达真实磁异常。仿真时如果担心这个问题,就把局部磁异常叠加得稍微大一点,以保守姿态去测试算法。网格插值误差则来自离散化,匹配算法在查图时会用双线性插值,插值本身会引入平滑,导致参考图上的真实峰值被削弱。想减少这个误差,就提高网格分辨率,或者改用更精细的插值方式。
第三类误差在实际工程里最容易被忽略:地磁场随时间的变化。地磁场并不是完全静态的,会遇到昼夜变化、地磁扰动甚至磁暴。昼夜变化可以造成几十 nT 的起伏;磁暴期间扰动可以达到几百 nT,这对高精度匹配来说几乎是灾难。仿真里最好加入全天候时间噪声模型,或者至少预留一个噪声项,避免你在磁静日条件下调试出来的参数拿到磁扰日直接失效。
3. 导航算法层的核心设计与参数选择
3.1 位置匹配算法:从 MAD 到互相关
地磁匹配算法可以理解成一种二维模板匹配问题:惯导给出一个先验位置和不确定范围,算法把这个范围对应的参考图子图拉出来,然后把当前时刻的多分量磁测量向量跟子图里每个格点的磁场指纹做相似度比较,取最相似的位置作为匹配结果。
常用的相似度度量有三个:平均绝对差 MAD、均方误差 MSD、归一化互相关 NCC。MAD 计算简单、对单个异常点的鲁棒性稍好;MSD 对大误差更敏感,在磁场梯度明显的地方精度更高,但遇到噪声时容易被个别坏点带偏;NCC 对测量增益和偏置有一定容忍度,但需要保证测量和参考图的线性关系成立。我在仿真里首推 MAD,因为它简单稳定,等确认基本流程没问题后再去试 MSD 和其他改进。
实际计算时,匹配窗口的边长要覆盖惯导的不确定范围。如果惯导递推十秒后位置误差可能到 50 米,窗口半径至少要 50 米起步,最好留 2 到 3 倍余量。窗口过窄,真实位置可能落在窗口外,匹配结果直接失效;窗口过宽,候选点太多,匹配时间明显上升,而且可能出现多个相似度接近的假匹配点。比较合适的经验值是:窗口直径取惯导位置不确度的 3 到 5 倍,网格数量控制在 30×30 到 100×100 之间。
匹配结果的好坏,极度依赖参考图的特征丰富程度。磁场梯度平均只有几个纳特每米的区域,哪怕算法再巧妙,结果也是随机跳变。仿真阶段建议先用几个关键指标评估地图:计算总强度在区域内的标准差,看最大值和最小值差多少;再画一下磁场梯度强度图,观察有没有明显的“山峰”和“山谷”。如果整片区域磁场标准差低于 50nT,就要考虑换匹配分量、扩大区域或者考虑磁梯度导航。
3.2 序列匹配与粒子滤波
单帧地磁匹配的稳定性通常不够,因为单帧信息量有限。更实用的做法是采用序列匹配,也就是把最近一段时间的磁测量序列和参考图上对应轨迹的磁场序列做相关。这样就可以利用环境的空间变化规律,也能在匹配的同时平滑噪声。序列匹配里我比较推荐粒子滤波,它对非高斯噪声和多峰分布的处理更自然,正好适合地磁匹配这种容易出现多个相似点的场景。
粒子滤波的核心很简单:用一群粒子代表可能的位置分布,每个粒子都有一个权重。每一步先按惯导的运动模型预测粒子位置,然后用当前磁测量计算每个粒子的似然,更新权重,最后归一化并重采样。经过若干步之后,权重高的粒子会集中到真实位置附近。
粒子数需要根据区域大小和计算资源选择。一公里乘一公里的区域,初始不确定度 50 米,500 到 2000 个粒子通常就够。粒子数太少,容易丢失真实位置;粒子数太多,计算耗时会明显增长。观测噪声参数 sigma_z 直接影响权重的锐化程度,取太小会导致权值迅速集中到少数粒子,过早失去多样性;取太大会让粒子权重都差不多,定位精度下降。对总强度观测,我一般初始设 20nT 到 50nT,然后在仿真里做一次参数扫描,画出 RMSE 随 sigma_z 的变化曲线,拐点附近通常就是比较合理的工作点。
粒子滤波的重采样策略也要留意。标准多项式重采样实现简单,但粒子多样性下降快;系统重采样或者残差重采样更稳一点。我在项目里还加了“正则化重采样”,给重采样后的粒子叠加少量高斯噪声,避免粒子全部坍塌到同一点。
3.3 航向估计与在线标定
地磁导航不只是做位置修正,航向估计也是核心能力之一。利用磁力计计算航向的前提是知道载体的姿态,然后通过姿态矩阵把磁测量从载体坐标系转换到导航坐标系,再求出当地磁场水平分量方向与北向的夹角。
这里最容易出问题的是磁力计没有校准。载体上的铁磁性材料会产生硬磁干扰和软磁干扰。硬磁干扰相当于一个常值偏置,会让磁力计输出在三维空间里偏离球心;软磁干扰会改变磁场方向的增益和耦合,让数据点分布在椭球面上。处理办法就是采集多姿态下的磁力计数据,然后用最小二乘拟合椭球,把椭球参数反过来补偿到原始数据上。拟合完成后,校验手段是看校正后数据的模长是否在任意姿态下都接近常数。
航向估计的实时性同样重要。磁力计的采样率太低,会导致航向输出滞后;采样率太高,又容易把环境的磁噪声引入。我建议磁力计采样率设在 10Hz 到 50Hz,然后串一级低通滤波器,时间常数根据运动速度来调。慢速地面机器人可以稍微平滑一点,高速飞行器就要减少延迟,否则姿态环会受影响。
4. 一个可复现的仿真样板工程
4.1 环境准备与数据接口
仿真工程我用了 Python,主要依赖 NumPy、SciPy、Matplotlib 和 IGRF 计算库。IGRF 的实现有很多版本,接口不完全一样,有的返回地磁分量数组,有的直接返回总强度,建议把 IGRF 计算封装成一个统一接口,后续换库只改一个函数就行。
仿真闭环的大致流程是:先生成参考图,再设计一条模拟真实轨迹,沿着轨迹用参考图加噪声的方式生成磁力计观测,随后让惯导模型从初始点开始递推,粒子滤波利用观测和参考图估计位置,最后跟真实轨迹做误差对比。这里一个常见误区是让观测和参考图都取同一模型的相同值,那样相当于没有任何建模误差,仿真结果会过于乐观。正确的做法是在观测链路里叠加白噪声和高斯相关异常场,或者让生成观测使用的模型和生成参考图使用的模型略有不同,这样测试出来的算法性能才更可信。
4.2 参考图生成与关键参数解读
下面的示例代码展示了用 IGRF 风格接口生成总强度参考图的思路,实际使用时需要根据你安装的库调整函数名和返回字段。
import numpy as np # 示意代码:pyIGRF 风格接口,返回地磁总强度 F def build_reference_map(lat0, lon0, dlat, dlon, nx, ny, height_m=100.0): f_map = np.zeros((ny, nx), dtype=np.float32) for j in range(ny): lat = lat0 + j * dlat for i in range(nx): lon = lon0 + i * dlon # igrf(lat, lon, date, height_m) 返回 X, Y, Z, F _, _, _, f = igrf(lat, lon, 2025.0, height_m) f_map[j, i] = f return f_map # 东经120.00度,北纬30.00度为起点 # dlat=0.0005度约等于55米,200格就是约11公里范围 ref_map = build_reference_map(30.00, 120.00, 0.0005, 0.0005, 200, 200)代码里最需要留意的是经纬度增量和高度。0.0005 度的纬度差大约对应 55 米,但经度方向的实际距离会随着纬度变化,在低纬度地区差不多,在高纬度地区要差很多。如果你的工作区域在高纬度,建议直接用米制投影坐标生成网格,再换算回经纬度,避免网格单元变成非正方形。高度统一用载体典型巡航高度,不要混用地面高度和飞行高度生成参考图。
4.3 粒子滤波匹配闭环与结果评估
粒子滤波匹配的示意代码如下,核心就是预测、更新、重采样三步循环。
N = 1000 particles = np.zeros((N, 2)) # 初始粒子围绕惯导给出的先验位置分布 particles[:, 0] = x0 + np.random.randn(N) * 10.0 particles[:, 1] = y0 + np.random.randn(N) * 10.0 weights = np.ones(N) / N for step in range(T): # 1. 预测:用运动模型加过程噪声递推 particles[:, 0] += vx * dt + np.random.randn(N) * q_pos particles[:, 1] += vy * dt + np.random.randn(N) * q_pos # 2. 更新:用当前磁测量计算权重 pred_f = bilinear_interp(ref_map, particles[:, 0], particles[:, 1]) innov = obs_f[step] - pred_f weights *= np.exp(-0.5 * (innov / sigma_z) ** 2) weights += 1e-12 # 防止权重归零 weights /= weights.sum() # 3. 重采样:按权重重新采样粒子 index = np.random.choice(N, N, p=weights) particles = particles[index] # 4. 估计位置,并记录误差 est_x = np.sum(weights * particles[:, 0]) est_y = np.sum(weights * particles[:, 1]) rmse_history[step] = np.sqrt((est_x - true_x[step]) ** 2 + (est_y - true_y[step]) ** 2)这段代码里的 q_pos 是过程噪声标准差,反映了惯导递推在单个时间步内的不确定度;sigma_z 是观测噪声标准差,反映磁力计和环境扰动。参数设置原则我在前面提过,要先用仿真做一个扫描实验,把 q_pos 和 sigma_z 画成网格,看 RMSE 热点图,选择稳定的低误差区域作为工作参数。
评估指标方面,除了 RMSE,我还会看 CEP50。CEP50 意思是 50% 的定位误差落在一个半径内,它比 RMSE 更直观,也更容易跟其他导航方案对比。仿真里跑 100 次蒙特卡罗,每次重新生成随机观测噪声和初始粒子,最后统计 CEP50,才能比较全面地反映算法稳定性。
5. 从仿真到实机:容易被忽略的几个坑
5.1 传感器标定与安装位置
仿真跑得再好,到了实机也会遇到各种现实问题。最常见的坑就是磁力计没有认真标定就直接用。实机刚上电时,磁力计数据可能存在几百 nT 的偏置,如果不做椭球拟合,不仅航向误差大,粒子滤波的位置权重也会被系统性偏差带偏,导致匹配结果一直偏到某个固定方向。
标定方法不复杂:手持或者把载体在空间中缓慢转圈,尽量覆盖各个姿态角,采集至少数百组数据,然后用椭球拟合法估计出零偏和软磁矩阵。标定结束后,验证数据模长是否在不同姿态下都保持一致。如果模长波动仍然超过几十 nT,要优先检查载体上有没有正在流过大电流的导线,电流产生的磁场会造成明显的时变干扰。
安装位置同样关键。磁力计要尽量远离电机、扬声器、钢制支架和大电流线束。在无人机上,电机会产生剧烈变化的磁场,如果磁力计离电机太近,再好的标定算法也补偿不干净。我见过有人把磁力计埋在金属机架内部,结果航向角在油门变化时跳动十几度,这种问题只能靠重新布置硬件位置解决。
5.2 时间同步与采样率设计
仿真里,所有传感器都默认在同一时刻采样,但实机上磁力计、惯导和 GPS 的采样频率和延迟都不一样。最容易忽略的是时间戳没有统一,导致粒子滤波里“运动模型预测”和“磁观测更新”不是同一时刻的状态,最终产生未知的相位误差。
解决办法是给每个传感器数据都打上单调递增的时间戳,在融合前用插值把数据对齐到统一的滤波器更新时间。磁力计的采样率通常可以设在 20Hz 到 50Hz,惯导在 100Hz 以上,滤波主循环按 20Hz 到 50Hz 跑。高频率的目的是保证相邻两帧之间载体的旋转和平移足够小,防止粒子滤波因为状态突跳而丢失位置。
采样率太高也有问题。磁力计本身响应快到几 kHz,但它测量的是环境磁场的瞬时值,很容易把电气设备开关、电源纹波这些瞬态干扰采进来。所以在磁力计后端加低通或者带通滤波器是常规操作,截止频率要根据载体运动带宽来定。慢速机器人用 1Hz 到 5Hz 截止频率都没问题,高速飞行器就要放宽一些。
5.3 磁扰动环境识别
实机环境里,磁扰动并不总是恒定存在的。电机加速、电流突变、铁门开合、电车经过,都会造成瞬态磁场变化。如果粒子滤波更新时拿到的观测值正好被这种瞬态干扰污染,权重会被错误地拉到某个位置,严重时会导致滤波器发散。
一个实用的做法是在算法里加一个“质量门限”。实时计算最近几帧磁观测模长与当地参考值之间的偏差,如果偏差超过预设阈值,就判断当前环境存在较大磁扰动,粒子滤波暂时不更新位置权重,只用惯导预测。等磁环境恢复正常再恢复匹配更新。这个策略在仿真里很容易模拟,就是在观测序列里人为插入几个突变噪声,然后验证质量门限能否防止滤波器被带偏。
6. 常见问题速查与后续扩展方向
6.1 现场调试问题速查表
我把自己踩过和帮别人排查过的问题整理成了一个表格,按实际调试频率排了一下序,可以直接当作排查手册用。
| 现象 | 可能原因 | 处理建议 |
|---|---|---|
| 匹配结果频繁跳变 | 区域磁场梯度太弱,地图过于平滑 | 增大匹配窗口,改用 X/Y/Z 分量,或换到磁场特征更明显区域 |
| 参考图与实测有系统性偏差 | 全球模型只含正常场,缺局部异常 | 用实测数据生成局部参考图,或用克里金插值补充实测点 |
| 航向角随油门/电流变化而抖动 | 载体磁场干扰,标定不充分 | 做椭球拟合标定,远离电机和导线,必要时加磁屏蔽 |
| 磁暴期间匹配误差明显变大 | 外源磁场扰动影响观测 | 实时监测地磁 Kp 指数,磁扰时段关闭匹配更新 |
| 粒子滤波定位一直不收敛 | sigma_z 设置过小或粒子数太小 | 调大观测噪声参数,增加粒子数,检查初始位置不确定范围 |
| 高纬度地区网格变形导致参考图不准 | 经纬度网格不是等距正方形 | 改用投影坐标系生成网格再转经纬度 |
| 实机和仿真结果差异大 | 静态校准时未覆盖全姿态或传感器安装位置太靠近金属 | 重新做全姿态标定,调整磁力计安装布局 |
排查匹配发散问题时,我建议先在存储下来的日志里对比实测磁序列和参考图对应位置的磁序列,画出两条曲线。如果曲线形态接近但整体偏移,是标定或模型偏差;如果曲线形状都对不上,可能是数据时间戳错位或者高度层选错。
6.2 后续升级方向
地磁导航这个方向还有很多可以深入的空间。一个比较自然的升级方向是磁梯度导航。磁梯度测量的是磁场在空间中的变化率,对远场干扰和时间变化有更强的抑制能力,能够把匹配分辨率提高一个量级。代价是磁梯度仪硬件更贵,数据噪声处理也更复杂,适合有一定预算和算法基础的团队去试。
另一个方向是加入深度学习和端到端匹配。传统粒子滤波依赖手工设计的运动模型和噪声模型,深度模型可以从历史数据里学到更复杂的磁场特征和载体运动模式。但这类方法需要大量实测数据和良好的真值标定,工程化之前建议继续以粒子滤波或相关匹配作为保底策略。
多传感器融合是必然趋势。地磁导航单独用有局限,不需要试图让它解决所有问题。更合理的组织方式是把它作为组合导航里的一个绝对位置观测源,和惯性导航、视觉里程计、气压高度、UWB 等一起进入扩展卡尔曼或因子图框架。这样每一路传感器都能发挥长处,地磁能覆盖 GNSS 失效和光照不足的短板,其他传感器又能补上地磁匹配的模糊性。
回头再看这个“地磁场仿真与导航方案设计”项目,我个人最大的体会是,地磁导航真正难的不是匹配算法本身,而是对整个误差链路的管理。从全球模型生成参考图,到传感器标定,到时间同步,到磁场环境扰动,任何一环没处理好,最终都能在定位结果上放大出来。仿真阶段多花点时间把参考图噪声、观测噪声和算法参数的关系摸透,后面实机调试会少走很多弯路。