Сообщество Engee

Модель GPS: погрешности траектории

Автор
avatar-nkapyrinnkapyrin
Notebook

Моделирование шума датчика GPS

В этом примере показано, как использовать блок GPS для моделирования шума, который датчик ГНСС добавляет к входным сигналам положения и скорости.

Описание модели

Эта модель задает траекторию, генерируя значения по координатам X, Y, Z (как положение, так и скорость) в виде отдельных синусоидальных сигналов и объединяет их с помощью блоков Mux.

Поскольку блок ГНСС (GPS) требует дискретных сигналов, векторы положения и скорости проходят через блоки Rate Transition и только затем попадают на входы портов положение (Position) и скорость (Velocity) блока GPS. Все параметры блока GPS оставлены неизменными кроме параметра Vertical position accuracy (Погрешность положения по вертикали), которая установлена на 1.5 м чтобы соответствовать масштабу траектории.

Откроем эту модель:

In [ ]:
cd(@__DIR__) # Переход в папку с примером
engee.open("simulate-gps-sensor-noise.engee");
image.png

В модели есть блок Engee Function, в котором реализован код для преобразования параметров истинного положения из топоцентрической системы координат в геодезическую.

Запустим модель:

In [ ]:
data = engee.run("simulate-gps-sensor-noise");

И сравним выходные сигналы блока GPS с истинными значениями сигналов.

In [ ]:
plot(
    plot( data["Истин.Шир/Дол"].time,
        [first.(data["Истин.Шир/Дол"].value) last.(data["Истин.Шир/Дол"].value) first.(data["ГНСС Шир/Дол"].value) last.(data["ГНСС Шир/Дол"].value)],
        lw=2, titlefont=font(11), guidesfont=font(8),
        xlabel="Время, с", ylabel="Градусы", title="Широта и долгота (Истинная и по ГНСС)"),
    plot( data["Истин.Высота"].time, [data["Истин.Высота"].value first.(data["ГНСС Высота"].value)],
        lw=2, titlefont=font(11), guidesfont=font(8),
        xlabel="Время, с", ylabel="Высота, м", title="Высота (Истинная и по ГНСС)" ),
    layout=(1,2), size=(900,400), leg=false
)
Out[0]:

Также изучим измерения скорости:

In [ ]:
plot(
    plot(data["Курс"].time, first.(data["Курс"].value), title="Курс по GPS", lw=2, titlefont=font(11), guidesfont=font(8), xlabel="Время, с", ylabel="Градусы"),
    plot(data["Скорость"].time, [reduce(vcat, data["Скорость"].value) reduce(vcat, data["Истин.Скорость"].value)], title="Скорость (истинная и по ГНСС)", lw=2, titlefont=font(11), guidesfont=font(8), xlabel="Время, с", ylabel="Метры в секунду"),
    plot(data["Путевая скорость"].time, first.(data["Путевая скорость"].value), title="Путевая скорость по ГНСС", lw=2, titlefont=font(11), guidesfont=font(8), xlabel="Время, с", ylabel="Метры в секунду"),
    layout=(1,3), size=(900,300), leg=false
)
Out[0]:

Заключение

Мы проверили работу блока GPS и убедились в возможности добавления в модель сложных моделей погрешности и расчета зашумленных показателей траектории.