AnyMath 文档
Notebook

INS块的操作

我们将通过考虑哪些误差将出现在车辆左转的轨迹上,来演示惯性导航系统(INS)的误差模拟单元是如何工作的。

上传数据

矢量可以以任何格式存储,在本例中它们作为单独的矢量在JLD2或MAT文件中。 从文件下载它们:

In [ ]:
Pkg.add("JLD2")
In [ ]:
using JLD2
@load "leftTurnTrajectory.jld2"
Out[0]:
7-element Vector{Symbol}:
 :dt
 :vehPos
 :t
 :vehAcc
 :vehOrient
 :vehVel
 :vehAngVel

此文件包含以下变量:

  • dt -测量时间步长,可用于采样(等于0.4s),
  • t -测量时间矢量,从0到7.88秒
  • vehPos, vehVel, vehAcc, vehOrient, vehAngVel -轨迹参数的记录:位置,速度,加速度,角定向和角速度,每个都有3个参数的198个测量值。

让我们准备WorkspaceArray对象,每个对象都包含一个时间向量。 t 并且,对于每个时间框架,三个坐标(笛卡尔坐标系中的位置,速度和加速度,以及欧拉角和角速度):

In [ ]:
using DataFrames
vehPos_wa = WorkspaceArray("vehPos_wa", DataFrame(time = t[:], value = [collect(vec((row))) for row in eachrow(vehPos)]));
vehVel_wa = WorkspaceArray("vehVel_wa", DataFrame(time = t[:], value = [collect(vec((row))) for row in eachrow(vehVel)]));
vehOrient_wa = WorkspaceArray("vehOrient_wa", DataFrame(time = t[:], value = [collect(vec((row))) for row in eachrow(vehOrient)]));
vehAcc_wa = WorkspaceArray("vehAcc_wa", DataFrame(time = t[:], value = [collect(vec((row))) for row in eachrow(vehAcc)]));
vehAngVel_wa = WorkspaceArray("vehAngVel_wa", DataFrame(time = t[:], value = [collect(vec((row))) for row in eachrow(vehAngVel)]));

启动模型

我们的例子伴随着一个模型,我们将打开并运行。:

In [ ]:
engee.open("$(@__DIR__)/simulate_ins_block.engee")
data = engee.run("simulate_ins_block")
Out[0]:
SimulationResult(
    run_id => 14,
    "insPos_xyz" => WorkspaceArray{Matrix{Float64}}("simulate_ins_block/insPos_xyz")
,
    "vehPos_xyz" => WorkspaceArray{Vector{Float64}}("simulate_ins_block/vehPos_xyz")

)
image.png

该模型由两部分组成:数据导入,使用ANN块降噪,以及用于显示结果的图形(也可在信号可视化面板上获得)。

FromWorkspace 它需要一个特殊的WorkspaceArray格式,我们之前创建的对象。 它大大简化了实验数据的插值和外推。

结论

从图中可以看出,尽管输出数据与输入数据相当接近,但ANN模块增加了一定量的测量噪声。