Инструментальная визуализация прибора рейса для беспилотника

Импортируйте и визуализируйте журнал рейса беспилотника с помощью 3-D анимаций и инструментальных приборов рейса. Этот пример получает обзор высокого уровня эффективности рейса в MATLAB® с помощью Инструментов Рейса (Aerospace Toolbox) функции в Aerospace Toolbox™. Затем чтобы просмотреть сигналы в пользовательском интерфейсе в Simulink®, пример использует Инструменты Рейса (Aerospace Blockset) блоки из Aerospace Blockset™

Пример извлекает сигналы интереса из файла ULOG и воспроизводит траекторию рейса UAV в MATLAB. Затем те сигналы воспроизводятся в модели Simulink с помощью инструментальных блоков.

Импортируйте журнал Рейса

Файл журнала беспилотника записывает информацию о рейсе в интервалах постоянного времени. Эта информация дает понимание эффективности рейса. Инструмент рейса измеряет переменные экранной навигации, такие как отношение, высота и заголовок беспилотника. Файл журнала ULOG для этого примера был получен из модели самолета, запускающейся в средстве моделирования Gazebo.

Импортируйте файл журнала с помощью ulogreader. Создайте flightLogSignalMapping объект для файлов ULOG.

Чтобы изучить соглашение сигналов, модули и их система координат, смотрят информацию в plotter объект. Эта информация о модулях в файле журнала становится важной при соединении сигналов с инструментальными приборами рейса.

data = ulogreader("fwflight.ulg");
plotter = flightLogSignalMapping("ulog");
info(plotter,"Signal")
ans=14×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"                              
    "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"                                    
    "LocalNEDVelTarget"       true       "VXTarget, VYTarget, VZTarget"                                                                                                                                                                                "m/s, m/s, m/s"                                    
    "Mag"                     true       "MagX, MagY, MagZ"                                                                                                                                                                                            "Gs, Gs, Gs"                                       

Извлеките сигналы интереса

Чтобы визуализировать рейс беспилотника с помощью инструментальных приборов, извлеките отношение, положение, скорость и скорость полета в каждый такт. Задайте соответствующее имя сигнала из информационной таблицы на предыдущем шаге. Вызовите 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 для пользователя. Координатор поворота указывает на уровень отклонения от курса самолета с помощью показательного банковского движения (который отличается от угла крена). Для того, чтобы вычислить уровень отклонения от курса, преобразуйте угловые уровни от системы координат тела до системы координат транспортного средства, как приведено ниже:

ψ˙=qcos(ϕ)+rsin(ϕ)cosθ

Мяч уклономера в координаторе поворота указывает на занос самолета. Этот угол заноса основан на углу между корпусом самолета и вычисленной скоростью полета. Для точной скорости полета требуется хорошая оценка вектора скорости и вектора ветра. Самый маленький БПЛА не обладает датчиками, чтобы оценить данные о векторе ветра или скорость полета при полете. БПЛА может стоять между 20-50% их скорости полета в форме встречных ветров.

Vg- Vw=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));

Визуализируйте стандартные инструментальные данные о рейсе в MATLAB

Чтобы получить быстрое представление о рейсе, используйте интерфейс анимации, введенный в Данных о Траектории Рейса Отображения Используя Инструменты Рейса и Анимацию Рейса (Aerospace Toolbox) пример. Функция помощника helperDroneInstruments создает инструментальный интерфейс анимации.

helperDroneInstruments;

Набор Анемотахометра указывает на скорость беспилотника. Индикатор Artificial Horizon показывает отношение беспилотника, исключая отклонение от курса. Индикатор Altimeter и Climb Rate показывает высоту, как зарегистрировано в барометре и датчиках скороподъемности соответственно. Координатор Поворота указывает на уровень отклонения от курса самолета и заноса. Если скосы уклономера к левому или правому, это обозначает ситуация с блоком или промах. В скоординированном повороте занос должен быть нулем.

Визуализируйте сигналы в Simulink

В 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' модель, которая берет загруженные данные и отображает их на различных приборах и фигуре анимации UAV.

open_system('dronegauges'); 

Запустите модель. Сгенерированный рисунок показывает траекторию UAV в режиме реального времени, и приборы показывают текущий статус рейса.

sim('dronegauges');

Для просмотра документации необходимо авторизоваться на сайте