UAV 택배 배송
이 예제에서는 점진적인 설계 반복을 통해, 도시 환경에서 소형 멀티콥터가 이륙하여 비행한 뒤 다른 위치에 착륙하는 시뮬레이션을 구현하는 방법을 보여줍니다.
프로젝트 열기
시작하려면, 문서에서 라이브 스크립트 열기를 클릭하거나 openExample 함수를 사용하여 예제 라이브 스크립트를 열고 지원 파일에 액세스합니다.
openExample('uav/UAVPackageDeliveryExample');
그런 다음 Simulink® 프로젝트 파일을 엽니다.
prj = openProject('uavPackageDelivery');
아키텍처 및 규칙 모델링하기
최상위 모델은 다음과 같은 서브시스템과 모델 참조로 구성되어 있습니다.
지상 관제소: 비행 중인 항공기를 제어하고 모니터링하는 데 사용됩니다.
외부 센서 - 라이다 및 카메라: 사전 설계된 시나리오 또는 실사 시뮬레이션 환경에 연결하는 데 사용됩니다. 이러한 센서는 항공기가 환경을 통과해 비행하는 동안 해당 환경에서 라이다 측정값을 생성합니다.
온보드 컴퓨터: 오토파일럿과 독립적으로 작동하는 온보드 컴퓨터에서 실행시킬 알고리즘을 구현하는 데 사용됩니다.
멀티로터: 저충실도 및 중간 충실도의 멀티콥터 모드, 유도 로직이 있는 비행 제어기가 포함되어 있습니다.
모델의 설계 데이터는 data 폴더의 Simulink 데이터 사전(uavPackageDeliveryDataDict.sldd)에 포함되어 있습니다. 또한 모델은 Variant Subsystem을 사용하여 모델의 다양한 구성을 관리합니다. 기본 작업 공간에 배치된 변수들은 데이터 사전을 수정하지 않아도 이러한 Variant를 구성할 수 있습니다. Variant Subsystem에 대한 자세한 내용은 What Are Variants? (Simulink) 항목을 참조하십시오.
예제 단계 따르기
프로젝트 바로 가기를 사용하여 예제를 순차적으로 실행합니다. 각각의 바로 가기 단계에서 프로젝트에 필요한 변수가 설정됩니다.

시작하기(Getting Started)
Getting Started 프로젝트 바로 가기를 클릭하면, 저충실도 멀티로터 플랜트 모델을 사용하여 4개의 웨이포인트 임무를 수행하는 모델이 설정됩니다. uavPackageDelivery 모델을 실행하면 멀티로터의 이륙, 비행, 착륙이 3차원 플롯에 표시됩니다.

이 모델은 전체 비행 과정 동안 UAV Path Manager 블록을 사용하여 현재 활성화된 웨이포인트를 결정합니다. 해당 활성 웨이포인트가 Guidance Mode Selector Stateflow® 차트로 전달되어, 필요한 내부 루프 제어 명령을 생성합니다.

GCS에 연결하기(Connecting to a GCS)
기본 비행 임무를 성공적으로 수행했다면, 이제 항공기의 임무를 더 잘 제어하기 위해 시뮬레이션을 Ground Station Software와 연동합니다. 이를 위해 QGroundControl Ground Control Station 소프트웨어를 다운로드하고 설치해야 합니다.
모델은 UAV Toolbox™ mavlinkio를 사용하여 Simulink와 QGroundControl 간의 연결을 설정합니다. 이 연결은 uavPackageDelivery/Ground Control Station/Get Flight Mission/QGC/MAVLink Interface 내에 있는 MATLAB System 블록으로 구현되어 있습니다.
Simulink와 QGroundControl 간의 연결을 테스트하기 위해 다음 단계를 따릅니다.
Connecting to a GCS 프로젝트 바로 가기를 클릭합니다.
QGroundControl을 실행합니다.
QGroundControl에서
/utilities/qgc에 있는shortMission.plan이라는 임무 계획을 불러옵니다.시뮬레이션을 실행합니다.
QGroundControl에서 시스템에 연결되었다고 표시되면, 임무를 업로드합니다.
항공기가 이륙하면, 아래와 같이 UAV가 QGC에서 전송한 임무를 수행하는 것을 확인할 수 있습니다.

웨이포인트를 추가하거나 기존 웨이포인트를 이동하여 임무를 수정할 수 있습니다. 임무를 업로드하면 항공기가 이 변경 사항을 반영하여 동작합니다.
직육면체 시나리오 설정하기(Setting a Cuboid Scenario)
지상 관제소에서 항공기 모델을 비행시킬 수 있게 되었으므로 이제 항공기가 비행하는 환경을 살펴보겠습니다. 이 예제에서는 uavScenario 객체를 사용하여 만든 직육면체 시나리오에 도시 블록을 모델링했습니다. 시나리오는 아래의 왼쪽 그림에 표시된 도시 블록을 기반으로 합니다.

이러한 유형의 시나리오에서 항공기가 안전하게 비행하려면 모델에 환경 정보를 제공하는 센서(예: 라이다 센서)가 필요합니다. 이 예제에서는 UAV 시나리오에 추가된 uavLidarPointCloudGenerator 객체를 uavSensor 객체와 함께 사용합니다. 라이다 센서 모델은 센서의 자세와 환경에 존재하는 장애물을 기반으로 측정값을 생성합니다.
Setting a Cuboid Scenario 바로 가기를 클릭하고 모델을 실행합니다. 모델이 실행되면, 항공기가 직육면체 환경을 통과해 비행하는 동안 라이다 포인트 클라우드 영상이 표시됩니다.

장애물 회피(Obstacle Avoidance)
UAV가 환경에서 비행 임무를 수행하면서 환경에 존재하는 장애물을 피하려면, 사용 가능한 센서 데이터를 활용해야 합니다. 모델 구성을 수정하려면 Obstacle Avoidance 또는 3D Obstacle Avoidance 바로 가기를 클릭합니다. 그러면 스코프가 열리고 직육면체 환경에서 건물까지의 최단 지점을 보여줍니다. Obstacle Avoidance 바로 가기는 평면 라이다 정보와 Vector Field Histogram (Navigation Toolbox)을 사용하여, UAV가 현재 x-y 평면에서 방향을 바꿔 장애물을 회피하도록 모델을 구성합니다. 3D Obstacle Avoidance 바로 가기는 3차원 라이다 점과 Obstacle Avoidance를 사용하여, UAV가 3차원 공간에서 방향을 바꿔 장애물을 회피하도록 모델을 구성합니다.
모델을 실행합니다. Obstacle Avoidance 모드에서 모델을 실행하면, 항공기는 배송 지점까지 건물 사이를 직선 경로로 비행하려고 시도하지만, 장애물을 피하기 위해 경로를 이탈합니다. 시간이 경과하면서 장애물까지의 거리가 변하는 것을 관찰할 수 있으며, 3D Obstacle Avoidance 모드에서도 유사한 동작을 볼 수 있습니다. 이 모드에서는 UAV가 고도를 조절하여 장애물 위로 비행할 수도 있습니다.

실사 시뮬레이션(Photorealistic Simulation)
지금까지 환경은 단순한 직육면체 시나리오였습니다. 환경의 충실도를 높이기 위해, Photorealistic Simulation 바로 가기를 클릭합니다. 그러면 항공기가 더 사실적인 환경에 배치되어 그 환경을 비행하게 됩니다. uavPackageDelivery/photorealisticSimulationEngi/SimulationEnvironmentVariant에 있는 PhotorealisticQuadrotor Variant가 활성화됩니다. 이 Variant는 시뮬레이션 환경과 항공기에 장착된 센서를 구성하는 데 필요한 블록을 포함하고 있습니다.

모델을 실행합니다. 항공기는 1단계와 2단계에서와 동일한 임무를 수행하도록 설정되어 있습니다. 항공기가 비행 임무를 수행하는 동안 라이다 포인트 클라우드가 업데이트되고 전면 카메라 영상이 표시되는 것을 볼 수 있습니다.

실사 시뮬레이션 환경에서 전체 비행 임무 수행하기
이번에는 Fly full mission 바로 가기를 클릭하여, 2단계의 QGroundControl과 연결을 설정하고 실사 환경 내에서 임무를 업로드할 수 있게 합니다. 다음 단계에 따라 시뮬레이션을 실행합니다.
QGroundControl을 실행합니다.
QGroundControl에서
/utilities/qgc에 있는shortMission.plan이라는 임무 계획을 불러옵니다.시뮬레이션을 실행합니다.
QGroundControl에서 시스템에 연결되었다고 표시되면, 임무를 업로드합니다.
항공기가 비행을 시작하면, QGroundControl에서 웨이포인트를 추가하거나 기존 웨이포인트를 이동하여 임무를 수정할 수 있습니다. 임무를 업로드하면 항공기가 이 변경 사항을 반영하여 동작합니다. 전체 비행 과정 동안, 시나리오 내에서 항공기가 비행하는 모습을 볼 수 있습니다.

실사 시뮬레이션 환경에서 장애물 회피 비행하기
이번 목표는 QGroundControl에서 이륙 지점과 착륙 지점을 지정하고, 장애물 회피를 사용해 경로상의 장애물을 피해가면서 임무를 수행하는 것입니다. Fly full Obstacle Avoidance 또는 Fly full 3D Obstacle Avoidance 바로 가기를 클릭하고 다음 단계에 따라 시뮬레이션을 실행합니다.
QGroundControl을 실행합니다.
QGroundControl에서
/utilities/qgc에 있는oaMission.plan이라는 임무 계획을 불러옵니다.시뮬레이션을 실행합니다.
QGroundControl에서 시스템에 연결되었다고 표시되면, 임무를 업로드합니다.
전체 비행 과정 동안, 항공기가 QGroundControl에서 명령한 경로를 따라가면서 동시에 환경 내 건물과의 충돌을 피하려고 시도하는 모습을 관찰해 보십시오. Fly full 3D Obstacle Avoidance를 사용하면 UAV가 낮은 건물 주위를 돌며 비행하는 대신 건물 위로 비행합니다.

비행 도중에 UAV가 건물 모퉁이를 돌아서 비행하는 것을 볼 수 있습니다.

고충실도 시뮬레이션을 위한 6DOF 플랜트 모델 추가하기
마지막 단계로, Adding a High Fidelity Plant 바로 가기를 클릭하여, uavPackageDelivery/MultirotorModel/Inner Loop and Plant Model/High-FidelityModel에 있는 UAV 모델의 고충실도 Variant를 활성화합니다. 이 Variant는 내부 루프 제어기와 고충실도 플랜트 모델을 포함하고 있습니다.

모델을 실행합니다. 고충실도 모델이기 때문에 UAV의 동작에 약간의 변화가 있지만 동일한 임무를 수행합니다.
모델 탐색을 마치면 프로젝트 파일을 닫습니다.
close(prj);