exponenta event banner

createCustomSensorTemplate

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

Синтаксис

Описание

пример

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

Примеры

свернуть все

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

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

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

createCustomSensorTemplate

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

edit uavIMU.m

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

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

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

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

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]));

Подключите датчик БИНС с помощью 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 структура и поля для хранения данных моделирования. Датчик БИНС выводит ускорение и угловые скорости.

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 сценария.

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.

Визуализация моделируемых показаний БИНС.

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