exponenta event banner

Визуализация траектории полета БПЛА на картах 2-D и 3-D

В этом примере изображен имитационный полет беспилотного летательного аппарата (БПЛА) из базовой обсерватории Мауна-Лоа на вершину вулкана Мауна-Лоа на Гавайях. Сначала отобразите дорожку на географических осях и географическом шаре. Затем синхронизируйте вид и визуализируйте траекторию полета с помощью функций навигации камеры. Наконец, посмотрите на вершину вулкана Мауна-Лоа как на панораму.

Визуализация региона, представляющего интерес для 2-D

Использование БПЛА для отслеживания характеристик изменения топологии, газов и пепловых облаков вокруг вулканов становится важной областью исследований для ученых [1]. БПЛА может путешествовать в опасных для вулканолога регионах. Моделирование траектории полета БПЛА перед отправкой его на задание может помочь в понимании топологии и рельефа местности. Для получения обзора и 2-D перспективы региона просмотрите местоположение базовой обсерватории Мауна-Лоа и вулкана Мауна-Лоа по географическим осям.

Получить координаты базовой обсерватории Мауна-Лоа

Укажите координаты базовой обсерватории Мауна-Лоа [2]. Высота обсерватории - в метрах над средним уровнем моря (MSL).

obslat = 19.5362;
obslon = -155.5763;
obsH = 3397.00;

Получить координаты вулкана Мауна-Лоа

Укажите координаты вершины Mauna Loa [3]. Высота вулкана ортометрическая и составляет в метрах.

mllat = 19.475;
mllon = -155.608;
mlH = 4169;

Просмотр базовой обсерватории Мауна-Лоа и вулкана Мауна-Лоа в 2-D

Для 2-D перспективы региона используйте geoaxes и geoplot для построения графика расположения обсерватории и вершины вулкана.

figure
geoaxes("Basemap","satellite","ZoomLevel",12);
hold("on")
geoplot(obslat,obslon,"ow","MarkerSize",10,"MarkerFaceColor","magenta", ...
    "DisplayName","Mauna Loa Observatory");
geoplot(mllat,mllon,"ow","MarkerSize",10,"MarkerFaceColor","blue", ...
    "DisplayName","Mauna Loa Volcanao");
legend

Синхронизировать вид базовой обсерватории Мауна Лоа в 2-D и 3-D

Используйте географические оси для просмотра обсерватории в 2-D и географический земной шар для просмотра обсерватории в 3-D.

Создание географических осей и географического глобуса на одном рисунке

Настройте отображение карты 2-D и 3-D, создав географические оси и географический глобус на одном и том же рисунке пользовательского интерфейса. Чтобы просмотреть больше карты 2-D, установите InnerPosition географических осей к его OuterPosition. Для просмотра обоих отображений карты с одной и той же базовой картой установите для базовой карты географических осей значение «satellite».

figpos = [1000 500 800 400];
uif = uifigure("Position",figpos);
ug = uigridlayout(uif,[1,2]);
p1 = uipanel(ug);
p2 = uipanel(ug);
gx = geoaxes(p1,"Basemap","satellite"); 
gg = geoglobe(p2); 
gx.InnerPosition = gx.OuterPosition;
gg.Position = [0 0 1 1];

Видовая обсерватория в 2-D

Вид на обсерваторию с 200 метров над местностью. Управление видом географических осей осуществляется путем изменения центра карты и уровня зумирования. Можно синхронизировать вид географических осей с видом географического земного шара путем преобразования высоты камеры земного шара в уровень масштабирования для осей. Рассчитайте приблизительный уровень масштабирования по высоте рельефа с помощью команды heightToZoomLevel локальная функция.

heightAboveTerrain = 200;
gx.MapCenter = [obslat, obslon];
zoomLevel = heightToZoomLevel(heightAboveTerrain, obslat);
gx.ZoomLevel = zoomLevel;

Видовая обсерватория в 3-D

Управление видом географического земного шара путем изменения положения камеры. campos функция требует указания эллипсоидальной высоты (относительно WGS84 эллипсоида) вместо ортометрической высоты (относительно среднего уровня моря). Преобразуйте высоту обсерватории в эллипсоидальную высоту. Все высоты в метрах.

N = egm96geoid(obslat, obslon);
obsh = obsH + N;
ellipsoidalHeight = obsh + heightAboveTerrain;
campos(gg,obslat,obslon,ellipsoidalHeight)
drawnow

Импорт данных траектории полета и расчет курса и расстояния 3-D

Импорт смоделированной трассы полета из базовой обсерватории Мауна-Лоа на вершину вулкана Мауна-Лоа. Файл содержит широты, долготы и высоты траектории БПЛА, относящиеся к среднему уровню моря.

trk = gpxread("sample_uavtrack.gpx");
tlat = trk.Latitude;
tlon = trk.Longitude;
talt = trk.Elevation;

Расчет заголовков рейсов

Рассчитать курс БПЛА в каждом путевом пункте с помощью azimuth функция.

wgs84 = wgs84Ellipsoid;
theading = azimuth(tlat(1:end-1),tlon(1:end-1),tlat(2:end),tlon(2:end),wgs84);
theading = [theading(1);theading(:)];

Расчет расстояний 3-D

Рассчитать накопленную дистанцию для траектории полета БПЛА. distance функция не учитывает изменения высоты или высоты. Для того чтобы рассчитать расстояние, на которое БПЛА перемещается из точки в точку 3-D, нужно работать в геоцентрических декартовых координатах (X, Y, Z). Вычислите компоненты двухточечного смещения (в метрах) с помощью ecefOffset функция. Высотные данные полета БПЛА привязаны к среднему уровню моря. Для использования ecefOffset , высоты должны быть привязаны к эллипсоиду. Преобразуйте ортометрические высоты следа полета к эллипсоидальной высоте (относительно эллипсоида WGS84). Все высоты в метрах.

N = egm96geoid(tlat,tlon);
h = talt + N;

Вычисление смещений расстояний.

lat1 = tlat(1:end-1);
lat2 = tlat(2:end);
lon1 = tlon(1:end-1);
lon2 = tlon(2:end);
h1 = h(1:end-1);
h2 = h(2:end);
[dx,dy,dz] = ecefOffset(wgs84,lat1,lon1,h1,lat2,lon2,h2);

Вычислите евклидово расстояние между каждой парой смежных точек, используя hypot функция. Расстояние в метрах.

distanceIncrementIn3D = hypot(hypot(dx, dy), dz);

Вычислите суммарное расстояние в 3-D и общее расстояние в метрах.

cumulativeDistanceIn3D = cumsum(distanceIncrementIn3D);
totalDistanceIn3D = sum(distanceIncrementIn3D);
fprintf("Total UAV track distance is %f meters.\n",totalDistanceIn3D)
Total UAV track distance is 8931.072120 meters.

Назначьте переменную для суммарного расстояния, используемого для печати анимации.

tdist = [0 cumulativeDistanceIn3D];

Участок линии полета от базовой обсерватории Мауна-Лоа до вершины вулкана Мауна-Лоа

Постройте график смоделированной линии полета от базовой обсерватории Мауна-Лоа до вершины вулкана Мауна-Лоа.

Постройте график линии полета. По умолчанию географический глобус размещает линию в центре экрана. Для сохранения базовой карты удерживайте географические оси. Его расположение не изменится, поскольку вы ранее установили MapCenter и ZoomLevel.

geoplot3(gg,tlat,tlon,talt,"c","LineWidth",2,"HeightReference","geoid")
hold(gx,"on")
ptrack = geoplot(gx,tlat,tlon,"c","LineWidth",2);

Установите центр карты и уровень зумирования в соответствии с видом 3-D путем преобразования высоты камеры для земного шара в уровень зумирования для осей.

[clat,clon,cheight] = campos(gg);
gx.MapCenter = [clat,clon];
gx.ZoomLevel = heightToZoomLevel(cheight, clat);
drawnow

Установить первоначальный вид из базовой обсерватории Мауна-Лоа на вершину вулкана Мауна-Лоа

Просмотр линии полета из начального положения путем установки положения камеры в первую координату трассы. Для лучшей перспективы установите высоту камеры на 75 метров относительно высоты дорожки. Посмотрите прямо в обсерваторию, установив шаг камеры на -90. Просмотрите дорожку, установив заголовок для третьего элемента массива рассчитанных заголовков, поскольку первые две точки дорожки находятся в одном и том же месте, а рассчитанный заголовок для этих мест равен 0.

campos(gg,tlat(1),tlon(1))
camheight(gg,talt(1) + 75)
campitch(gg,-90)
camheading(gg,theading(3))

Показать местоположение БПЛА на карте 2-D, а также начальное и конечное расположение трассы полета с маркерами. Создать легенду для трассы БПЛА и маркеров.

marker = geoplot(gx,tlat(1),tlon(1),"ow","MarkerSize",10,"MarkerFaceColor","k");
mstart = geoplot(gx,tlat(1),tlon(1),"ow","MarkerSize",10,"MarkerFaceColor","magenta");
mend = geoplot(gx,tlat(end),tlon(end),"ow","MarkerSize",10,"MarkerFaceColor","blue");

marker.DisplayName = "Current Location";
mstart.DisplayName = "Start Location";
mend.DisplayName = "End Location";
ptrack.DisplayName = "UAV Track";
legend(gx)

Просмотрите топологию области, изменив базовую карту.

gx.Basemap = "topographic";

Просмотреть координатное расположение, высоту и курс БПЛА с помощью пользовательской подсказки данных, соответствующей местоположению БПЛА. Включить расстояние от обсерватории.

dt = datatip(ptrack,"DataIndex",1,"Location","southeast");
dtrow = dataTipTextRow("Distance",tdist);
dtrow(end+1) = dataTipTextRow("Altitude",talt);
dtrow(end+1) = dataTipTextRow("Heading",theading);
ptrack.DataTipTemplate.DataTipRows(end+1:end+3) = dtrow;

Полет из базовой обсерватории Мауна-Лоа на вершину вулкана Мауна-Лоа

Анимация полета из базовой обсерватории Мауна-Лоа на вершину вулкана Мауна-Лоа. Просмотрите местоположение БПЛА на карте 2-D, анимировав маркер и подсказку данных. Анимация 3-D полета путем установки положения камеры. Для лучшего обзора трассы БПЛА установите высоту камеры на 100 метров над трассой полета. Обновите значение шага камеры для лучшего обзора траектории полета, когда БПЛА перемещается на вершину вулкана. Для просмотра текущего местоположения, высоты и курса БПЛА обновите наконечник данных текущим индексом.

pitch = -2.7689;
campitch(gg,pitch)

for k = 2:(length(tlat)-1)    
    campos(gg,tlat(k),tlon(k))
    camheight(gg,talt(k)+100)
    camheading(gg,theading(k))
    
    set(marker,"LatitudeData",tlat(k),"LongitudeData",tlon(k));
    dt.DataIndex = k;
    
    drawnow
    pause(.25)
end

campos(gg,tlat(end),tlon(end),talt(end)+100)
dt.DataIndex = length(tlat);

Вид на панораму 360-Degree с вершины вулкана Мауна-Лоа

Просмотрите панораму на 360 градусов с вершины Mauna Loa, повернув курс камеры на 360 градусов. Поверните по часовой стрелке с размером шага 5 градусов и начните со следующего шага 5 градусов. Обновите подсказку данных заголовка.

initialHeading = camheading(gg);
increment = 5;
initialHeading = initialHeading + (increment - mod(initialHeading,increment));

filename = 'panoramic.gif';
for degree = initialHeading:increment:initialHeading+360
    heading = mod(degree,360);
    ptrack.DataTipTemplate.DataTipRows(end).Value(dt.DataIndex) = heading;
    camheading(gg,heading);
    drawnow
end

Локальные функции

Высота новообращенного (в метрах выше эллипсоида WGS84), чтобы Изменить масштаб изображения Уровня

function zoomLevel = heightToZoomLevel(height, lat)
    earthCircumference = 2 * pi * 6378137;
    zoomLevel = log2((earthCircumference *cosd(lat)) / height) + 1;
    zoomLevel = max(0, zoomLevel);
    zoomLevel = min(19, zoomLevel);
end

Ссылки

[1] Уильямс, Сара К. П. «Изучение вулканических извержений с помощью воздушных дронов». Труды Национальной академии наук Соединенных Штатов Америки 110, № 27 (2 июля 2013 года): 10881. https://doi.org/10.1073/pnas.1309922110.

[2] NOAA. «Базовая обсерватория Мауна Лоа». Лаборатория глобального мониторинга. Доступ состоялся 16 июня 2020 года. https://www.esrl.noaa.gov/gmd/obop/mlo/.

[3] USGS. «Мауна Лоа.» Гавайская вулканская обсерватория. Доступ состоялся 16 июня 2020 года. https://www.usgs.gov/volcanoes/mauna-loa.

См. также

Функции

Объекты

Свойства

Связанные темы