exponenta event banner

createCustomSensorTemplate

Создайте демонстрационную реализацию для UAV пользовательский интерфейс датчика

Синтаксис

Описание

пример

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

Примеры

свернуть все

Создайте адаптер датчика для imuSensor от Navigation Toolbox™ и собирают показания для симулированного сценария рейса UAV.

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

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

createCustomSensorTemplate

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

edit uavIMU.m

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

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

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

Создайте платформу UAV и задайте траекторию. Добавьте 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]));

Присоедините датчик 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 сценарий.

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 object. The axes object 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