此示例可视化从一个模拟无人驾驶飞行器(UAV)飞行莫纳罗亚基线天文台到的顶部Mauna Loa Volcano在夏威夷。首先,显示在地理坐标轴的轨道和地理地球。然后,同步视图,并通过使用相机导航功能可视化的飞行路径。最后,查看冒纳罗亚火山的全景的顶部。
使用无人机跟踪火山周围不断变化的拓扑结构、气体和火山灰云的特征,正成为科学家们研究的一个重要领域。无人机可以在火山学家危险的地区飞行。在派遣无人机执行任务之前,模拟无人机的飞行路径可以帮助理解拓扑和地形。为了获得该地区的概况和二维视角,可以在地理轴上查看莫纳罗亚基线天文台和莫纳罗亚火山的位置。
指定Mauna Loa基线天文台的坐标[2]。天文台的高度在平均海平面上方(MSL)。
obslat = 19.5362;obslon = -155.5763;OBSH = 3397.00;
指定莫纳罗亚[3]的顶部的坐标。火山的高度为正高,是米。
mllat = 19.475;mllon = -155.608;MLH = 4169;
对于区域的二维透视,使用地理石
和地球格林
绘制天文台的位置和火山的顶部。
图geoaxes (“底图”那“卫星”那“ZoomLevel”,12);保持(“开”)Geoplot(Obslat,obslon,“噢”那“Markersize”10,“MarkerFaceColor”那“紫色”那......“显示名称”那“莫纳罗亚火山天文台”);geoplot (mllat mllon,“噢”那“Markersize”10,“MarkerFaceColor”那“蓝色”那......“显示名称”那“Mauna Loa Volcanao”);传说
使用地理坐标轴,以查看在2- d和地理地球天文台在3-d可查看天文台。
通过在同一UI图中创建地理轴和地理全球设置2-D和3-D MAP显示。要查看更多的2-D映射,请设置内在
地理轴到的其OuterPosition
。用相同的底图查看两个地图显示中,设置地理轴的底图为“卫星”。
图中= [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];
查看从200米的地形之上的天文台。通过改变其地图中心和缩放级别控制的地理坐标轴的图。您可以通过全球范围内的摄像头高度转换成缩放级别轴同步与地理地球视图的地理坐标轴的视图。通过计算从地形高度近似的缩放级别heightToZoomLevel
本地功能。
heightAboveTerrain = 200;gx。MapCenter = [obslat, obslon];zoomLevel = heightToZoomLevel(heightAboveTerrain, obslat);gx。ZoomLevel = ZoomLevel;
通过改变相机的位置来控制地球地球的视图。当坎波斯
功能要求指定椭球高(相对于WGS84椭球),而不是正高(相对于平均海平面)。转换天文台椭球高度的高度。所有高度在米。
N = egm96大地水准面(obslat, obslon);obsh = obsh + N;ellipsoidalHeight = obsh + heightAboveTerrain;坎波斯(gg, obslat obslon ellipsoidalHeight) drawnow
导入从莫纳罗亚山天文台基线的模拟飞行轨道的冒纳罗亚火山的顶部。该文件包含纬度,经度和无人机路径的高度,参照平均海平面。
TRK = gpxread(“sample_uavtrack.gpx”);TLAT = trk.Latitude;tlon = trk.Longitude;talt = trk.Elevation;
计算每个轨道点的UAV使用方位
功能。
WGS84 = wgs84Ellipsoid;theading =方位角(TLAT(1:结束-1),tlon(1:结束-1),TLAT(2:结束),tlon(2:结束),WGS84);theading = [theading(1); theading(:)];
计算无人机飞行轨道的累积距离。当距离
功能不考虑海拔或高度的变化。为了计算无人机在三维空间从一点移动到另一点的距离,你需要在地心笛卡尔坐标(X, Y, Z)下工作Ecefoffset.
功能。无人机飞行的海拔高度数据是参照平均海平面。用来Ecefoffset.
功能,必须引用椭圆体的高度。将飞行轨道的偏心高度转换为椭圆形高度(相对于WGS84椭圆体)。所有高度在米。
n = EGM96GEOID(TLAT,TLON);h = talt + n;
计算距离偏移。
LAT1 = TLAT(1:端1);Lat2 = TLAT(2:结束);lon1 = tlon(1:end-1);lon2 = tlon(2:结束);H1 = H(1:结束-1);H2 = H(2:结束);[dx,dy,dz] = eCefoffset(WGS84,Lat1,Lon1,H1,Lat2,Lon2,H2);
计算每对使用相邻点之间的欧几里德距离hypot将
功能。距离以米为单位。
distanceIncrementIn3D = hypot(hypot(dx, dy), dz);
计算3-D的累计距离和总距离,单位为米。
cumulativeDistanceIn3D = cumsum(distanceIncrementIn3D);totalDistanceIn3D =总和(distanceIncrementIn3D);fprintf中(“总无人机的轨道距离%F米。\ n”,totalDistanceIn3D)
总无人机航迹距离是8931.072120米。
为累积距离分配变量以用于绘制动画。
TDIST = [0 cumulativeDistanceIn3D];
从Mauna Loa基线天文台绘制模拟的飞行线到Mauna Loa火山的顶部。
画出飞行路线。默认情况下,地理地球仪将这条线放在显示的中心。保持地理轴以保存底图。它的位置不会改变,因为您之前设置了MapCenter.
和ZoomLevel
。
Geoplot3(GG,Tlat,Tlon,Talt,“c”那“线宽”2,“HeightReference”那“大地水准面”)持有(GX,“开”)ptrack = geoplot(GX,TLAT,tlon,“c”那“线宽”,2);
设置地图中心和缩放级别为与通过转换照相机高度用于全球缩放级别为轴上的3-d观点是一致的。
[Clat,Clon,Cheight] = Campos(GG);gx.mapcenter = [clat,clon];gx.zoomlevel = heeditytozoomlevel(Cheight,Clat);drawn
通过将相机位置设置为轨道的第一个坐标,从起始位置查看飞行线。为了更好的角度,将相机高度设置为轨道高度为75米。通过将相机音高设置为-90,直接查看到观察台。通过将标题设置为计算出标题阵列的第三个元素来查看轨道,因为轨道的前两个点是相同的位置,并且这些位置的计算标题为0。
迪坎普斯(GG,TLAT(1),tlon(1))camheight(GG,talt(1)+ 75)campitch(GG,-90)camheading(GG,theading(3))
在二维地图上显示无人机的位置,用标记物标出飞行轨迹的起始和结束位置。为无人机轨迹和标记创建一个图例。
Marker = 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”那“蓝色”);marker.displayname =.“当前位置”;mstart。DisplayName =“开始位置”;修补。DisplayName =“终点”;ptrack。DisplayName =“无人机跟踪”;传奇(GX)
通过修改基础图,查看区域的拓扑。
gx。基础图=“地形”;
使用与无人机位置相对应的自定义数据提示查看无人机的坐标位置、高度和航向。包括到天文台的距离。
DT =数据提示(ptrack,“DataIndex”,1,“地点”那“东南”);dtrow = dataTiptextrow(“距离”,TDIST);dtrow(端+ 1)= dataTipTextRow(“高度”,talt);dtrow(端+ 1)= dataTipTextRow(“朝向”, theading);ptrack.DataTipTemplate.DataTipRows(端+ 1:端+ 3)= dtrow;
向Mauna LoA基线天文台的飞行到Mauna Loa火山的顶部。通过动画标记和数据提示查看UAV在2-D Map上的位置。通过设置相机位置,为三维航班进行动画。为了更好地查看无人机轨道,将相机高度设置为100米以上飞行轨道。更新摄像机间距值,以便更好地查看飞行轨道,因为UAV导航到Volcano的顶部。要查看无人机的当前位置,高度和标题,请使用当前索引更新数据提示。
距= -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;rawso暂停(.25)结束坎波斯(gg tlat(结束),tlon(结束),talt(结束)+ 100)dt。DataIndex =长度(tlat);
从莫纳罗亚山顶旋转摄像机360度全景。顺时针旋转,步长为5度,从下一个5度的步骤开始。更新标题数据提示。
initialHeading = camheading(GG);增量= 5;initialHeading = initialHeading +(增量 - MOD(initialHeading,增量));文件名='panoramic.gif';对于学位= italite头:增量:initialhing + 360标题= mod(学位,360);ptrack.datatiptemplate.datatiprows(结束).value(dt.dataindex)=标题;凸轮头(GG,标题);drawn结束
函数个zoomLevel = heightToZoomLevel(高度,LAT)earthCircumference = 2 * PI * 6378137;个zoomLevel = LOG2((earthCircumference * COSD(LAT))/高度)+ 1;个zoomLevel = MAX(0,当zoomLevel =);个zoomLevel =分钟(19个zoomLevel);结束
[1]威廉姆斯,莎拉C.“P.”用空中无人机研究火山喷发。“美国国家科学院的诉讼程序110,没有。27(2013年7月2日):10881。https://doi.org/10.1073/pnas.1309922110。
[2] NOAA。“冒纳罗亚基线天文台”。全球监测实验室。进入2020年6月16日。https://www.esrl.noaa.gov/gmd/obop/mlo/。
[3] USGS。“Mauna Loa。”夏威夷火山天文台。进入2020年6月16日。https://www.usgs.gov/volcanoes/mauna-loa。