Компоненты полетных приборов в App Designer

Создайте специфичные для космоса приложения в App Designer с помощью общих приборов рейса самолета. App Designer - это богатая среда разработки, которая обеспечивает размещение и представления кода, полностью интегрированную версию MATLAB® редактор, и большой набор интерактивных компонентов. Дополнительные сведения о App Designer см. в разделе Разработка приложений с использованием App Designer. Чтобы использовать компоненты рейса прибора в App Designer, необходимо иметь лицензию Aerospace Toolbox.

Пример приложения для простых летных аппаратов, в котором используется App Designer, см. в примерах начала работы при первом запуске App Designer. Чтобы создать приложение для визуализации сохраненных данных о рейсе для Piper PA-24 Comanche, используйте этот рабочий процесс.

  1. Запустите App Designer путем ввода appdesigner в командной строке, а затем выберите Blank App на странице Начало работы.

  2. Перетащите аэрокосмические компоненты из Component Library в холст приложения.

  3. Чтобы загрузить данные моделирования, добавьте a startup функцию приложению, а затем создайте объект анимации.

  4. Введите коллбэки, функции и свойства компонентов в приложение. Также добавьте связанный код.

  5. Инициируйте отображение анимации в приложении к инструменту.

  6. Сохраните и запустите приложение.

Следующие разделы содержат более подробные шаги для этого рабочего процесса в качестве примера. Этот пример использует Aero.Animation объект.

Запустите App Designer и создайте новое приложение

  1. Запустите App Designer. В Командном Окне MATLAB введите:

    appdesigner
  2. В окне приветствия App Designer нажмите Blank App. App Designer отображается с пустым холстом.

  3. Чтобы просмотреть пустой шаблон приложения, нажмите Code View. Заметьте, что приложение содержит шаблон с разделами для свойств компонентов приложения, инициализации компонента и создания и удаления приложения.

  4. Чтобы вернуться к канвасу, нажмите кнопку Design View.

Перетащите аэрокосмические компоненты в приложение

Чтобы добавить компоненты в пустое полотно:

  1. В Component Library перейдите к Aerospace.

  2. Из библиотеки перетащите эти аэрокосмические компоненты на холст:

    • Индикатор воздушной скорости

    • Искусственный горизонт

    • Поворотный координатор

    • Индикатор курса

    • Индикатор набора высоты

    • Высотомер

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

    Для этого примера:

    • Добавьте компонент Slider как устройство входа времени.

    • Чтобы отобразить текущее время с ползунка, отредактируйте метку ползунка. Для примера:

      • Измените метку на Time: 00.0 sec.

      • Измените верхний предел на 50.

  4. Щелкните Code View и обратите внимание, что свойства и разделы инициализации компонентов теперь содержат определения для новых компонентов. Код, управляемый App Designer, не редактируется (серый).

  5. В разделе Property Inspector справа от полотна переименуйте следующие компоненты:

    • Компонент UIfigure, для FlightInstrumentsFlightDataPlaybackUIFigure

    • Компонент ползунка в Time000secSlider

Добавьте код для загрузки и визуализации данных для приложения

Этот рабочий процесс предполагает, что вы запустили App Designer, создали пустое приложение и добавили аэрокосмические компоненты в приложение.

  1. В представлении кода приложения поместите курсор за разделом свойств и в разделе Insert нажмите Callback.

    Откроется диалоговое окно Add Callback Function (добавить функцию обратного вызова).

  2. В диалоговом окне Add Callback Function:

    1. Из списка Callback выберите StartupFcn.

    2. В параметре Name введите имя для функции запуска, например startupFcn.

      Добавлены коллбэки раздел.

  3. Добавьте дополнительные свойства к классу для данных моделирования и объекта анимации. Поместите курсор сразу после раздела свойств компонентов и в разделе «Вставка» нажмите Property > Public Property. В новом шаблоне свойств добавьте код так, чтобы он выглядел следующим образом:

    simdata % Saved flight data [time X Y Z phi theta psi]
    animObj % Aero.Animation object

    simdata - сохраненные данные о рейсе. animObj является Aero.Animation объект для окна рисунка.

  4. В раздел startupFcn добавьте код в startup функция, которая загружает данные моделирования. Для примера, simdata.mat файл содержит записанные данные моделируемой траектории рейса.

    % Code that executes after component creation
    function startupFcn(app)
                
           % Load saved flight status data
           savedData = load(fullfile(matlabroot, 'toolbox', 'aero', 'astdemos', 'simdata.mat'), 'simdata');
           yaw = savedData.simdata(:,7);
           yaw(yaw<0) = yaw(yaw<0)+2*pi; % Unwrap yaw angles
           savedData.simdata(:,7) = yaw;
           app.simdata = savedData.simdata;  % Load saved flight status data

  5. Чтобы визуализировать данные анимации, создайте объект анимации. Для примера после загрузки данных моделирования:

    1. Создайте Aero.Animation объект.

      app.animObj = Aero.Animation;
    2. Используйте геометрию piper pa-24 comanche для объекта анимации.

      app.animObj.createBody('pa24-250_orange.ac','Ac3d'); % Piper PA-24 Comanche geometry
    3. Используйте ранее загруженные данные, app.simdata, как источник для объекта анимации.

      app.animObj.Bodies{1}.TimeseriesSourceType = 'Array6DoF'; % [time X Y Z phi theta psi]
      app.animObj.Bodies{1}.TimeSeriesSource = app.simdata;
    4. Инициализируйте положение камеры и рисунка.

      app.animObj.Camera.PositionFcn = @staticCameraPosition;
      app.animObj.Figure.Position = [app.FlightInstrumentsFlightDataPlaybackUIFigure.Position(1)+625,...
          app.FlightInstrumentsFlightDataPlaybackUIFigure.Position(2),...
          app.FlightInstrumentsFlightDataPlaybackUIFigure.Position(3),...
          app.FlightInstrumentsFlightDataPlaybackUIFigure.Position(4)];
      app.animObj.updateBodies(app.simdata(1,1)); % Initialize animation window at t=0
      app.animObj.updateCamera(app.simdata(1,1));
    5. Создайте и отобразите графический объект рисунка.

      app.animObj.show();

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

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

  1. В представлении кода для приложения добавьте коллбэк для ползунка. Например, перейдите к разделу Property Inspector и выберите app.Time000secSlider.

  2. Введите имя для valueChangingFcn, например Time000secSliderValueChanging, и нажмите Enter.

    В представлении кода App Designer добавляет функцию обратного вызова Time000secSliderValueChanging.

  3. Добавьте код, чтобы отобразить текущее время в метке ползунка Time000secSliderLabel, для примера:

    % Display current time in slider component
    t = event.Value;
    app.Time000secSliderLabel.Text = sprintf('Time: %.1f sec', t);
  4. Добавьте код для вычисления значений данных для каждого компонента полетного прибора, соответствующего выбранному времени на ползунке, например:

    % Find corresponding time data entry
    k = find(app.simdata(:,1)<=t);
    k = k(end);
                
           app.Altimeter.Altitude = convlength(-app.simdata(k,4), 'm', 'ft');
           app.HeadingIndicator.Heading = convang(app.simdata(k,7),'rad','deg');
           app.ArtificialHorizon.Roll = convang(app.simdata(k,5),'rad','deg');
           app.ArtificialHorizon.Pitch = convang(app.simdata(k,6),'rad','deg');
                
           if k>1
               % Estimate velocity and angular rates
               Vel = (app.simdata(k,2:4)-app.simdata(k-1,2:4))/(app.simdata(k,1)-app.simdata(k-1,1));
               rates = (app.simdata(k,5:7)-app.simdata(k-1,5:7))/(app.simdata(k,1)-app.simdata(k-1,1));
                   
               app.AirspeedIndicator.Airspeed = convvel(sqrt(sum(Vel.^2)),'m/s','kts');
               app.ClimbIndicator.ClimbRate = convvel(-Vel(3),'m/s','ft/min');
    
               % Estimate turn rate and slip behavior 
               app.TurnCoordinator.Turn = convangvel(rates(1)*sind(30) + rates(3)*cosd(30),'rad/s','deg/s');
               app.TurnCoordinator.Slip = 1/(2*pi)*convang(atan(rates(3)*sqrt(sum(Vel.^2))/9.81)-app.simdata(k,5),'rad','deg');
           else
               % time = 0
               app.ClimbIndicator.ClimbRate = 0;
               app.AirspeedIndicator.Airspeed = 0;
               app.TurnCoordinator.Slip = 0;
               app.TurnCoordinator.Turn = 0;
           end
  5. Добавьте код для обновления отображения окна анимации, например:

    %% Update animation window display
    app.animObj.updateBodies(app.simdata(k,1));
    app.animObj.updateCamera(app.simdata(k,1));

Добавление кода в окно анимации с окном UIfigure

Этот рабочий процесс предполагает, что вы готовы определить функцию закрытия для FlightInstrumentsFlightDataPlaybackUIFigure окно рисунка.

  1. Добавление CloseRequestFcn функция. В представлении кода для приложения поместите курсор после раздела свойств для FlightInstrumentsFlightDataPlaybackUIFigure и в разделе «Вставка» нажмите кнопку Callback.

    Откроется диалоговое окно Add Callback Function (добавить функцию обратного вызова).

  2. В диалоговом окне Add Callback Function:

    1. Из списка Callback выберите CloseRequestFcn.

    2. В параметре Name введите имя для функции close, например FlightInstrumentsFlightDataPlaybackUIFigureCloseRequest.

      Добавлены коллбэки раздел.

  3. В новом шаблоне коллбэка добавьте код для удаления объекта анимации, такого как:

    % Close animation figure with app
    delete(app.animObj);
    delete(app);

Сохраните и запустите приложение

Этот рабочий процесс предполагает, что вы добавили код, чтобы закрыть окно uifigure. Чтобы сохранить и запустить приложение:

  1. Сохраните приложение с именем файла myFlightInstrumentsExample. Обратите внимание, что это имя применяется к classdef.

  2. Нажмите Run.

    После сохранения изменений можно запустить приложение из окна App Designer, или набрав его имя (без .mlapp extension) в Командном Окне MATLAB. Когда вы запускаете приложение из командной строки, файл должен быть в текущей папке или в пути MATLAB.

  3. Чтобы визуализировать сохраненные данные о рейсе, измените положение ползунка. Наблюдайте за приборами рейса, когда самолет меняет ориентацию в окне анимации.

Полный пример см. в Aerospace Flight Instruments в App Designer.

См. также

Функции

Свойства

Похожие темы