uavSensor

Датчик для сценария БПЛА

Описание

The uavSensor объект создает датчик, который жестко крепится к платформе БПЛА, заданный как 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] где z, y, x являются поворотами вокруг оси z, y оси и x оси последовательно в степенях. Ориентация относительно каркаса кузова платформы.

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

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

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

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

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

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

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

readСбор последних показаний с БПЛА-датчика

Примеры

свернуть все

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

Введение

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

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

A 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. The axes contains 12 objects of type patch.

Определите платформу БПЛА и датчик монтажа

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

Загрузите данные о рейсе в рабочую область и создайте квадроторную платформу с помощью опорной системы координат NED. Задайте начальное положение и ориентацию на основе загруженных рейсов журнала данных. Строение каркаса кузова БПЛА ориентирует ось 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 Системные объекты вашего БПЛА. Монтируйте лидар облака точек генератор и uavSensor объект, который содержит модель датчика лидара. Укажите место установки датчика относительно каркаса кузова БПЛА.

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

Полет платформы БПЛА по предварительно определенной траектории и сбор показаний датчика облака точек

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

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

% Visualize the scene
[ax,plotFrames] = show3D(scene);

% Update plot view for better visibility.
xlim([-250 200])
ylim([-150 180])
zlim([0 50])
view([-110 30])
axis equal
hold on

% Create a line plot for the trajectory.
traj = plot3(nan,nan,nan,"Color",[1 1 1],"LineWidth",2);
traj.XDataSource = "position(:,1,1:idx+1)";
traj.YDataSource = "position(:,2,1:idx+1)";
traj.ZDataSource = "position(:,3,1:idx+1)";

% Create a scatter plot for the  point cloud.
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))";

% Start Simulation
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. The axes contains 15 objects of type patch, scatter, line.

Введенный в R2020b