主要内容

可视化自定义飞行日志

配置flightLogSignalMapping对象以可视化自定义飞行日志中的数据。

自定义飞行日志

在本例中,假设飞行数据已经被解析到MATLAB®中,并存储为MAT文件。本例重点介绍配置flightLogSignalMapping对象,以便能够正确处理保存在MAT文件中的日志数据并将其可视化,customFlightData.mat,存储包含3个字段的结构。Fs为MAT文件中存储的信号的采样频率。伊姆弹道是包含实际飞行信息的矩阵。轨迹数据和IMU数据基于在XY平面上沿投影矩形路径飞行的模拟飞行。

customData =负载(“customFlightData.mat”);logData = customData.logData
logData =带字段的结构:IMU:[2785×9双精度]Fs:100弹道:[2785×10双精度]

伊姆日志数据是一个n-by-9矩阵,其中前3列为中的加速度计读数 / 年代 2 .接下来的3列是中的陀螺仪读数 rad / 年代 ,最后三列是磁强计的读数 μ T

logData。伊姆(1:5, :)
ans =5×90.8208 0.7968 10.7424 0.0873 0.0873 0.0862 327.6000 297.6000 283.8000 0.8016 0.8160 10.7904 0.0883 0.0873 0.0862 327.6000 293.8000 0.7680 0.7680 10.7568 0.0862 0.0851 0.0851 327.6000 297.6000 283.8000 0.8208 0.736 10.7520 0.0873 0.0883 0.0819 327.6000 297.6000 283.8000 0.7872 0.7728 10.7328 0.0873 0.0862 0.0830 327.6000 297.6000 283.8000

弹道日志数据是一个n-by-9矩阵,前3列是XYZ NED坐标 .接下来的3列是XYZ方向的速度 / 年代 ,最后4列是四元数,描述无人机从惯性框架到机身框架的旋转。每行是轨迹的一个点,定义了所有这些参数。

: logData.Trajectory (1:5)
ans =5×100.0200 0 -4.0000 2.0000 0 -0.0036 1.0000 0 0 -0.0000 0.0400 0 -4.0001 2.0000 0 -0.0072 1.0000 0 0 -0.0000 0.0600 0 -4.0002 2.0000 0 -0.0108 1.0000 0 0 -0.0000 0.0800 0 -4.0003 2.0000 0 -0.0143 1.0000 0 0 -0.0000 0.1000 0 -4.0004 2.0000 0 -0.0179 1.0000 0 0 -0.0001

使用预定义的信号格式和图可视化自定义飞行日志

创建一个flightLogSignalMapping对象,因为自定义日志格式不符合标准““乌洛格”或"tlog“定义。

customPlotter = flightLogSignalMapping;

对象具有一组预定义的信号,您可以映射这些信号。通过映射这些预定义的信号,您可以访问一组预定义的图。注意,一些信号有“#”符号后缀。对于这些信号,您可以选择将整数作为后缀添加到信号名称中,这样飞行日志绘图仪就可以处理多个此类信号,例如次级IMU信号和气压计读数。调用信息

%预定义的信号信息(自定义绘图仪,“信号”
ans=18×4表SignalName IsMapped SignalFields FieldUnits  _____________________ ________ __________________________________________________________________________________________________________________________________________________________________________________________________________ ___________________________________________________ " Accel #“假"AccelX, AccelY, AccelZ" "m/s^2, m/s^2, m/s^2" "Airspeed#"假"PressDiff, IndicatedAirSpeed, Temperature" "Pa, m/s, degreeC" "姿态deeuler "假"Roll, Pitch, Yaw" "rad, rad, rad" "姿态deeuler "假"BodyRotationRateX, BodyRotationRateX, BodyRotationRateZ" "rad/s, rad/s, rad/s" "姿态targeteuler "假"RollTarget, PitchTarget, "“rad, rad”“气压计#”假“PressAbs, PressAltitude, Temperature”“Pa, m, degreeC”“电池”假“Voltage_1, Voltage_2, Voltage_3, Voltage_4, Voltage_5, Voltage_6, Voltage_7, Voltage_8, Voltage_9, Voltage_10, Voltage_11, 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, % " " GPS #“false”纬度,经度,高度,水平速度,CourseAngle, SatellitesVisible”“学位,学位,m, m / s,学位,N / A”“陀螺#“false”GyroX GyroY, GyroZ”“rad / s, rad / s, rad / s”“LocalENU“false”X, Y, Z”“m m, m”“LocalENUTarget“false”XTarget, YTarget, ZTarget”“m m m”“LocalENUVel“false”VX, v, VZ”“米/秒,m/s, m/s" LocalENUVelTarget" false "VXTarget, VYTarget, VZTarget" "m/s, m/s, m/s" "LocalNED" false "X, Y, Z" "m, m, m" "LocalNEDTarget" false "XTarget, YTarget, ZTarget" "m, m, m" "LocalNEDVel" false "VX, VY, VZ" "m/s, m/s, m/s"⋮
%预定义的情节信息(自定义绘图仪,“阴谋”
ans=10×4表PlotName ReadyToPlot MissingSignals RequiredSignals  _______________________ ___________ ____________________________________ ____________________________________ " 态度“false”AttitudeEuler AttitudeRate,陀螺#”“AttitudeEuler AttitudeRate,陀螺#”“AttitudeControl“false”AttitudeEuler, AttitudeTargetEuler”“AttitudeEuler,“GPS 2d”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS 2d”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假“GPS#”假LocalNEDTarget" " trajectory "LocalNED, LocalNEDTarget" "LocalNED, LocalNEDTarget" " trajectory "LocalNEDVel, LocalNEDVelTarget"

flightLogSignalMapping对象在可视化数据之前,需要知道数据是如何存储在飞行日志中的。函数中访问相关信息的函数句柄与信号名称相关联日志数据,必须使用mapSignal.每个信号被定义为一个时间戳向量和一个信号值矩阵。

例如,映射陀螺#信号,定义一个时间访问功能手柄基于传感器数据采样频率。此函数句柄使用数据的全局时间戳间隔为信号值生成时间戳向量。

timeAccess=@(x)秒(1/x.Fs*(1:size(x.IMU));

接下来,检查必须为陀螺#信号使用信息

信息(自定义绘图仪,“信号”“陀螺#”
ans=1×4表信号名称被命名为信号场现场单元uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

陀螺#信号需要三列,其中包含XYZ轴的陀螺仪读数。定义gyroAccess函数句柄,并将其映射为时间访问使用mapSignal

gyroAccess=@(x)x.IMU(:,4:6);地图信号(自定义绘图仪,“陀螺”、timeAccess gyroAccess);

同样,为飞行日志中的数据绘制其他预定义信号。定义数据的值函数句柄。用它来绘制信号时间访问时间戳向量函数。

%IMU数据存储加速计和磁强计数据。accelAccess=@(x)x.IMU(:,1:3);magAccess=@(x)x.IMU(:,7:9)*1e-2;%在当地NED坐标下的飞行轨迹%XYZ坐标nedAccess=@(x)x.轨迹(:,1:3);% XYZ celocitiesnedVelAccess=@(x)x.轨迹(:,4:6);%从四元数转换的横摇-俯仰-偏航旋转attitudeAccess=@(x)翻转(第四节(x.轨迹(:,7:10)),2);%为自定义数据配置flightLogSignalMappingmapSignal (customPlotter“加速”、timeAccess accelAccess);mapSignal (customPlotter“杂志”,timeAccess,magAccess);地图信号(自定义绘图仪,“本地化”、timeAccess nedAccess);mapSignal (customPlotter“LocalNEDVel”,timeAccess,nedVelAccess);地图信号(自定义绘图仪,“AttitudeEuler”、时间访问、态度访问);

一旦所有信号都被映射出来,自定义绘图仪准备根据日志中存储的信号数据生成绘图。要快速检查信号是否正确映射,请调用checkSignal并指定日志数据。

checkSignal (customPlotter logData);
-------------------------------------------- SignalName:陀螺通过  -------------------------------------------- SignalName: Accel通过  -------------------------------------------- SignalName:杂志通过  -------------------------------------------- SignalName: LocalNED通过  -------------------------------------------- SignalName:LocalNEDVel通过  -------------------------------------------- SignalName: AttitudeEuler通过

要获得映射信号的预览,请选择checkSignal中的preview(预览)选项。

检查信号(自定义绘图仪、日志数据、,“预览”“上”“信号”“加速”);
-------------------------------------------- SignalName: Accel通过按一个键继续或“q”辞职。数字需要关注。

要可视化飞行记录数据,呼叫显示并具体说明日志数据.图中显示了所有基于映射信号的图。

predefinedPlots =显示(customPlotter logData);

使用自定义绘图可视化自定义飞行日志

对于mod details日志分析,定义更多信号并添加更多绘图,而不是存储在中的预定义绘图flightLogSignalMapping.指定一个函数句柄来过滤大于1的加速度。

accelThreshold=@(x)(vecnorm(accelAccess(x)“>11)”;地图信号(自定义绘图仪,“HighAccel”,时间访问,加速阈值,“AccelGreaterThan11”“N / A”);

调用更新包添加自定义图。将飞行日志绘图仪对象和绘图的名称指定为前两个参数。要指定数据的时间序列,请使用“Timeseries”作为第三个参数,然后列出数据。

updatePlot(自定义绘图仪,“AnalyzeAccel”“Timeseries”,[“高加速度。加速度大于11”“localnedevel.VX”“localnedevel.VY”“LocalNEDVel。款”]);

定义一个自定义函数句柄来生成图形句柄(参见下面的函数定义)。这个函数使用快速傅里叶变换和其他函数,并绘制它们。该函数返回函数句柄。

updatePlot(自定义绘图仪,“plotFFTAccel”@ (acc) plotFFTAccel (acc),“加速”);

检查一下自定义绘图仪现在包含一个新的信号和两个新的地块使用信息

信息(自定义绘图仪,“信号”
ans=19×4表“信号名称”是一个信号场,信号场场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场场,信号场场场场场,信号场场场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,信号场,场,场,场,研究UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU研究UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU“加速”为“真”加速计,加速计,加速计,加速计,加速计,加速计,加速计,加速计,m/s^2,m/s^2,m/s^2,m/s加速计,加速计,加速计,加速计,加速计,加速计,加速计,加速计,加速计,加速计,加速计,加速计,加速计,加速计,加速计,加速计按Diff,指示Dairspeed,Temperature“Pa,m/s,degreeC”“AttitudeRate“false”body rotationratex,body rotationratey,body rotationratez”“rad/s,rad/s,rad/s”“AttitudeTargetEuler“false”RollTarget,PitchTarget,YawTarget“rad,rad,rad,rad”baromer“false”按abs,高度,温度“Pa,m,degreeC”电池“false”电压1、电压2、电压3、电压4、电压5、电压6、电压7、电压8、电压9、电压10、电压11、电压12、电压13、电压14、电压15、电压16、剩余容量“v、v、v、v、v、v、v、v、v、v、v、v、v、v、v、v、v、%”“GPS”假“纬度、经度、高度、地面速度、航向、卫星可见”度,度,m,m/s,度,N/A“LocalENU”false“X,Y,Z”“m,m,m,m”“LocalENUTarget”false“X目标,Y目标,Z目标”“m,m”“LocalENUVel”false“VX,VY,VZ”“m/s,m/s,m/s”⋮
信息(自定义绘图仪,“阴谋”
ans=12×4表PlotName ReadyToPlot MissingSignals RequiredSignals  _______________________ ___________ _____________________ ____________________________________ " ”AnalyzeAccel“true”“HighAccel LocalNEDVel”“态度”真正的“AttitudeRate”“AttitudeEuler AttitudeRate,陀螺#”“AttitudeControl“true”AttitudeTargetEuler”“AttitudeEuler,“Compass”true“GPS#”“attitude deeuler, Mag#, GPS#”“Height”true“Barometer#, GPS#”“Barometer#, GPS#”“Trajectory”true“LocalNEDTarget”“LocalNED, LocalNEDTarget”“Trajectory”true“LocalNEDTarget”“LocalNED, LocalNEDTarget”“Trajectory”true“LocalNEDTarget”“LocalNED, LocalNEDTarget”“Trajectory”true“LocalNEDTarget”“LocalNED, LocalNEDTarget”“Trajectory”true“LocalNEDVelTarget”“Trajectory”true“LocalNEDVelTarget”LocalNEDVelTarget" "plotFFTAccel" true "" "Accel" "Battery" false "" Battery" "Battery" "GPS2D" false "GPS#" "GPS#" "GPS#" "Speed" false "GPS#, Airspeed#" "GPS#, Airspeed#"

指定要绘制的图形名称。调用显示使用“PlotsToShow”可视化加速度数据的分析。

accelAnalysisProfile = [“AnalyzeAccel”“plotFFTAccel”];accelAnalysisPlots = show(customPlotter, logData,“PlotsToShow”,加速度剖面图);

此示例演示了如何使用flightLogSignalMapping对象查看预定义的信号和绘图,以及自定义用于飞行日志分析的自己的绘图。

分析加速度数据函数定义

作用h=plotFFTAccel(acc)h=图(“姓名”“加速”);ax=newplot(h);v=acc.Values{1};Fs=v.Properties.SampleRate;N=floor(长度(v.AccelX)/2)*2;保持(ax,“上”);x = v{1:N, idx};xdft = fft (x);xdft = xdft (1: N / 2 + 1);psdx = (1/(Fs*N)) * abs(xdft).^2;psdx (2: end-1) = 2 * psdx (2: end-1);频率= 0:Fs /长度(x): Fs / 2;情节(ax频率10 * log10 (psdx));结束握紧(斧头),“关”);头衔(“使用FFT的周期图”);包含(“f(Hz)”);ylabel (“功率/频率(dB / Hz)”);传奇(“AccelX”“AccelY”“AccelZ”);结束