一、SITAN算法的核心原理与状态量本质
SITAN(Sequential Iterated Tangent Approach)是基于地形/地磁特征的递推式匹配导航算法 ,其核心是以惯导输出为初始值,在局部邻域内搜索地磁特征匹配的最优位置 ,本质是位置域的递推滤波,而非传统INS的多状态联合滤波。
在你的代码中,SITAN的核心逻辑是:
- 以惯导经纬度为中心,在
node定义的网格邻域内生成候选位置; - 计算候选位置的地磁预测值与实测值的残差,通过卡尔曼滤波更新残差的估计;
- 基于加权残差(SWRS)选择最优候选位置,作为匹配后的位置输出。
这一逻辑决定了SITAN算法的核心观测量是地磁特征,核心待估计量是位置(经纬度),这是分析前6列是否需要应用的基础。
二、AVP前6列的定义与物理意义
你提到的AVP前6列:
- 1-3列(Attitude):姿态角(横滚、俯仰、航向,即Roll/Pitch/Yaw);
- 4-6列(Velocity_n):导航系(东北天)下的速度(东向、北向、天向速度)。
需要先明确:SITAN是位置匹配算法,而非INS的全状态融合算法,因此前6列的应用需结合算法定位、误差特性和工程实际分析。
三、前6列在常规SITAN地磁匹配中的应用分析
(一)姿态角(1-3列):一般不需要直接用于SITAN核心匹配,但可作为辅助约束
-
核心匹配中无需使用的原因
- SITAN的匹配对象是地磁总场(或梯度)的空间分布 ,而地磁总场是标量 (你的代码中使用的是
GridFindValue获取的标量地磁值),与载体姿态无关------无论载体如何姿态变化,某一地理坐标(经纬度)的地磁总场值是固定的。 - 即使使用矢量地磁 (地磁三分量),姿态角的作用是将载体系的地磁矢量观测值转换为地理系 ,但常规SITAN地磁匹配几乎都使用标量总场(如你的代码),因此姿态角无直接作用。
- SITAN的匹配对象是地磁总场(或梯度)的空间分布 ,而地磁总场是标量 (你的代码中使用的是
-
可作为辅助约束的场景
- 若存在匹配邻域内地磁特征平坦 (易出现多峰值匹配),可结合航向角约束候选位置的搜索方向(如沿航向方向缩小搜索范围,垂直航向扩大),减少无效候选点。
- 姿态角的突变可作为异常观测的判别依据(如载体姿态剧烈变化时,地磁观测噪声可能增大,可动态调整观测噪声R)。
(二)导航系速度(4-6列):可选择性应用,需结合SITAN的实现形式
-
常规SITAN中****通常不直接用于核心匹配的原因
- SITAN的核心是位置的局部搜索与匹配 ,其时间更新 依赖于惯导的位置递推 (而非速度)------你的代码中通过
dist_threshold判断两次匹配的INS位置间隔,本质是用位置变化代替速度约束,已满足常规需求。 - 常规SITAN的状态量是地磁残差的估计值 (你的代码中
xhat),而非INS的速度/位置误差,因此速度无直接输入端口。
- SITAN的核心是位置的局部搜索与匹配 ,其时间更新 依赖于惯导的位置递推 (而非速度)------你的代码中通过
-
可应用的场景(进阶优化)
- 候选位置的生成优化 :
惯导速度可用于预测下一时刻的位置范围,将搜索邻域从"以当前INS位置为中心的正方形"改为"沿速度方向的椭圆形",减少候选点数量(如高速运动时,沿航向的搜索范围可大于垂直航向),提升计算效率。 - 多源融合的SITAN变体 :
若将SITAN与INS的速度误差 进行联合滤波(如扩展卡尔曼滤波EKF融合),速度可作为状态量的一部分 参与时间更新(如速度误差的递推),但这已超出常规SITAN的范畴(常规SITAN仅匹配位置)。 - 匹配有效性判别 :
速度为0(载体静止)时,地磁匹配的邻域可缩小(静止时位置变化小);速度过大时,可增大邻域(INS位置误差累积快),动态调整node大小。
- 候选位置的生成优化 :
(三)总结:常规SITAN地磁匹配中,前6列****无需作为核心输入,仅可作为辅助优化
| AVP列数 | 物理意义 | 常规SITAN核心匹配 | 辅助应用场景 |
|---|---|---|---|
| 1-3 | 姿态角(R/P/Y) | 不需要 | 搜索方向约束、异常观测判别 |
| 4-6 | 导航系速度 | 不需要 | 候选邻域优化、匹配参数动态调整 |
四、工程实现的建议(结合你的代码)
你的代码是典型的常规SITAN实现(标量地磁、位置邻域搜索、残差滤波加权),针对前6列的应用给出以下建议:
-
短期无需修改 :
前6列在你的代码中无核心作用,强行加入反而会增加算法复杂度(如姿态角的噪声处理、速度的单位转换),且无法显著提升匹配精度(你的代码中INS误差约700米,SITAN匹配后误差可降至百米级,已满足需求)。
-
进阶优化方向(可选):
-
利用速度动态调整搜索参数 :
从AVP第4-6列提取东向/北向速度,计算速度大小v = sqrt(vE^2 + vN^2),将dist_threshold改为v * dt(dt为采样间隔),使两次匹配的间隔随速度动态变化(高速时间隔大,低速时间隔小)。matlab% 示例:从AVP中提取速度,动态计算dist_threshold vE = avp(i,4); vN = avp(i,5); v = sqrt(vE^2 + vN^2); dist_threshold = v * 0.1; % 0.1为采样间隔(秒),单位转换为度/千米需根据经纬度修正 -
利用航向角约束搜索邻域 :
从AVP第3列提取航向角yaw,将搜索邻域的网格方向旋转至航向方向,减少垂直航向的候选点数量。
-
-
特殊场景的例外 :
若你后续改用矢量地磁匹配 或地磁梯度匹配 ,则姿态角 必须用于载体系到地理系的转换 (此时1-3列成为必需输入);若采用INS/SITAN联合滤波,则速度(4-6列)需作为状态量参与滤波。
五、关键结论
-
常规SITAN地磁匹配(标量总场、位置邻域搜索) :
AVP前6列(姿态、速度)不需要作为核心输入,你的代码仅使用经纬度是合理的,符合工程上的常规实现。
-
前6列的价值 :
仅在算法优化(如动态参数调整、搜索邻域优化)时作为辅助信息,而非必需项。
-
核心原则 :
SITAN的本质是位置的地磁特征匹配,只有与"位置-地磁特征映射"直接相关的量才是核心输入,其余量均为辅助。