본문 바로가기
Tip/Matlab

[Matlab] UAV ToolBox, "UAV Scenario Tutorial"

by frog 2021. 5. 22.

[Matlab] UAV ToolBox, "UAV Scenario Tutorial"


"해당 컨텐츠는 아직 많이 부족한 개구리가 공부한 내용을 정리하였기에 틀린내용이 있을 수 있음을 알려드립니다."

내용

  • UAV가 building model 사이에서 비행하는 시나리오 시뮬레이션 
  • UAV Scenario를 생성하는 방법 및 객체를 추가하는 방법에 대한 예제를 다룬다.
  • UAV Platform을 초기화하는 방법에 대한 예제를 다룬다.
  • UAV에 LiDAR 센서를 탑재하는 예제를 다룬다.
  • UAV가 FilghtData를 따라서 이동할 때, Scene에서 LiDAR 정보에 의한 Point Cloud를 표시해주는 예제를 다룬다.

● 소스코드 / 정리

% Create the UAV scenario.
% UAV 시나리오를 생성한다.
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])
  • uavScenario를 생성한다.
  • addMesh 함수를 사용하여 시나리오에 객체를 배치할 수 있다.
  • load 함수를 사용하여 객체 정보를 불러올 수 있다.
    show3D 함수
  • show3D 함수를 시나리오를 시각화하여 확인할 수 있다.
% UAV의 flightData를 로드한다.
load("flightData.mat")

% Set up platform
% UAV paltform 정보를 초기화한다.
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.
% UAV 정보를 변경한다.
updateMesh(plat,"quadrotor",{10},color.Red,[0 0 0],eul2quat([0 0 pi]))
  • load 함수를 사용하여 UAV의 flight data를 로드한다.
  • UAV 정보를 초기화하고 정보를 변경한다.
% Lidar 센서 정보를 얻어 point cloud를 표시해주는 모델을 초기화한다.
lidarmodel = uavLidarPointCloudGenerator("AzimuthResolution",0.3324099,...
    "ElevationLimits",[-20 20],"ElevationResolution",1.25,...
    "MaxRange",90,"UpdateRate",2,"HasOrganizedOutput",true);

% UAV plotform에 lidar 모델을 탑재한다.
lidar = uavSensor("Lidar",plat,lidarmodel,"MountingLocation",[0,0,-1]);
  • LiDAR point cloud generator를 초기화한다.
  • LIDAR model을 UAV에 탑재한다.
% 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.
% UAV 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.
% 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
    % LiDAR 정보를 획득하고 plot한다.
    [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);
    % UAV를 이동한다.
    move(plat,[position(:,:,idx+1),zeros(1,6),eul2quat(orientation(:,:,idx+1)),zeros(1,3)])
    % Update all sensors in the scene.
    % sensor 데이터를 갱신한다.
    updateSensors(scene)
end
hold off

* https://kr.mathworks.com/help/uav/ug/uav-scenario-tutorial.html

 

 

UAV Scenario Tutorial - MATLAB & Simulink - MathWorks 한국

이 예제의 수정된 버전이 있습니다. 사용자가 편집한 내용을 반영하여 이 예제를 여시겠습니까?

kr.mathworks.com

 

'Tip > Matlab' 카테고리의 다른 글

[Matlab] UAV ToolBox, "Simulation 3D" 접근방법  (0) 2021.07.03
[Matlab] UAV ToolBox, "Quadrotor Model"  (0) 2021.05.22
[Matlab] "slx 파일 내용 확인"  (0) 2021.05.10
[Matlab] "UAV Toolbox"  (0) 2021.05.09

댓글