主要内容

在2 d和3 d地图可视化无人机飞行路径

这个例子中可视化模拟无人机(UAV)飞行的莫纳罗亚山基线天文台的顶部莫纳罗亚山火山在夏威夷。首先,显示全球地理轴和地理上的追踪。然后,同步视图和可视化飞行路径通过使用相机的导航功能。最后,视图顶部的火山莫纳罗亚山全景。

二维可视化地区的兴趣

无人机的使用来跟踪变化的拓扑结构特点,气体和火山灰在火山正成为一个重要的研究领域,科学家[1]。一个无人机可以在区域旅游危险的火山学家。模拟无人机的飞行路径之前发送出来的使命可以协助了解拓扑和地形。获得二维区域的角度,概述视图的位置莫纳罗亚山基线天文台和火山莫纳罗亚山地理轴。

得到的坐标莫纳罗亚山基线天文台

指定的坐标莫纳罗亚山基线天文台[2]。天文台是米的高度高于平均海平面(实验室)。

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

莫纳罗亚山火山的坐标

指定的坐标的莫纳罗亚山[3]。火山的高度是正交的,单位是米。

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

视图莫纳罗亚山基线天文台,在二维莫纳罗亚山火山

对于一个二维的角度,使用geoaxesgeoplot绘制的位置天文台和火山的顶端。

图geoaxes (“技术”,“卫星”,“ZoomLevel”,12)geoplot (obslat obslon,“噢”,“MarkerSize”10“MarkerFaceColor”,“红色”,“DisplayName”,“莫纳罗亚山天文台”)geoplot (mllat mllon,“噢”,“MarkerSize”10“MarkerFaceColor”,“蓝色”,“DisplayName”,“莫纳罗亚山火山”传说)

图包含一个坐标轴对象。坐标轴对象包含2线类型的对象。这些对象代表莫纳罗亚山天文台,莫纳罗亚山火山。

同步的莫纳罗亚山基线天文台在2 d和3 d

使用地理轴视图天文台在二维地理全球3 d视图天文台。

在相同的图创建全球地理轴和地理

建立一个2 d和3 d地图显示通过创建地理轴和地理全球在同一界面图。查看更多的二维地图,设置InnerPosition地理轴的OuterPosition。查看两个地图显示相同的技术,地理的基础图轴设置为“卫星”。

figpos = (1000 500 800 400);uif = uifigure (“位置”,figpos);ug = uigridlayout (uif [1, 2]);p1 = uipanel (ug);p2 = uipanel (ug);gx = geoaxes (p1,“技术”,“卫星”);gg = geoglobe (p2);gx。InnerPosition = gx.OuterPosition;gg.Position = (0 0 1 1);

snapshot_1.jpg

在二维视图天文台

查看天文台从200米高的地形。地理轴的控制视图通过改变其地图中心和缩放级别。你可以同步地理轴与视图的视图的地理全球将全球的相机高度转换为轴的缩放级别。计算出一个近似从地形高度使用缩放级别heightToZoomLevel本地函数。

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

在三维视图天文台

控制全球地理的观点通过改变镜头的位置。的坎波斯函数需要您指定大地高(相对于WGS84椭球)而不是正高(相对于平均海平面)。天文台的高度转换为椭球面高度。所有高度都在米。

N = egm96geoid (obslat obslon);obsh = obsh + N;ellipsoidalHeight = obsh + heightAboveTerrain;坎波斯(gg, obslat obslon ellipsoidalHeight) drawnow

snapshot_2.jpg

进口飞行轨迹数据和计算和三维距离

进口莫纳罗亚山基线的模拟飞行轨道天文台莫纳罗亚山火山的顶端。文件包含纬度、经度和海拔的无人机路径,引用的平均海平面。

T = readgeotable (“sample_uavtrack.gpx”,“层”,“track_points”);tlat = T.Shape.Latitude ';tlon = T.Shape.Longitude ';talt = T.Elevation ';

计算飞行标题

计算无人机在每个跟踪点使用方位函数。

wgs84 = wgs84Ellipsoid;theading =方位(tlat (1: end-1) tlon (1: end-1) tlat(2:结束),tlon(2:结束),wgs84);theading = [theading (1); theading (:));

计算三维距离

计算累积距离无人机的飞行轨道。的距离函数没有考虑海拔或高度的变化。为了计算无人机从点对点的距离在3 d,你需要工作在地心笛卡尔坐标(X, Y, Z)。计算点对点的偏移量(单位:米)使用组件ecefOffset函数。无人机飞行的高度数据引用到平均海平面。使用ecefOffset函数,必须参考椭球。将正交的高度飞行轨道的大地高(相对于WGS84椭球)。所有高度都在米。

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

计算距离补偿。

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

计算每一对相邻点之间的欧几里得距离使用函数的函数。是米的距离。

distanceIncrementIn3D =函数(函数(dx, dy), dz);

计算累积距离在3 d和总距离米。

cumulativeDistanceIn3D = cumsum (distanceIncrementIn3D);totalDistanceIn3D =总和(distanceIncrementIn3D);流(“总无人机跟踪距离是% f米。\ n”totalDistanceIn3D)
总无人机跟踪距离是8931.072120米。

分配一个变量的累积距离用于绘制动画。

tdist = [0 cumulativeDistanceIn3D];

情节航线从莫纳罗亚山基线天文台莫纳罗亚山火山的顶部

情节莫纳罗亚山基线的模拟飞行天文台莫纳罗亚山火山的顶端。

绘制航线。默认情况下,全球地理位置的中心显示。地理轴的观点不会改变,因为你之前设置MapCenterZoomLevel

geoplot3 (gg, tlat tlon talt,“c”,“线宽”2,“HeightReference”,“大地水准面”)ptrack = geoplot (gx、tlat tlon,“c”,“线宽”2);

设置地图中心,符合三维视图的缩放级别转换相机高度为全球的缩放级别轴。

[clat,克隆,cheight] =坎波斯(gg);gx。MapCenter = (clat,克隆);gx。ZoomLevel = heightToZoomLevel (cheight clat);drawnow

snapshot_3.jpg

设置初始视图从莫纳罗亚山基线天文台莫纳罗亚山火山的顶部

从一开始查看飞行线位置通过设置相机位置的第一个坐标跟踪。了一个更好的视角,设置相机高度75米的高度。视图直接到天文台通过设置相机到-90。查看跟踪通过设置标题标题计算的第三个元素数组以来的第一个两个点跟踪相同的位置,计算前往这些位置是0。

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

在二维地图显示无人机的位置,和飞行的开始和结束位置跟踪标记。创建一个传奇无人机跟踪和标记。

持有(gx“上”)= geoplot标志(gx tlat (1) tlon (1),“噢”,“MarkerSize”10“MarkerFaceColor”,“k”);mstart = geoplot (gx tlat (1) tlon (1),“噢”,“MarkerSize”10“MarkerFaceColor”,“红色”);修补= geoplot (gx tlat(结束),tlon(结束),“噢”,“MarkerSize”10“MarkerFaceColor”,“蓝色”);标记。DisplayName =“当前位置”;mstart。DisplayName =“开始位置”;修补。DisplayName =“位置”;ptrack。DisplayName =“无人机跟踪”;传奇(gx)

查看该地区的拓扑结构通过改变技术。

gx。基础图=“地形”;

视图坐标位置、高度和航向的无人机通过使用自定义数据提示与无人机的位置相对应。包括天文台的距离。

dt = datatip (ptrack“DataIndex”,1“位置”,“东南”);dtrow = dataTipTextRow (“距离”,tdist);dtrow结束(+ 1)= dataTipTextRow (“高度”,talt);dtrow结束(+ 1)= dataTipTextRow (“标题”,theading);ptrack.DataTipTemplate.DataTipRows(端+ 1:端+ 3)= dtrow;

snapshot_4.jpg

从莫纳罗亚山基线天文台飞往莫纳罗亚山火山的顶部

动画从莫纳罗亚山基线天文台飞往火山莫纳罗亚山的顶部。视图的位置通过无人机在二维地图上的标记和数据提示。动画的3 d飞行通过设置相机的位置。更好的无人机跟踪,设置相机高度100米以上飞行轨道。更新相机的音高值更好的视图飞行的无人机导航到火山的顶端。查看当前位置、高度和航向的无人机,更新数据提示与当前索引。

距= -2.7689;campitch (gg,音高)k = 2:(长度(tlat) 1)坎波斯(gg, tlat (k), tlon (k) camheight (gg, talt (k) + 100) camheading (gg, theading (k)集(标记,“LatitudeData”tlat (k),“LongitudeData”,tlon (k));dt。DataIndex = k;drawnow暂停(或25)结束坎波斯(gg tlat(结束),tlon(结束),talt(结束)+ 100)dt。DataIndex =长度(tlat);

uav_track.gif

查看360度全景从莫纳罗亚山火山的顶部

查看360度全景从莫纳罗亚山旋转摄像机航向360度。顺时针旋转5度的步长,开始下一个5度的步骤。更新标题数据提示。

initialHeading = camheading (gg);增量= 5;initialHeading = initialHeading +(增量- mod (initialHeading增量));文件名=“panoramic.gif”;度= initialHeading:增量:initialHeading + 360标题= mod(学位,360);ptrack.DataTipTemplate.DataTipRows(结束)value (dt.DataIndex) =标题;camheading (gg,标题);drawnow结束

snapshot_end.jpg

本地函数

身高(米WGS84椭球)转换为缩放级别

函数zoomLevel = heightToZoomLevel(高度,lat) earthCircumference = 2 *π* 6378137;zoomLevel = log2 ((earthCircumference * cosd (lat)) /高度)+ 1;zoomLevel = max (0, zoomLevel);zoomLevel zoomLevel = min(19日);结束

引用

[1]威廉姆斯,莎拉·c·p·“与无人机研究火山喷发。”美国国家科学院院刊》上的美利坚合众国110年,没有。27日(2013年7月2日):10881。https://doi.org/10.1073/pnas.1309922110

[2]美国国家海洋和大气管理局。“莫纳罗亚山基线天文台。“全球监测实验室。2020年6月16日通过。https://gml.noaa.gov/obop/mlo/

[3]美国地质调查局。“莫纳罗亚山。“夏威夷火山观测站。2020年6月16日通过。https://www.usgs.gov/volcanoes/mauna-loa

另请参阅

功能

对象

属性

相关的话题