exponenta event banner

createCustomSensorTemplate

Создать реализацию образца для пользовательского интерфейса датчика БПЛА

Синтаксис

Описание

пример

createCustomSensorTemplate создает образец реализации для пользовательского датчика БПЛА, который наследует от uav.SensorAdaptor класс. Эта функция открывает новый файл в редакторе MATLAB ®.

Примеры

свернуть все

Создание адаптера датчика для imuSensor с навигационного Toolbox™ и собрать показания для имитационного сценария полета БПЛА.

Создание адаптера датчика

Используйте createSensorAdaptorTemplate функция для генерации шаблона датчика и его обновления для адаптации imuSensor объект для использования в сценарии БПЛА.

createCustomSensorTemplate

В этом примере представлен класс адаптера uavIMU, который можно просмотреть с помощью следующей команды.

edit uavIMU.m

Использовать адаптер датчика при моделировании сценария БПЛА

Используйте адаптер датчика IMU при моделировании сценария БПЛА. Сначала создайте сценарий.

scenario = uavScenario("StopTime", 8, "UpdateRate", 100);

Создайте платформу БПЛА и укажите траекторию. Добавьте фиксированную сетку для визуализации.

plat = uavPlatform("UAV", scenario, "Trajectory", ...
    waypointTrajectory([0 0 0; 100 0 0; 100 100 0], "TimeOfArrival", [0 5 8], "AutoBank", true));
updateMesh(plat,"fixedwing", {10}, [1 0 0], eul2tform([0 0 pi]));

Закрепите датчик IMU с помощью uavSensor и укажите uavIMU в качестве входных данных. Параметры нагрузки для модели датчика.

imu = uavSensor("IMU", plat, uavIMU(imuSensor));

fn = fullfile(matlabroot,'toolbox','shared',...
    'positioning','positioningdata','generic.json');
loadparams(imu.SensorModel,fn,"GenericLowCost9Axis");

Визуализируйте сценарий.

figure
ax = show3D(scenario);
xlim([-20 200]);
ylim([-20 200]);

Предварительно распределить simData структура и поля для хранения данных моделирования. Датчик IMU выдает значения ускорения и угловых скоростей.

simData = struct;
simData.Time = duration.empty;
simData.AccelerationX = zeros(0,1);
simData.AccelerationY = zeros(0,1);
simData.AccelerationZ = zeros(0,1);
simData.AngularRatesX = zeros(0,1);
simData.AngularRatesY = zeros(0,1);
simData.AngularRatesZ = zeros(0,1);

Настройте сценарий.

setup(scenario);

Запустите моделирование с помощью advance функция. Обновите датчики и запишите данные.

updateCounter = 0;
while true
    % Advance scenario.
    isRunning = advance(scenario);
    updateCounter = updateCounter + 1;
    % Update sensors and read IMU data.
    updateSensors(scenario);
    [isUpdated, t, acc, gyro] = read(imu);
    % Store data in structure.
    simData.Time = [simData.Time; seconds(t)];
    simData.AccelerationX = [simData.AccelerationX; acc(1)];
    simData.AccelerationY = [simData.AccelerationY; acc(2)];
    simData.AccelerationZ = [simData.AccelerationZ; acc(3)];
    simData.AngularRatesX = [simData.AngularRatesX; gyro(1)];
    simData.AngularRatesY = [simData.AngularRatesY; gyro(2)];
    simData.AngularRatesZ = [simData.AngularRatesZ; gyro(3)];

    % Update visualization every 10 updates.
    if updateCounter > 10
        show3D(scenario, "FastUpdate", true, "Parent", ax);
        updateCounter = 0;
        drawnow limitrate
    end
    % Exit loop when scenario is finished.
    if ~isRunning 
        break; 
    end
end

Figure contains an axes. The axes contains an object of type patch.

Визуализация смоделированных показаний IMU.

simTable = table2timetable(struct2table(simData));
figure
stackedplot(simTable, ["AccelerationX", "AccelerationY", "AccelerationZ", ...
    "AngularRatesX", "AngularRatesY", "AngularRatesZ"], ...
    "DisplayLabels", ["AccX (m/s^2)", "AccY (m/s^2)", "AccZ (m/s^2)", ...
    "AngularRateX (rad/s)", "AngularRateY (rad/s)", "AngularRateZ (rad/s)"]);

Figure contains an object of type stackedplot.

См. также

Представлен в R2021a