拆解 PSINS ②:test_SINS.m——纯惯导解算(inspure)与"正演→反演"闭环¶
拆解 PSINS 系列第二篇。P1 造出了数据母版(
trj10ms.mat,966 s / 96600 拍 @100 Hz),本篇消费它:test_SINS.m(19 行薄壳)把"干净的真值"污染成"带误差的传感器读数"(误差注入),再喂给纯惯导解算inspure,最后与真值对比得到误差传播曲线——Schuler 振荡、水平漂移、垂直通道发散。核心交付:迷你 inspure(自包含机械编排,MATLAB+Python 双轨),与 PSINS 原版同参数对拍:水平位置误差末点 935.9 m(PSINS)vs 936.0 m(迷你)——量级完全一致,差异全是可解释的工程细节。
参考体系:PSINS
base/base2/inspure.m(纯惯导框架)、base/base1/insupdate.m(机械编排六步)、base/imu/imuerrset.m+imuadderr.m(传感器误差注入)、base/base2/avperrset.m+avpadderr.m(初始误差)、base/base1/bhsimu.m(高度参考生成)、base/base2/avpcmpplot.m(误差画图);对照科普系列 03 比力方程、07 姿态更新、09 误差传播;以及 P1 的正演机trjsimu。
一、19 行薄壳干了什么¶
glvs
trj = trjfile('trj10ms.mat'); % ① 加载 P1 的数据母版
imuerr = imuerrset(0.01, 100, 0.001, 10); % ② 误差注入(四幕)
imu = imuadderr(trj.imu, imuerr); % IMU 误差:eb/db + 随机游走
davp0 = avperrset([0.5;0.5;5], 0.1, [10;10;10]);
avp00 = avpadderr(trj.avp0, davp0); % 初始误差:姿态/速度/位置
trj = bhsimu(trj, 1, 10, 3, trj.ts); % 高度参考(trj.bh)
avp = inspure(imu, avp00, trj.bh, 1); % ③ 纯惯导解算
avperr = avpcmpplot(trj.avp, avp); % ④ 与真值比较,画误差曲线
四幕:加载 → 注入 → 解算 → 比较。本篇逐幕拆,重点在 ② 的"误差从哪来"和 ③ 的"解算怎么算"。
二、误差注入体系:干净数据怎么"变脏"¶
P1 的 trjsimu 生成的是理想读数(真值反算,无任何误差)。test_SINS 用两套函数把它污染成"真实传感器会给出的读数":
① IMU 误差(imuerrset + imuadderr):
imuerr = imuerrset(eb, db, web, wdb); % eb=陀螺零偏(°/h), db=加计零偏(µg),
% web/wdb=随机游走(°/√h, µg/√Hz)
imu = imuadderr(imu, imuerr); % imu(:,1:3) += eb*ts + web*sqrt(ts)*randn
% imu(:,4:6) += db*ts + wdb*sqrt(ts)*randn
imuadderr.m 的核心就一行:在增量上叠加"零偏×ts + 随机游走×√ts"——零偏是确定性偏移,随机游走是白噪声积分(科普 04 的 Allan 方差那套)。单位换算藏在 imuerrset(eb*glv.dph 把 °/h 转 rad/s、db*glv.ug 把 µg 转 m/s²)。注意注入发生在增量上(wm/vm),不是速率上——和 P1 坑 1 呼应。
② 初始误差(avperrset + avpadderr):
davp0 = avperrset([0.5;0.5;5], 0.1, [10;10;10]);
% phi(arcmin, [pitch;roll;yaw]) + dvn(m/s) + dpos(m)
avp00 = avpadderr(trj.avp0, davp0);
初始姿态误差 [0.5'; 0.5'; 5'](pitch/roll 0.5 分、yaw 5 分)、速度 0.1 m/s、位置 10 m。avpadderr 用四元数加法(qaddphi)把姿态误差正确地加到初始姿态上(不是欧拉角直接加,避免大角度下的顺序问题)。
③ 高度参考(bhsimu):trj.bh = [真值高度 + 马尔可夫噪声, 时间]——模拟一个"带噪声的气压高度计",供 inspure 做高度阻尼(见下节)。
📌 教学点:这套误差注入体系就是科普 15 篇"故障注入"的原料(
imuerrset在 15 篇被引用过)。软故障(偏差/漂移)的本质就是"给理想读数加个偏移",和这里完全同构。
三、inspure 框架:解算循环 + 高度阻尼¶
inspure(base/base2/inspure.m)是纯惯导的主框架:
[nn, ts, nts] = nnts(glv.ns, imu(:,end)); % 双子样 nn=2、采样间隔 ts
ins = insinit(avp0, ts); % 初始化 INS 结构(含 eth 地球参数)
for k=1:nn:len-nn+1
wvm = imu(k:k1, 1:6); t = imu(k1,end);
ins = insupdate(ins, wvm); % 机械编排(下节)
switch vp_fix % 高度/速度阻尼选项
case 'f', ins.vn(3) = ins.vn(3); % 自由(垂直发散)
case 'Z', ins.pos(3) = href(k1,1); % 固定高度(test_SINS 用这个)
case 'H', ins.pos(3) = pos0(3); % 固定到初始高度
...
end
avp(ki,:) = [ins.avp; t]';
end
关键设计:高度阻尼选项(href 参数)。纯惯导的垂直通道开环不稳定(垂直 Schuler 振荡,误差随时间发散),所以 inspure 提供一串"外部高度参考"选项:
| 选项 | 行为 | 用途 |
|---|---|---|
'f' | 自由(不阻尼) | 观察垂直通道发散 |
'H' | 高度固定到初始值 | 低精度测试 |
'Z' | 高度固定到 href 提供的序列 | test_SINS 用 trj.bh(模拟气压高度) |
'z' | 垂直速度+高度都固定 | 更严格 |
📌 test_SINS 传
trj.bh(2 列[h, t])→vp_fix='Z':高度通道被"气压高度"固定,只让水平通道自由解算。这是惯导工程的标准做法——垂直通道不可靠时,用外部高度源兜底(就像 13 篇的松组合用 GNSS PVT 兜底)。
四、机械编排核心 insupdate:六步更新(与 P1 互逆)¶
insupdate(base/base1/insupdate.m)是纯惯导的心脏,每 nn 拍(双子样)执行六步:
① 圆锥/划桨补偿 cnscl(imu,0):双子样增量 → 等效旋转矢量。φm = Σwm + cros(0.5·wm₁, wm₂)(圆锥项)、Δvbm = Σvm + scullm(划桨项)——科普 07 圆锥效应的直接落地。
② 标定:φm = Kg·φm − eb·nts、Δvbm = Ka·Δvbm − db·nts——把传感器刻度/零偏误差"洗掉"(对应 ② 注入的误差,解算端要反向补偿;迷你版用单位矩阵/零)。
③ 地球参数更新 ethupdate:由当前 pos/vn 算 RMh/RNh/wnin/gcc(科普 09 的曲率半径与重力模型)。
④ 速度更新(比力方程):
比力转导航系(qmulv)→ 去掉哥氏/重力(gcc)→ 得运动加速度 → 积分。这就是科普 03 的比力方程 \(f = a - g\),和 P1 的 trjsimu 第 ⑤ 步(\(a_n - g_{cc}\))完全互逆。
⑤ 位置更新:\(\mathbf p^+ = \mathbf p^- + \mathbf M_{pv}\,\dfrac{\mathbf v_n^-+\mathbf v_n^+}{2}\, nts\),\(\mathbf M_{pv}\) 由 RMh/RNh 构成(科普 09 位置微分)。
⑥ 姿态更新(qupdt2):
先右乘体轴增量 rv2q(φm)(含圆锥补偿),再左乘导航系旋转补偿 rv2q(−wnin·nts)——四元数版"旋转矢量积分"(科普 07)。
📌 互逆关系(P1 的伏笔在此回收):trjsimu 从"想要的 att/vn/pos"反算 wm/vm;insupdate 从 wm/vm 积分回 att/vn/pos。两者共享同一套 eth 模型与 cnscl 补偿——无误差时,trjsimu 的 imu 喂给 insupdate 应完美复现 trj.avp。迷你链路的自洽性测试就是验证这一点(见第五节)。
五、迷你 inspure:自包含实现与自洽性¶
迷你链路(assets/gen_sins.py / gen_sins.m)把 test_SINS 的数据流全部自包含实现(不依赖 PSINS):
- 迷你 trjsimu:P1 的 wat 表(21 行硬编码)→ 数值积分出真值 avp + imu 增量;
- 误差注入:确定性(
eb·ts、db·ts、初始 att/vn/pos 误差)——关掉随机游走(web=wdb=0),保证双轨逐数字可对拍; - 迷你 inspure:insupdate 六步的完整实现(cnscl 双子样 + earth + 四元数更新),可选
fix_h高度固定; - 误差分析:解算 vs 真值 → att/vel/pos 误差统计。
自洽性测试(迷你链路的"体检"):无误差注入时,解算必须完美复现真值。实测:纯 yaw 转 60° 场景解算误差 3e-8°;全轨迹无注入 att/vel/pos 误差在 cm~m 级(剩余 = 位置微分未外推半拍等简化项)——生成/解算模型自洽,误差传播曲线里的误差全部来自注入(这正是教学想要的:误差源单一、清晰)。
⚠️ 写自洽性测试时踩了一个经典坑(写进第八节坑 1):四元数共轭 ≠ np.conj、a2qua 的 q0>0 符号规范化在 dq 法里会炸——详见坑 1。
六、误差传播分析:四条路径¶
gen_sins 实测(966 s,与 test_SINS 同参数 eb=0.01°/h、db=100µg、初始 [0.5;0.5;5]'):
| 指标 | 高度自由 | 高度固定 |
|---|---|---|
| 末点水平位置误差 | 936.0 m | 936.0 m |
| 末点垂直误差 | 581.6 m(发散) | −2.7 m(≈ 气压噪声) |
| 水平位置误差 RMS | 345.1 m | 345.1 m |
| 垂直位置误差 RMS | 216.1 m | 6.8 m |
| att RMS(pitch/roll/yaw) | 24.4/22.3/299.5″ | 同左 |
三个结论:
- yaw 初始误差 5′ 主导:att RMS 的 yaw=299.5″ ≈ 5′(注入值),水平位置误差 936 m ≈ ½·g·ψ·t² 量级——初始姿态误差是 966 s 纯惯导的最大误差源(陀螺零偏 0.01°/h 只贡献 ~9.7″/h 的姿态误差,远小于 5′);
- 水平 vs 垂直解耦:高度固定对水平误差几乎无影响(936.0 vs 936.0)——垂直通道发散是独立的(垂直 Schuler 振荡),不会污染水平;
- 垂直通道必须阻尼:自由模式 966 s 发散到 581.6 m,固定后垂直误差 ≈ 气压噪声(~6.8 m RMS)——这就是 test_SINS 用
trj.bh的原因。
🎯 free 与 fix 一句话 + 物理本质
一句话:free 和 fix 只是 miniinspure 里一个开关(fix_h)的两种取值——free 让高度 pos(3) 自由积分,fix 每步把 pos(3) 钉到外部气压高度 trj.bh(真值高度 + 气压噪声)。两者唯一差别:垂直通道是否被外部高度源强制固定。
为什么要这个开关(物理本质):纯惯导的垂直通道是开环不稳定的。一个高度误差 δh 会让重力计算失配 δḡ ≈ −2g·δh/R(真实重力随高度变化,而惯导假设了固定重力模型),这个失配又产生垂直加速度误差 → 高度误差指数增长(垂直 Schuler 振荡,~9 min 包络发散)。水平通道则相反,由 Schuler 稳定性保证有界振荡(~84 min 周期)。
所以 free 跑 966 s 垂直发散到 581.6 m,而 fix 把垂直"兜住"——fix 的垂直误差 ≈ 气压噪声(~6.8 m RMS,末点 −2.7 m),并跟随真值的 450→655→450 m 爬升;由于垂直/水平耦合在 966 s 内可忽略,水平误差都≈936 m 几乎不变——这恰好说明垂直发散是独立的物理现象,不是水平解算写错了。
下图的真值 vs free vs fix 同图三色叠加把这一点画得最直观:
- 黑线 = 真值(参考基准);
- 红线 = free(高度自由)、蓝线 = fix(高度阻尼)。红蓝两线在 E-N 投影上几乎重合——说明水平漂移(~936 m)由初始 yaw 误差主导,高度阻尼管不了水平;
- 真正的差别在垂直通道:free 的垂直误差发散到 581.6 m,fix 被兜在气压噪声附近(RMS ≈ 6.8 m)。这在左下角的 Position offset 子图(绿色 ΔH 曲线)和
miniavpcmpplot.png里看得最清楚。

如果还是觉得 2D 图"两条线叠在一起、看不出差别",下面这张 3D 轨迹对比 会把垂直差异直接"立"起来:
- Z 轴 =(估计高度 − 真值高度)× 8,仅为显示放大(坐标单位仍是 m),让垂直通道发散肉眼可见;
- 黑线 Truth 躺在 Z=0 参考平面上,蓝线 fix 紧贴地面(真实高度误差约 6.8 m RMS,×8 后约 54 m),红线 free 明显抬升到约 4000–4600 m(对应真实高度误差 500–580 m);
- 一眼可证:2D 水平投影重合,是因为差别只在垂直;3D 下 free 的"垂直 Schuler 发散"被放大得很明显。

七、与 PSINS 原版对拍¶
迷你链路与 PSINS 原版(inspure)同参数确定性对拍(eb/db 同、随机游走关闭):
| 指标 | PSINS 原版 | 迷你链路 |
|---|---|---|
| 水平位置误差末点 | 935.9 m | 936.0 m |
| 水平位置误差 RMS | 365.9 m | 345.1 m |
| att RMS(pitch/roll/yaw) | 16.7/20.9/294.7″ | 24.4/22.3/299.5″ |
水平误差末点 935.9 vs 936.0 m——相差 0.1 m(0.01%),yaw 主导项 294.7″ vs 299.5″ 一致。差异来源(全部可解释):① PSINS trjsimu 有匀速段速度阻尼(迷你没有)→ 轨迹细节差异;② PSINS 的 insupdate 有位置外推半拍、更完整的 wnin 处理;③ 迷你版位置微分用当前 vn 而非外推值。结论:迷你链路正确复现了 PSINS 纯惯导的误差传播行为——这是"读懂 PSINS"的硬证据。
八、常见坑¶
- a2qua 的 q0>0 规范化在 dq 法里会炸(本轮调试实战):PSINS 260705 的
a2qua带if qnb(1)<0, qnb=-qnb(四元数规范化)。如果用 dq 法(conj(q_prev)⊗q_new)求姿态增量,yaw 跨 180°/360° 时 q_prev/q_new 的符号翻转不同步 → dq 跳变 → wm 方向反(真实 +2° 被算成 −2°) → 解算爆炸。PSINS 原版用矩阵法m2rv(Cbn_1*Cnb)不受影响(q2mat 对符号不敏感)。自己写四元数姿态增量时,要么用矩阵法、要么保证符号连续。 - 增量 vs 速率:imu 的 wm/vm 是增量(rad / m/s 每 ts),不是角速度/比力——注入误差、标定补偿都要乘 ts。
- 垂直通道不阻尼必然发散:纯惯导垂直通道开环不稳定,必须外接高度源(trj.bh/气压计)——不是滤波器写错了,是物理如此。
- att 顺序
[pitch;roll;yaw]、vn 顺序[vE;vN;vU](ENU):PSINS 是东北天,和我们固件的 NED[vN;vE;vD]不同——对拍/移植前先重排。 - 双子样对齐:
inspure每 nn=2 拍输出一行,与真值比较要trj.avp(2:2:end,:)对齐,否则错位比较。 - 随机游走破坏确定性对拍:
imuadderr的randn让每次运行结果不同——双轨/对比必须关掉(web=wdb=0)。 - 误差注入的单位:
imuerrset参数是 °/h、µg、°/√h、µg/√Hz,内部乘glv.dph/glv.ug换算——传错单位误差差 1000 倍。 - q 未归一化漂移:长时间纯积分四元数范数会漂(~1e-12 级),工程上每 N 拍归一化一次;迷你版 966 s 内影响可忽略,但长航时要处理。
九、自测题¶
test_SINS.m的误差注入和 15 篇的"故障注入"是什么关系?软故障的本质是什么?inspure的高度阻尼选项里'Z'和'f'差在哪?为什么 test_SINS 用'Z'?insupdate六步里,哪一步对应科普 03 的比力方程?哪一步对应科普 09 的位置微分?- 为什么说
trjsimu(P1)和insupdate(P2)互逆?自洽性测试验证的是什么? - 966 s 纯惯导的误差主导项是什么(陀螺零偏还是初始 yaw 误差)?用 gen_sins 的数字说明。
- 高度固定为什么几乎不影响水平误差?这说明了什么?
- 迷你链路 vs PSINS 原版:水平误差末点 935.9 vs 936.0 m,差异可能来自哪些简化?
📐 参考答案
- 同一套思想:给理想读数加偏移/噪声。软故障(偏差/漂移)= 常值或缓变偏移(eb/db 的推广);
imuerrset就是故障注入的"参数化"工具。区别只在 15 篇关心"检测"、这里关心"传播"。 'f'自由(垂直发散);'Z'高度固定到外部序列(trj.bh = 真值+噪声,模拟气压高度)。test_SINS 要研究水平误差传播,垂直发散会污染长时间积分 → 用'Z'把垂直通道"兜住",只让水平自由。- ④ 速度更新 = 比力方程(fn=q·fb 转导航系、减 gcc);⑤ 位置更新 = 位置微分(Mpv·vn)。
- trjsimu 从"想要的导航状态"反算读数(正演),insupdate 从读数积分回导航状态(反演);共享同一套 eth 模型和 cnscl 补偿。自洽性测试 = 无注入时解算应复现真值——证明迷你版的生成/解算是同一数学的互逆对。
- 初始 yaw 5′ 误差主导:att RMS yaw 299.5″≈5′,水平位置误差 936 m≈½gψt²(ψ=83 µrad, t=966 s → ~380 m 量级,叠加 Schuler 调制);陀螺零偏 0.01°/h 只产生 ~9.7″/h 的姿态误差(966 s ≈ 2.6″),远小于 5′。
- 水平由 Schuler 振荡主导(有界、稳定),垂直通道发散是独立的垂直 Schuler 振荡(不稳定);两者通过 M_pv/gcc 的耦合在 966 s 内可忽略 → 高度固定只压垂直,水平不动(936.0 vs 936.0 m)。
- ① PSINS trjsimu 的匀速段速度阻尼(迷你无)→ 轨迹细节不同;② PSINS insupdate 的位置外推半拍(迷你用当前 vn);③ 更完整的 wnin/哥氏处理。都是"工程精度"差异,不是原理差异——量级完全一致(935.9 vs 936.0 m)。
十、可复现:跑通本篇验证脚本¶
本篇数值与可视化(迷你链路自洽 + 误差传播 + 高度对比 + 绘图)来自 assets/gen_sins.py(Python)与 assets/gen_sins.m(MATLAB)双轨脚本,确定性(无随机),两轨逐数字一致。
🧪 运行方式(Python 或 MATLAB,二选一即可)
# Python(只需 numpy,96600 步解算,约 10-30 s)
python docs/惯性导航/assets/gen_sins.py
# MATLAB(无工具箱依赖)
cd docs/惯性导航/assets
gen_sins
输出对照:
- 迷你 trjsimu:96600 行、末位置 (29.0527°, 105.9853°, 450.0 m);
- 误差注入后解算:高度自由末点 (-42.4, 935.0, 581.6) m;高度固定 (-42.2, 935.0, −2.7) m——垂直 581.6→≈气压噪声、水平不变;
- 误差统计:att RMS (24.4, 22.3, 299.5)″;水平 RMS 345.1 m / 末 935.9 m;垂直 216.1(自由)/ 6.8(固定)。
- 可视化:脚本运行后会生成五张 PNG:
miniinsplot_fix.png、miniinsplot_free.png、miniavpcmpplot.png、miniinsplot_cmp_freefix.png、miniinsplot3d_cmp_freefix.png(仓库内 PNG 由 Python 路径生成;MATLAB 版的saveas默认注释,需手动打开或取消注释后导出)。 miniavpcmpplot.png对应 PSINS 的avpcmpplot,展示free(高度自由)与fix(高度阻尼)的误差曲线对比;miniinsplot_*.png对应 PSINSinsplot(avp,'avp')的 6 子图布局;miniinsplot_cmp_freefix.png是本篇的核心 2D 对比图:真值 + free + fix 同图三色叠加——黑线 = 真值(参考基准)、红线 = free(高度自由)、蓝线 = fix(高度阻尼)。红蓝两线在 E-N 投影上几乎重合:水平漂移(~936 m)由初始 yaw 误差主导,与是否高度阻尼无关;真正的差别在垂直通道(free 发散到 581.6 m、fix 被兜在气压噪声附近、RMS ≈ 6.8 m),要在左下角 Position offset 子图(绿色 ΔH 曲线)或miniavpcmpplot.png里才看得清。miniinsplot3d_cmp_freefix.png是 3D 增强图(独立图,PSINS 原版不画):Z 轴 =(估计高度 − 真值高度)× 8,仅作显示放大(单位仍是 m)。黑 Truth 在 Z=0 参考面、红线 free 明显抬升、蓝线 fix 紧贴地面——专门用来直观回答"2D 投影里 free/fix 看起来一样"的困惑。配色约定同前(真值永远黑线,解算按 free=红、fix=蓝 循环)。 绘图函数零依赖自写:assets/miniinsplot.m/miniavpcmpplot.m/miniinsplot3d.m(MATLAB)和assets/miniplot.py(Python)。
🎨 绘图对齐 PSINS 的两个实现注记(复盘用):迷你绘图函数刻意不调用 PSINS 的 insplot/avpcmpplot(背后挂着 glv/myfigure/xygo/pos2dxyz 一串闭包),只借鉴其"画什么/怎么摆"的意图、自写零依赖实现。其中两个易忘的细节:
- 起点图例的 DMS 度分秒换算:PSINS 的
insplot图例写LON0:1060000.32, LAT0:290000.32 (DMS),格式是dddmmss.ss(度度度 分分 秒.秒),由十进制经纬度换算: 例:106.000103°→ 度 106、分 0、秒 0.37 →1060000.37;29.000090°→0290000.32。迷你版用一行匿名函数实现对应的dddmmss.ss串(sprintf('%03d%02d%05.2f', floor(abs(d)), floor(rem(abs(d)*60,60)), rem(abs(d)*3600,60)))。 - 轨迹图边距收紧:
axis tight仍会留约 3–7% 渲染边距,导致轨迹四周有空余。在axis tight之后显式把 XLim/YLim 钉到数据范围 ±2%(保留起点红点不被裁):xlim([min(xE)-0.02*range(xE), max(xE)+0.02*range(xE)]); ylim([min(yN)-0.02*range(yN), max(yN)+0.02*range(yN)]);⚠️ 若轨迹本身 East 窄、North 宽(本例 East≈−1400~0 m、North≈0~6000 m),即便钉到数据极值,面板里仍是竖向条、左右"显得空"——那是数据几何决定的,不是边距问题;要更方只能改面板布局(但会偏离 PSINS 的 3×2)。
其余对齐要点(窗口用 OuterPosition 仿 PSINS myfigure 宽屏、轨迹 East 横/North 纵、航向用 LaTeX $\psi/(^{\circ})$、多解算分配固定颜色+线型、真值轨迹 miniinsplot(trj,'truth') 最像 PSINS 截图)均已在脚本注释中写明。
对不上?先 git diff docs/惯性导航/assets/gen_sins.py gen_sins.m 确认脚本没被改过。想和 PSINS 原版对拍:在 MATLAB 里 addpath(genpath('PSINS目录')) 后跑 test_SINS_trj + test_SINS,用 imuerrset(0.01,100,0,0)(关随机游走)可得确定性结果——水平误差末点应 ≈ 935.9 m。
参考体系
- PSINS:
demos/test_SINS.m(本篇拆解对象)、base/base2/inspure.m(纯惯导框架+高度阻尼)、base/base1/insupdate.m(机械编排六步)、base/base1/cnscl.m(圆锥/划桨)、base/base1/earth.m(地球参数)、base/imu/imuerrset.m+imuadderr.m、base/base2/avperrset.m+avpadderr.m、base/base1/bhsimu.m(高度参考) - 科普系列对照:03 比力方程(insupdate ④)、07 圆锥效应/四元数更新(①⑥)、09 位置微分/误差传播(③⑤ 与全篇)、15 故障注入(误差注入体系)
- 本篇验证:
assets/gen_sins.py(Python)与assets/gen_sins.m(MATLAB)双轨——迷你链路 + 自洽性 + 误差传播 + 与 PSINS 对拍(935.9 vs 936.0 m);两张 SVG(机械编排_数据流.svg、误差传播_路径.svg) - 上一篇:拆解 PSINS ①:test_SINS_trj.m——数据母版(P1 造数据,本篇消费)
- 下一篇:拆解 PSINS ③:test_DR.m——航位推算(drupdate),"航向×里程"的第二条独立定位链
- 系列首页:惯性导航与惯导解算 · 自学科普系列