Импортируйте и визуализируйте журнал полетов беспилотника с помощью 3-D анимаций и измерительных приборов. В этом примере представлен общий обзор характеристик полета в MATLAB ® с использованием функций Flight Instruments (Aerospace Toolbox) в Aerospace Toolbox™. Затем для просмотра сигналов в пользовательском интерфейсе Simulink ® в примере используются блоки Flight Instruments (аэрокосмический блок) Flight Instruments (аэрокосмический блок) из Aerospace Blockset™
Пример извлекает интересующие сигналы из файла ULOG и воспроизводит траекторию полета БЛА в MATLAB. Затем эти сигналы воспроизводятся в модели Simulink с использованием приборных блоков.
Файл журнала беспилотника фиксирует информацию о полете через регулярные промежутки времени. Эта информация дает представление о выполнении полета. На бортовых приборах отображаются такие навигационные переменные, как положение, высота и курс дрона. Файл журнала ULOG для этого примера был получен из модели самолета, работающей в симуляторе Gazebo.
Импортировать файл журнала с помощью ulogreader. Создать flightLogSignalMapping для файлов ULOG.
Чтобы понять условие сигналов, блоки и их опорная система, проверьте информацию в пределах plotter объект. Эта информация о блоках в файле регистрации становится важной при подключении сигналов к приборным приборам.
data = ulogreader("flight.ulg"); plotter = flightLogSignalMapping("ulog"); info(plotter,"Signal")
ans=18×4 table
SignalName IsMapped SignalFields FieldUnits
_____________________ ________ __________________________________________________________________________________________________________________________________________________________________________________________________________ ___________________________________________________
"Accel" true "AccelX, AccelY, AccelZ" "m/s^2, m/s^2, m/s^2"
"Airspeed" true "PressDiff, IndicatedAirSpeed, Temperature" "Pa, m/s, degreeC"
"AttitudeEuler" true "Roll, Pitch, Yaw" "rad, rad, rad"
"AttitudeRate" 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_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, v, v, %"
"GPS" true "Latitude, Longitude, Altitude, GroundSpeed, CourseAngle, SatellitesVisible" "degree, degree, m, m/s, degree, N/A"
"Gyro" true "GyroX, GyroY, GyroZ" "rad/s, rad/s, rad/s"
"LocalENU" true "X, Y, Z" "m, m, m"
"LocalENUTarget" true "XTarget, YTarget, ZTarget" "m, m, m"
"LocalENUVel" true "VX, VY, VZ" "m/s, m/s, m/s"
"LocalENUVelTarget" true "VXTarget, VYTarget, VZTarget" "m/s, m/s, m/s"
"LocalNED" true "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"
⋮
Чтобы визуализировать полет беспилотника, используя меры инструмента, извлеките отношение, положение, скорость и скорость полета в каждом timestep. Укажите соответствующее имя сигнала из информационной таблицы на предыдущем шаге. Позвоните в extract с соответствующими названиями сигналов. Элементы вектора времени сигналов корректируются таким образом, что они начинаются с 0 секунд.
% Extract attitude and roll-pitch-yaw data. rpy = extract(plotter, data,"AttitudeEuler"); rpy{1}.Time=rpy{1}.Time-rpy{1}.Time(1); RollData = timetable(rpy{1}.Time,rpy{1}.Roll,... 'VariableNames',{'Roll'}); PitchData = timetable(rpy{1}.Time,rpy{1}.Pitch,... 'VariableNames',{'Pitch'}); YawData = timetable(rpy{1}.Time,rpy{1}.Yaw,... 'VariableNames',{'Yaw'}); % Extract position and xyz data. Position = extract(plotter, data,"LocalNED"); Position{1}.Time = Position{1}.Time-Position{1}.Time(1); X = timetable(Position{1}.Time,Position{1}.X,... 'VariableNames',{'X'}); Y = timetable(Position{1}.Time,Position{1}.Y,... 'VariableNames',{'Y'}); Z = timetable(Position{1}.Time,Position{1}.Z,... 'VariableNames',{'Z'}); % Extract velocity data. vel = extract(plotter, data,"LocalNEDVel"); vel{1}.Time=vel{1}.Time-vel{1}.Time(1); XVel = timetable(vel{1}.Time,vel{1}.VX,... 'VariableNames',{'VX'}); YVel = timetable(vel{1}.Time,vel{1}.VY,... 'VariableNames',{'VY'}); ZVel = timetable(vel{1}.Time,vel{1}.VZ,... 'VariableNames',{'VZ'}); % Extract Airspeed magnitude data. airspeed = extract(plotter, data,"Airspeed"); Airspeed = timetable(airspeed{1}.Time,airspeed{1}.IndicatedAirSpeed,... 'VariableNames',{'Airspeed'});
Наш журнал полетов регистрирует данные в единицах СИ. Бортовые приборные приборы требуют преобразования в систему единиц аэрокосмического стандарта, представляемую английской системой. Это преобразование обрабатывается в блоке визуализации, доступном в присоединенной модели Simulink для пользователя. Координатор поворота показывает скорость рыскания самолёта с помощью показательного банковского движения (которое отличается от угла крена). Для вычисления скорости рыскания преобразуйте угловые скорости из рамы кузова в раму транспортного средства, как указано ниже:
becauseθ
Шарик инклинометра в координаторе поворота указывает боковую часть самолета. Этот угол бокового выступа основан на угле между корпусом самолета и расчетной скоростью. Для точной скорости воздуха требуется хорошая оценка скорости и вектора ветра. Большинство небольших БПЛА не имеют датчиков для оценки данных вектора ветра или скорости полета во время полета. БПЛА могут сталкиваться с 20-50% их скорости полета в виде поперечных ветров.
- Va
Чтобы вычислить боковой клин и поворот, извлеките данные скорости ветра и ориентации непосредственно из файла журнала.
% Extract roll, pitch and yaw rates and an estimated windspeed. [p,q,r,wn,we] = helperExtractUnmappedData(data); % Merge timetables. FlightData = synchronize(X,Y,Z,RollData,PitchData,YawData,XVel,YVel,ZVel,p,q,r,Airspeed,wn,we,'union','linear'); % Assemble an array for the data. FlightDataArray = double([seconds(FlightData.Time) FlightData.X FlightData.Y FlightData.Z FlightData.Roll ... FlightData.Pitch FlightData.Yaw,FlightData.VX,FlightData.VY,... FlightData.VZ,FlightData.p,FlightData.q,FlightData.r,FlightData.Airspeed,FlightData.wn,FlightData.we]); % Ensure time rows are unique. [~,ind]=unique(FlightDataArray(:,1)); FlightDataArray=FlightDataArray(ind,:); % Preprocess time data to specific times. flightdata = double(FlightDataArray(FlightDataArray(:,1)>=0,1:end));
Для получения краткого обзора полета используйте анимационный интерфейс, представленный в примере «Просмотр данных траектории полета с помощью летных приборов» и «Анимация полета» (Aerospace Toolbox). Вспомогательная функция helperDroneInstruments создает интерфейс анимации инструмента.
helperDroneInstruments;


Циферблат индикатора Airspeed показывает скорость дрона. Индикатор «Искусственный горизонт» показывает отношение беспилотника, исключающее рыскание. Индикатор Altimeter и Climb Rate (скорость набора высоты) показывает высоту, зарегистрированную в барометре и датчиках скорости набора высоты соответственно. Координатор поворота указывает скорость рыскания самолета и бокового скольжения. Если инклинометр наклонен влево или вправо, это означает проскальзывание или занос. В согласованном повороте боковая губа должна быть равна нулю.
В Simulik можно создавать пользовательские визуализации сигналов с помощью блоков вмешательства для диагностики проблем с полетом. Например, данные о напряжении и батарее в файлах регистрации могут помочь диагностировать отказы из-за недостаточного напряжения или скачков напряжения. Извлеките эти данные для визуализации.
% Extract battery data. Battery = extract(plotter,data,"Battery"); % Extract voltage data from topic. Voltage = timetable(Battery{1}.Time,Battery{1}.Voltage_1,... 'VariableNames',{'Voltage_1'}); % Extract remaing battery capacity data from topic. Capacity = timetable(Battery{1}.Time,Battery{1}.RemainingCapacity,... 'VariableNames',{'RemainingCapacity'});
Откройте окно 'dronegauge' модель, которая берет загруженные данные и отображает их на разных измерительных приборах и фигурке анимации БПЛА.
open_system('dronegauges'); 
Запустите модель. На сформированном рисунке показана траектория полета БПЛА в режиме реального времени, а на измерительных приборах - текущее состояние полета.
sim('dronegauges');