uavSensor

Датчик для сценария UAV

Описание

uavSensor объект создает датчик, который твердо присоединен к платформе UAV в виде uavPlatform объект. Можно задать различные положения монтирования и ориентации. Сконфигурируйте этот объект автоматически сгенерировать показания от датчика, заданного как insSensor, gpsSensor, или uavLidarPointCloudGenerator Система object™.

Создание

Описание

sensor = uavSensor(name,platform,sensormodel) создает датчик с указанным именем name и модель sensormodel датчика, которые устанавливают Name и SensorModel свойства соответственно. Датчик добавляется к платформе platform заданный как uavPlatform объект.

пример

sensor = uavSensor(___,Name,Value) свойства наборов с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к входным параметрам в предыдущем синтаксисе. Можно задать MountingLocation, MountingAngles, или UpdateRate свойства как пары "имя-значение". Например, uavSensor("uavLidar",plat,lidarmodel,'MountingLocation',[1 0 0])" помещает датчик один метр вперед в x - направление относительно системы координат тела платформы. Заключите каждое имя свойства в кавычки.

Свойства

развернуть все

Имя датчика в виде строкового скаляра. Выберите имя, чтобы идентифицировать этот определенный датчик.

Пример: "uavLidar"

Типы данных: string | char

Положение датчика на платформе в виде вектора из формы [x y z] в системе координат платформы. Величины в метрах.

Пример: [1 0 0] 1 м в x - направление.

Типы данных: double

Углы поворота ориентации датчика в виде вектора из формы [z y x] где zYX вращения вокруг z - ось, y - ось, и x - ось, последовательно, в градусах. Ориентация относительно системы координат тела платформы.

Пример: [30 90 0]

Типы данных: double

Частота обновления датчика в виде положительной скалярной величины в герц. По умолчанию объект использует UpdateRate свойство заданного объекта модели датчика.

Интервал обновления датчика (1/UpdateRate) должен быть кратным интервалу обновления для связанного uavScenario объект.

Типы данных: double

Модель Sensor для генерации показаний в виде insSensor, gpsSensor, или uavLidarPointCloudGenerator Системный объект.

Функции объекта

readСоберите последнее чтение от датчика UAV

Примеры

свернуть все

Создайте сценарий, чтобы симулировать рейсы беспилотного воздушного транспортного средства (UAV) между набором созданий. Пример демонстрирует обновление положения UAV в симуляциях разомкнутого контура. Используйте сценарий UAV, чтобы визуализировать рейс UAV и сгенерировать симулированные показания датчика облака точек.

Введение

Чтобы протестировать автономные алгоритмы, сценарий UAV позволяет вам сгенерировать тесты и сгенерировать данные о датчике из среды. Можно задать препятствия в рабочей области, обеспечить траектории БПЛА в глобальных координатах и преобразовать данные между координатными системами координат. Сценарий UAV позволяет вам визуализировать эту информацию в системе координат среды.

Создайте сценарий с сетками создания многоугольника

uavScenario объект является моделью, состоящей из набора статических препятствий, и подвижные объекты вызвали платформы. Используйте uavPlatform объекты смоделировать БПЛА фиксированного крыла, мультироторы и другие объекты в рамках сценария. Этот пример создает сценарий, состоящий из наземной плоскости и 11 созданий как вытесненными многоугольниками. Данные о многоугольнике для созданий загружаются и используются, чтобы добавить сетки многоугольника.

% Create the UAV scenario.
scene = uavScenario("UpdateRate",2,"ReferenceLocation",[75 -46 0]);

% Add a ground plane.
color.Gray = 0.651*ones(1,3);
color.Green = [0.3922 0.8314 0.0745];
color.Red = [1 0 0];
addMesh(scene,"polygon",{[-250 -150; 200 -150; 200 180; -250 180],[-4 0]},color.Gray)

% Load building polygons.
load("buildingData.mat");

% Add sets of polygons as extruded meshes with varying heights from 10-30.
addMesh(scene,"polygon",{buildingData{1}(1:4,:),[0 30]},color.Green)
addMesh(scene,"polygon",{buildingData{2}(2:5,:),[0 30]},color.Green)
addMesh(scene,"polygon",{buildingData{3}(2:10,:),[0 30]},color.Green)
addMesh(scene,"polygon",{buildingData{4}(2:9,:),[0 30]},color.Green)
addMesh(scene,"polygon",{buildingData{5}(1:end-1,:),[0 30]},color.Green)
addMesh(scene,"polygon",{buildingData{6}(1:end-1,:),[0 15]},color.Green)
addMesh(scene,"polygon",{buildingData{7}(1:end-1,:),[0 30]},color.Green)
addMesh(scene,"polygon",{buildingData{8}(2:end-1,:),[0 10]},color.Green)
addMesh(scene,"polygon",{buildingData{9}(1:end-1,:),[0 15]},color.Green)
addMesh(scene,"polygon",{buildingData{10}(1:end-1,:),[0 30]},color.Green)
addMesh(scene,"polygon",{buildingData{11}(1:end-2,:),[0 30]},color.Green)

% Show the scenario.
show3D(scene);
xlim([-250 200])
ylim([-150 180])
zlim([0 50])

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

Задайте платформу UAV и смонтируйте датчик

Можно задать uavPlatform в сценарии как несущая ваших моделей датчика и управляют ими через сценарий, чтобы собрать симулированные данные о датчике. Можно сопоставить платформу с различными сетками, такими как fixedwing, quadrotor, и cuboid сетки. Можно задать заданные единицы пользовательской mesh, представленные вершинами и поверхностями. Задайте систему координат для описания движения вашей платформы.

Загрузите полетные данные в рабочую область и создайте quadrotor платформу с помощью системы координат NED. Задайте исходное положение и ориентацию на основе загруженных данных логов рейса. Настройка системы координат тела UAV ориентирует ось X, столь же положительную форварду, ось Y как правильно-положительный, и нисходящая положительная ось z.

load("flightData.mat")

% Set up platform
plat = uavPlatform("UAV",scene,"ReferenceFrame","NED", ...
    "InitialPosition",position(:,:,1),"InitialOrientation",eul2quat(orientation(:,:,1)));

% Set up platform mesh. Add a rotation to orient the mesh to the UAV body frame.
updateMesh(plat,"quadrotor",{10},color.Red,[0 0 0],eul2quat([0 0 pi]))

Можно принять решение смонтировать различные датчики, такие как insSensor, gpsSensor, или uavLidarPointCloudGenerator Системные объекты к вашему UAV. Смонтируйте генератор облака точек лидара и uavSensor объект, который содержит модель датчика лидара. Задайте монтирующееся местоположение датчика, который является относительно системы координат тела UAV.

lidarmodel = uavLidarPointCloudGenerator("AzimuthResolution",0.3324099,...
    "ElevationLimits",[-20 20],"ElevationResolution",1.25,...
    "MaxRange",90,"UpdateRate",2,"HasOrganizedOutput",true);

lidar = uavSensor("Lidar",plat,lidarmodel,"MountingLocation",[0,0,-1]);

Управляйте платформой UAV вдоль предопределенной траектории и соберите показания датчика облака точек

Переместите UAV вдоль предопределенной траектории и соберите показания датчика лидара по пути. Эти данные могли использоваться, чтобы протестировать основанные на лидаре алгоритмы отображения и локализации.

Предварительно выделите traj и scatterPlot линейные графики и затем задают специфичные для графика источники данных. Во время симуляции uavScenario, используйте обеспеченный plotFrames выведите от сцены как родительские оси, чтобы визуализировать ваши данные о датчике в правильных координатных системах координат.

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

[ax,plotFrames] = show3D(scene);

Обновите представление графика для лучшей видимости.

xlim([-250 200])
ylim([-150 180])
zlim([0 50])
view([-110 30])
axis equal
hold on

Постройте график для траектории. Сначала создайте график с plot3, затем вручную измените свойства источника данных графика. Это улучшает производительность графического вывода.

traj = plot3(nan,nan,nan,"Color",[1 1 1],"LineWidth",2);
traj.XDataSource = "position(:,2,1:idx+1)";
traj.YDataSource = "position(:,1,1:idx+1)";
traj.ZDataSource = "-position(:,3,1:idx+1)";

Создайте график рассеивания для облака точек. Обновите свойства источника данных снова.

colormap("jet")
pt = pointCloud(nan(1,1,3));
scatterplot = scatter3(nan,nan,nan,1,[0.3020 0.7451 0.9333],...
    "Parent",plotFrames.UAV.Lidar);
scatterplot.XDataSource = "reshape(pt.Location(:,:,1),[],1)";
scatterplot.YDataSource = "reshape(pt.Location(:,:,2),[],1)";
scatterplot.ZDataSource = "reshape(pt.Location(:,:,3),[],1)";
scatterplot.CDataSource = "reshape(pt.Location(:,:,3),[],1) - min(reshape(pt.Location(:,:,3),[],1))";

Настройте симуляцию. Затем выполните итерации через положения и покажите сцене каждый раз обновления датчика лидара. Усовершенствуйте сцену, переместите платформу UAV и обновите датчики.

setup(scene)
for idx = 0:size(position, 3)-1
    [isupdated,lidarSampleTime, pt] = read(lidar);
    if isupdated
        % Use fast update to move platform visualization frames.
        show3D(scene,"Time",lidarSampleTime,"FastUpdate",true,"Parent",ax);
        % Refresh all plot data and visualize.
        refreshdata
        drawnow limitrate
    end
    % Advance scene simulation time and move platform.
    advance(scene);
    move(plat,[position(:,:,idx+1),zeros(1,6),eul2quat(orientation(:,:,idx+1)),zeros(1,3)])
    % Update all sensors in the scene.
    updateSensors(scene)
end
hold off

Figure contains an axes object. The axes object contains 15 objects of type patch, scatter, line.

Смотрите также

Функции

Объекты

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