主要内容gydF4y2Ba

无人机飞行仪表仪表可视化gydF4y2Ba

导入和可视化无人机飞行日志使用3-D动画和飞行仪表仪表。这个例子在MATLAB®中获得了飞行性能的高级概述gydF4y2Ba飞行仪表gydF4y2Ba(航天工具箱)gydF4y2Ba航天工具箱™中的功能。然后,要在Simulink®中的自定义接口中查看信号,示例使用金宝appgydF4y2Ba飞行仪表gydF4y2Ba(航天Blockset)gydF4y2Ba飞行仪表gydF4y2Ba(航天Blockset)gydF4y2Ba来自Aerospace Blockset™的块gydF4y2Ba

实例从ULOG文件中提取感兴趣的信号,并在MATLAB中回放无人机飞行轨迹。然后,这些信号用仪器块在Simulink模型中重播。金宝appgydF4y2Ba

导入飞行日志gydF4y2Ba

无人机日志文件定期记录有关飞行的信息。这些信息可以让我们深入了解飞行性能。飞行仪表仪表显示导航变量,如无人机的态度,高度和航向。本例的ULOG日志文件是从Gazebo模拟器中运行的飞机模型中获得的。gydF4y2Ba

使用导入日志文件gydF4y2BaulogreadergydF4y2Ba.创建一个gydF4y2BaflightLogSignalMappinggydF4y2BaULOG文件。gydF4y2Ba

为了理解信号、单位和它们的参考系的约定,检查中的信息gydF4y2Ba绘图机gydF4y2Ba对象。在将信号连接到飞行仪表仪表时,日志文件中有关单位的信息变得非常重要。gydF4y2Ba

数据= uloreader (gydF4y2Ba“flight.ulg”gydF4y2Ba);绘图器= flightLogSignalMapping(gydF4y2Ba“ulog”gydF4y2Ba);信息(绘图机,gydF4y2Ba“信号”gydF4y2Ba)gydF4y2Ba
ans =gydF4y2Ba18×4表gydF4y2BaSignalName IsMapped SignalFields FieldUnits  _____________________ ________ __________________________________________________________________________________________________________________________________________________________________________________________________________ ___________________________________________________ " Accel“true”AccelX、访问AccelZ”“米/秒^ 2,m / s ^ 2米/秒^ 2”“空速PressDiff“真实”,IndicatedAirSpeed,温度”“爸爸,m / s, degreeC”“AttitudeEuler“true”卷,Pitch, Yaw" "rad, rad, rad" " attitude erate " true "BodyRotationRateX, BodyRotationRateY, BodyRotationRateZ" "rad/s, rad/s, rad/s" "AttitudeTargetEuler" true "RollTarget, PitchTarget, YawTarget" "rad, rad, rad" "Barometer" true "PressAbs, PressAltitude, Temperature" "Pa, m, degreeC" "Battery" true "Voltage_1, Voltage_2, Voltage_3, Voltage_4, Voltage_5, Voltage_6, Voltage_7, Voltage_8, Voltage_9, Voltage_11, Voltage_12, Voltage_13, Voltage_14, Voltage_15, Voltage_16, Voltage_16, Voltage_12, Voltage_13, Voltage_14, Voltage_15, Voltage_16,RemainingCapacity”“v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, % " " GPS“真正”的纬度,经度,高度,水平速度,CourseAngle, SatellitesVisible”“学位,学位,m, m / s,学位,N / A”“陀螺”真正的“GyroX GyroY, GyroZ”“rad / s, rad / s, rad / s”“LocalENU“真正”的X, Y, Z”“m m, m”“LocalENUTarget XTarget“真实”,YTarget, ZTarget”“m, m m”“LocalENUVel“true”VX, v, VZ”“m / s, m / s, m / s”“LocalENUVelTarget VXTarget“真实”,VYTarget, VZTarget”“m / s, m / s, m / s”“LocalNED“真正”的X, Y, Z”“m,m, m" LocalNEDTarget" true "XTarget, YTarget, ZTarget" "m, m, m" "LocalNEDVel" true "VX, VY, VZ" "m/s, m/s, m/s" \gydF4y2Ba

提取感兴趣的信号gydF4y2Ba

为了使用仪表来可视化无人机飞行,提取每个时间步的姿态、位置、速度和空速。从上一步的信息表中指定适当的信号名称。调用gydF4y2Ba提取gydF4y2Ba函数使用适当的信号名称。调整信号的时间向量元素,使它们从0秒开始。gydF4y2Ba

提取姿态和滚摇-俯仰数据。gydF4y2BaRpy = extract(绘图器,数据,gydF4y2Ba“AttitudeEuler”gydF4y2Ba);rpy {1} .Time = rpy {1} .Time-rpy {1} .Time (1);RollData =时间表(rpy{1}.Time,rpy{1}.Roll,gydF4y2Ba...gydF4y2Ba“VariableNames”gydF4y2Ba, {gydF4y2Ba“滚”gydF4y2Ba});PitchData =时间表(rpy{1}.时间,rpy{1}.Pitch,gydF4y2Ba...gydF4y2Ba“VariableNames”gydF4y2Ba, {gydF4y2Ba“节”gydF4y2Ba});YawData =时间表(rpy{1}.时间,rpy{1}.偏航,gydF4y2Ba...gydF4y2Ba“VariableNames”gydF4y2Ba, {gydF4y2Ba“偏航”gydF4y2Ba});gydF4y2Ba提取位置和xyz数据。gydF4y2Ba位置=提取(绘图仪,数据,gydF4y2Ba“LocalNED”gydF4y2Ba);{1}。时间=位置{1}.时间-位置{1}.时间(1);X =时间表(位置{1}.时间,位置{1}.X,gydF4y2Ba...gydF4y2Ba“VariableNames”gydF4y2Ba, {gydF4y2Ba“X”gydF4y2Ba});Y =时间表(位置{1}.时间,位置{1}.Y,gydF4y2Ba...gydF4y2Ba“VariableNames”gydF4y2Ba, {gydF4y2Ba“Y”gydF4y2Ba});Z =时间表(位置{1}.时间,位置{1}.Z,gydF4y2Ba...gydF4y2Ba“VariableNames”gydF4y2Ba, {gydF4y2Ba“Z”gydF4y2Ba});gydF4y2Ba提取速度数据。gydF4y2BaVel =提取(绘图仪,数据,gydF4y2Ba“LocalNEDVel”gydF4y2Ba);韦尔{1}.Time =韦尔{1}.Time-vel {1} .Time (1);XVel =时间表(vel{1}.时间,vel{1}.VX,gydF4y2Ba...gydF4y2Ba“VariableNames”gydF4y2Ba, {gydF4y2Ba“VX”gydF4y2Ba});YVel =时间表(vel{1}.时间,vel{1}.VY,gydF4y2Ba...gydF4y2Ba“VariableNames”gydF4y2Ba, {gydF4y2Ba“v”gydF4y2Ba});ZVel =时间表(vel{1}.时间,vel{1}.VZ,gydF4y2Ba...gydF4y2Ba“VariableNames”gydF4y2Ba, {gydF4y2Ba“登陆”gydF4y2Ba});gydF4y2Ba提取空速幅度数据。gydF4y2Ba空速=提取(绘图器,数据,gydF4y2Ba“速度”gydF4y2Ba);空速=时间表(空速{1}.时间,空速{1}.指示空速,gydF4y2Ba...gydF4y2Ba“VariableNames”gydF4y2Ba, {gydF4y2Ba“速度”gydF4y2Ba});gydF4y2Ba

转换单位和预处理数据的仪表gydF4y2Ba

我们的飞行日志以国际单位制记录数据。飞行仪表仪表要求转换为以英文系统为代表的航空航天标准单位系统。此转换在附带的Simulink模型中的可视化块中处理,供用户使用。金宝app转弯协调器使用指示性的银行运动(不同于银行角度)指示飞机的偏航率。为了计算横摆角速度,将车体框架的角速度转换为车体框架,如下所示:gydF4y2Ba

ψgydF4y2Ba ˙gydF4y2Ba =gydF4y2Ba qcosgydF4y2Ba (gydF4y2Ba ϕgydF4y2Ba )gydF4y2Ba +gydF4y2Ba rsingydF4y2Ba (gydF4y2Ba ϕgydF4y2Ba )gydF4y2Ba 因为gydF4y2Ba θgydF4y2Ba

转弯协调器内的测斜球指示飞机的侧滑。这个侧滑角是基于机身和计算出的空速之间的夹角。为了获得准确的空速,需要对速度和风矢量进行良好的估计。大多数小型无人机在飞行时没有传感器来估计风矢量数据或空速。无人机可以面对20-50%的横风形式的空速。gydF4y2Ba

VgydF4y2Ba ggydF4y2Ba -gydF4y2Ba VgydF4y2Ba wgydF4y2Ba =gydF4y2Ba VgydF4y2Ba 一个gydF4y2Ba

为了计算侧滑和转弯,直接从日志文件中提取风率和姿态率数据。gydF4y2Ba

提取横摇,俯仰和偏航率和估计风速。gydF4y2Ba[p,q,r,wn,we] = helperExtractUnmappedData(data);gydF4y2Ba合并时间表。gydF4y2BaFlightData =同步(X,Y,Z,RollData,PitchData,YawData,XVel,YVel,ZVel,p,q,r,空速,wn,我们,gydF4y2Ba“联盟”gydF4y2Ba,gydF4y2Ba“线性”gydF4y2Ba);gydF4y2Ba为数据组装一个数组。gydF4y2BaFlightDataArray = double([seconds(FlightData. time) FlightData. time)X FlightData。Y FlightData。Z FlightData。卷gydF4y2Ba...gydF4y2BaFlightData。FlightData.Yaw, FlightData.VX FlightData.VY,gydF4y2Ba...gydF4y2BaFlightData.VZ、FlightData.p FlightData.q, FlightData.r、FlightData.Airspeed FlightData.wn, FlightData.we]);gydF4y2Ba确保时间行是唯一的。gydF4y2Ba[~,印第安纳州]=独特(FlightDataArray (: 1));: FlightDataArray = FlightDataArray(印第安纳州);gydF4y2Ba将时间数据预处理到特定时间。gydF4y2Baflightdata = double(FlightDataArray(:,1)>=0,1:end));gydF4y2Ba

在MATLAB中可视化标准飞行仪表数据gydF4y2Ba

为了获得飞行的快速概述,使用动画界面介绍gydF4y2Ba使用飞行仪器和飞行动画显示飞行轨迹数据gydF4y2Ba(航天工具箱)gydF4y2Ba的例子。辅助函数gydF4y2BahelperDroneInstrumentsgydF4y2Ba创建一个仪器动画界面。gydF4y2Ba

helperDroneInstruments;gydF4y2Ba

的gydF4y2Ba空速gydF4y2Ba指示盘指示无人机的速度。的gydF4y2Ba人工地平线gydF4y2Ba指示器显示无人机的姿态,不包括偏航。的gydF4y2Ba测高计gydF4y2Ba而且gydF4y2Ba上升速度gydF4y2Ba指示器分别显示气压计和爬升率传感器所记录的高度。的gydF4y2Ba把协调员gydF4y2Ba表示飞机的偏航率和侧滑。如果倾斜仪向左或向右倾斜,这表示滑动或打滑的情况。在协调转弯时,侧滑应为零。gydF4y2Ba

在Simulink中可视化信号金宝appgydF4y2Ba

在Si金宝appmulink中,您可以使用仪器块创建自定义的信号可视化,以帮助诊断飞行中的问题。例如,日志文件中的电压和电池数据可以帮助诊断由于电力不足或电压峰值而导致的故障。提取下面的面糊数据以可视化它们。gydF4y2Ba

提取电池数据。gydF4y2Ba电池=提取(绘图仪,数据,gydF4y2Ba“电池”gydF4y2Ba);gydF4y2Ba从主题中提取电压数据。gydF4y2Ba电压=时间表(电池{1}.时间,电池{1}.Voltage_1,gydF4y2Ba...gydF4y2Ba“VariableNames”gydF4y2Ba, {gydF4y2Ba“Voltage_1”gydF4y2Ba});gydF4y2Ba从主题中提取剩余的电池容量数据。gydF4y2Ba容量=时间表(电池{1}.时间,电池{1}.剩余容量,gydF4y2Ba...gydF4y2Ba“VariableNames”gydF4y2Ba, {gydF4y2Ba“RemainingCapacity”gydF4y2Ba});gydF4y2Ba

打开gydF4y2Ba“dronegauge”gydF4y2Ba模型,该模型将加载的数据显示在不同的仪表和无人机动画图形上。gydF4y2Ba

open_system (gydF4y2Ba“dronegauges”gydF4y2Ba);gydF4y2Ba

运行gydF4y2Ba该模型。生成的图形实时显示无人机的轨迹,仪表显示飞行的当前状态。gydF4y2Ba

sim卡(gydF4y2Ba“dronegauges”gydF4y2Ba);gydF4y2Ba