🚀
PX4 ROS(1) MAVROS 프로그래밍
  • 개발 환경 준비
  • MAVROS 설치
  • ROS 개발 환경 설정
  • Gazebo Classic 시뮬레이터
  • Gazebo-Classic 시뮬레이터와 MAVROS 실행
  • MAVROS 패키지
    • 노드(Node)
    • 실행
    • 연결 정보(Connection URL)
    • MAVROS 유틸리티 커맨드
    • 플러그인(Plugins)
  • OFFBOARD 모드
  • OFFBOARD 제어를 위한 QGC 설정
  • MAVROS 오프보드 제어 예제 1 (Python)
  • MAVROS 오프보드 제어 예제 2
  • MAVROS Yaw 방향 제어 예제
  • MAVROS 오프보드 제어 예제(C++)
  • MAVROS에서 PX4로 사용자 정의 메시지 보내기
  • 문제 해결
  • PX4 & MAVROS Offboard Samples
  • 교육 안내
Powered by GitBook
On this page
  • 설치
  • 시뮬레이션 실행
  • PX4 시작하기
  • 사용법/구성 옵션
  • 센서/하드웨어 오류 시뮬레이션
  • 헤드리스 모드
  • 사용자 정의 이륙 위치 설정
  • 시뮬레이션 속도 변경
  • 풍속 변경
  • 조이스틱 사용
  • GPS 노이즈 시뮬레이션
  • 특정 세계 로드
  • 세계 위치 설정
  • Gazebo와 PX4를 별도로 시작하기
  • 시뮬레이션된 카메라
  • 시뮬레이션된 깊이(Depth) 카메라
  • 시뮬레이션된 낙하산/비행 종료
  • 비디오 스트리밍
  • 전제조건
  • 비디오 스트리밍 시작/중지
  • 가제보의 비디오를 보는 방법
  • 자세한 로깅

Gazebo Classic 시뮬레이터

PreviousROS 개발 환경 설정NextGazebo-Classic 시뮬레이터와 MAVROS 실행

Last updated 1 year ago

Gazebo Classic은 Ubuntu Linux 20.04까지만 PX4에서 지원됩니다. Ubuntu 22.04 버전 부터는 Gazebo를 사용 합니다.

Gazebo Classic은 객체 회피 및 컴퓨터 비전 테스트에 특히 적합한 자율 로봇을 위한 강력한 3D 시뮬레이션 환경입니다. 이 페이지에서는 SITL 및 단일 차량에서의 사용에 대해 설명합니다. Gazebo Classic은 HITL 및 다중 차량 시뮬레이션 에도 사용할 수 있습니다 .

지원 차량: Quad (, Hex (Typhoon H480), , Tailsitter, Plane, Rover, Submarine/UUV

설치

아래와 같이 aptitude를 이용하여 설치 합니다. (종속성 충돌방지를 위해)

ROS(1)을 full로 설치 하였다면 Gazebo-Classic은 같이 설치 됩니다. 별도 설치 필요 없음.

sudo apt install aptitude
sudo aptitude install gazebo libgazebo11 libgazebo-dev

메모

ROS와 함께 PX4를 사용하려는 경우 ROS 지침에 따라 ROS와 Gazebo Classic을 모두 설치해야 합니다(따라서 설치 충돌을 방지해야 합니다).

sudo apt remove gz-garden
sudo apt install aptitude
sudo aptitude install gazebo libgazebo11 libgazebo-dev

시뮬레이션 실행

로드할 기체 구성으로 PX4 SITL 및 Gazebo Classic을 시작하여 시뮬레이션을 실행합니다(멀티콥터, 비행기, VTOL, 광학 흐름 및 다중 차량 시뮬레이션이 지원됨).

이를 수행하는 가장 쉬운 방법은 PX4 PX4-Autopilot 저장소의 루트 디렉터리에서 터미널을 열고 원하는 대상을 make빌드하는 것입니다. 예를 들어 쿼드로터 시뮬레이션을 시작하려면(기본값):

cd ~/PX4-Autopilot
make px4_sitl gazebo-classic

지원되는 차량과 make명령은 아래에 나열되어 있습니다(차량 이미지를 보려면 링크를 클릭하세요).

메모

빌드 대상의 전체 목록을 보려면 make px4_sitl list_vmd_make_targets를 실행 하고 gazebo-classic_로 시작하는 대상을 필터링하세요.

Vehicle
Command

make px4_sitl gazebo-classic

make px4_sitl gazebo-classic_iris_opt_flow

make px4_sitl gazebo-classic_iris_depth_camera

make px4_sitl gazebo-classic_iris_downward_depth_camera

make px4_sitl gazebo-classic_solo

make px4_sitl gazebo-classic_typhoon_h480

make px4_sitl gazebo-classic_plane

make px4_sitl gazebo-classic_plane_catapult

make px4_sitl gazebo-classic_standard_vtol

make px4_sitl gazebo-classic_tailsitter

make px4_sitl gazebo-classic_rover

make px4_sitl gazebo-classic_r1_rover

make px4_sitl gazebo-classic_uuv_hippocampus

make px4_sitl gazebo-classic_boat

make px4_sitl gazebo-classic_cloudship

위의 명령은 전체 UI를 갖춘 단일 차량을 시작합니다. 기타 옵션은 다음과 같습니다.

  • PX4와 Gazebo를 별도로 시작하면 Gazebo Classic을 계속 실행하고 필요할 때만 PX4를 다시 시작할 수 있습니다(둘 다 다시 시작하는 것보다 빠릅니다).

  • Gazebo Classic UI를 시작하지 않는 Headless Mode 에서 시뮬레이션을 실행합니다 (이 방법은 더 적은 리소스를 사용하고 훨씬 빠릅니다).

PX4 시작하기

위의 make명령은 먼저 PX4를 빌드한 다음 Gazebo Classic 시뮬레이터와 함께 실행합니다.

PX4가 시작되면 아래와 같이 PX4 쉘이 시작됩니다.

______  __   __    ___
| ___ \ \ \ / /   /   |
| |_/ /  \ V /   / /| |
|  __/   /   \  / /_| |
| |     / /^\ \ \___  |
\_|     \/   \/     |_/

px4 starting.

INFO  [px4] Calling startup script: /bin/sh etc/init.d-posix/rcS 0
INFO  [param] selected parameter default file eeprom/parameters_10016
[param] Loaded: eeprom/parameters_10016
INFO  [dataman] Unknown restart, data manager file './dataman' size is 11798680 bytes
INFO  [simulator] Waiting for simulator to connect on TCP port 4560
Gazebo multi-robot simulator, version 9.0.0
Copyright (C) 2012 Open Source Robotics Foundation.
Released under the Apache 2 License.
http://gazebosim.org
...
INFO  [ecl/EKF] 5188000: commencing GPS fusion

콘솔은 PX4가 기체별 초기화 및 매개변수 파일을 로드하고 시뮬레이터를 기다리는(및 연결하는) 상태를 인쇄합니다. [ecl/EKF] commencing GPS fusion라는 INFO 메시지가 나오면 드론은 시동 준비가 된 것입니다.

메모

쿼드로터 모델을 마우스 오른쪽 버튼으로 클릭하면 상황에 맞는 메뉴에서 팔로우 모드를 활성화할 수 있어 계속해서 볼 수 있어 편리합니다.

다음을 입력하여 이륙할 수 있습니다.

pxh> commander takeoff

사용법/구성 옵션

센서/하드웨어 오류 시뮬레이션

헤드리스 모드

Gazebo Classic은 Gazebo Classic UI가 실행되지 않는 헤드리스 모드 에서 실행될 수 있습니다 . 이는 더 빠르게 시작되고 더 적은 시스템 리소스를 사용합니다(즉, 시뮬레이션을 실행하는 데 더 "가벼운" 방법입니다).

다음과 같이 일반 make명령 앞에 다음을 추가하면 됩니다.HEADLESS=1

HEADLESS=1 make px4_sitl gazebo-classic_plane

사용자 정의 이륙 위치 설정

Gazebo Classic의 이륙 위치는 환경 변수를 사용하여 설정할 수 있습니다. 이는 기본 이륙 위치와 세계에 설정된 모든 값을 모두 재정의합니다 .

설정할 변수는 , PX4_HOME_LAT,PX4_HOME_LON,PX4_HOME_ALT및 입니다.

예를 들어:

export PX4_HOME_LAT=28.452386
export PX4_HOME_LON=-13.867138
export PX4_HOME_ALT=28.5
make px4_sitl gazebo-classic

시뮬레이션 속도 변경

PX4_SIM_SPEED_FACTOR환경 변수를 이용하여 실시간 대비 시뮬레이션 속도를 높이거나 낮출 수 있습니다.

export PX4_SIM_SPEED_FACTOR=2
make px4_sitl_default gazebo-classic

실시간보다 빠르게 시뮬레이션 실행

jMAVSim 또는 Gazebo Classic을 사용할 때 SITL은 실시간보다 빠르게 또는 느리게 실행될 수 있습니다.

속도 요소는 PX4_SIM_SPEED_FACTOR환경 변수를 사용하여 설정됩니다. 예를 들어, 실시간 속도의 2배로 jMAVSim 시뮬레이션을 실행하려면:

PX4_SIM_SPEED_FACTOR=2 make px4_sitl jmavsim

절반 실시간으로 실행하려면 다음을 수행하세요.

PX4_SIM_SPEED_FACTOR=0.5 make px4_sitl jmavsim

다음을 사용하여 현재 세션의 모든 SITL 실행에 요소를 적용할 수 있습니다.

export PX4_SIM_SPEED_FACTOR=2
make px4_sitl jmavsim

메모

어떤 시점에서 IO 또는 CPU는 컴퓨터에서 가능한 속도를 제한하고 "자동으로" 속도가 느려집니다. 강력한 데스크톱 컴퓨터는 일반적으로 약 6~10배로 시뮬레이션을 실행할 수 있으며, 노트북의 경우 달성되는 속도는 약 3~4배일 수 있습니다.

풍속 변경

풍속을 시뮬레이션하려면 windVelocityMean 플러그인을 월드 파일에 추가하고 m/s 단위로 설정하세요(SET_YOUR_WIND_SPEED). 필요한 경우 windVelocityMean보다 크도록 windVelocityMax매개변수를 조정합니다 .

  <plugin name='wind_plugin' filename='libgazebo_wind_plugin.so'>
      <frameId>base_link</frameId>
      <robotNamespace/>
      <windVelocityMean>SET_YOUR_WIND_SPEED</windVelocityMean>
      <windVelocityMax>20.0</windVelocityMax>
      <windVelocityVariance>0</windVelocityVariance>
      <windDirectionMean>0 1 0</windDirectionMean>
      <windDirectionVariance>0</windDirectionVariance>
      <windGustStart>0</windGustStart>
      <windGustDuration>0</windGustDuration>
      <windGustVelocityMean>0</windGustVelocityMean>
      <windGustVelocityMax>20.0</windGustVelocityMax>
      <windGustVelocityVariance>0</windGustVelocityVariance>
      <windGustDirectionMean>1 0 0</windGustDirectionMean>
      <windGustDirectionVariance>0</windGustDirectionVariance>
      <windPubTopic>world_wind</windPubTopic>
    </plugin>

풍향은 방향 벡터(표준 ENU 규칙)로 전달되며, 이는 가제보 플러그인에서 정규화됩니다. 또한 (m/s)² 단위의 풍속 변화와 정규 분포를 기반으로 한 방향 변화를 명시하여 시뮬레이션에 임의의 요인을 추가할 수 있습니다. 돌풍은 바람과 동일한 방식으로 내부적으로 처리되지만, 다음 두 매개변수 windGustStart및windGustDuration 를 사용하여 시작 시간과 지속 시간을 지정할 수 있다는 점에서 약간의 차이가 있습니다.

조이스틱 사용

조이스틱 및 엄지 조이스틱 지원은 QGroundControl을 통해 지원됩니다.

GPS 노이즈 시뮬레이션

Gazebo Classic은 실제 시스템에서 일반적으로 발견되는 것과 유사한 GPS 노이즈를 시뮬레이션할 수 있습니다(그렇지 않으면 GPS 값은 노이즈가 없고 완벽합니다). 이는 GPS 노이즈의 영향을 받을 수 있는 애플리케이션(예: 정밀 위치 지정)을 작업할 때 유용합니다.

대상 차량의 SDF 파일에 gpsNoise요소 값이 포함되어 있는 경우 GPS 노이즈가 활성화됩니다 <gpsNoise>true</gpsNoise>. 이는 많은 차량 SDF 파일( solo.sdf , iris.sdf , Standard_vtol.sdf , delta_wing.sdf , plane.sdf , typhoon_h480 , tailsitter.sdf )에서 기본적으로 활성화되어 있습니다 .

GPS 소음을 활성화/비활성화하려면:

  1. SDF 파일을 생성하려면 모든 차량에 대해 전망대 타겟을 빌드하세요. 예를 들어:

    make px4_sitl gazebo-classic_iris
  2. 대상 차량에 대한 SDF 파일을 엽니다(예: ./Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/iris/iris.sdf ).

  3. gpsNoise요소 검색 :

    <plugin name='gps_plugin' filename='libgazebo_gps_plugin.so'>
      <robotNamespace/>
      <gpsNoise>true</gpsNoise>
    </plugin>
    • 존재하는 경우 GPS가 활성화된 것입니다. 다음 줄을 삭제하여 비활성화할 수 있습니다.<gpsNoise>true</gpsNoise>

다음에 Gazebo Classic을 빌드/다시 시작하면 새로운 GPS 노이즈 설정이 사용됩니다.

특정 세계 로드

PX4 구성 대상에서 최종 옵션으로 지정하여 세계를 로드할 수 있습니다.

예를 들어, Warehouse world를 로드하려면 다음과 같이 추가하면 됩니다.

make px4_sitl_default gazebo-classic_plane_cam__warehouse

세계 위치 설정

차량은 일부 시뮬레이션된 GPS 위치에서 세계 모델의 원점에 매우 가깝게 생성됩니다.

메모

차량은 정확히 Gazebo 원점(0,0,0)에 생성되지 않지만 약간의 오프셋을 사용하여 여러 일반적인 코딩 문제를 강조할 수 있습니다.

실제 위치(예: 특정 공항)를 재현하는 세계를 사용하는 경우 시뮬레이션된 세계에 표시되는 것과 지상국 지도에 표시되는 것 사이에 매우 명백한 불일치가 발생할 수 있습니다. 이 문제를 극복하기 위해 세계 원점 위치를 "실제 생활"에 있을 GPS 좌표로 설정할 수 있습니다.

메모

동일한 작업을 수행하는 사용자 정의 이륙 위치를 설정할 수도 있습니다 . 그러나 지도에 위치를 추가하는 것이 더 쉽습니다(필요한 경우 사용자 정의 위치를 ​​설정하여 계속 무시할 수 있음).

세계의 위치는 태그 를 사용하여 원점 위치를 지정하여 .world 파일에 정의됩니다. 위도, 경도, 고도를 모두 지정해야 합니다.

    <spherical_coordinates>
      <surface_model>EARTH_WGS84</surface_model>
      <latitude_deg>38.161479</latitude_deg>
      <longitude_deg>-122.454630</longitude_deg>
      <elevation>488.0</elevation>
    </spherical_coordinates>
make px4_sitl gazebo-classic_rover__sonoma_raceway

아래 비디오는 환경의 위치가 세계와 일치하는 것을 보여줍니다.

Gazebo와 PX4를 별도로 시작하기

확장된 개발 세션의 경우 Gazebo Classic과 PX4를 별도로 시작하거나 IDE 내에서 시작하는 것이 더 편리할 수 있습니다.

Gazebo Classic과 PX4를 별도로 시작하려면:

  • 변형 을 지정하는 터미널을 통해 전망대 클래식(또는 기타 SIM) 서버 및 클라이언트 뷰어를 실행합니다 _ide.

    make px4_sitl gazebo-classic___ide

    또는

    make px4_sitl gazebo-classic_iris_ide
  • IDE에서 px4_<mode>디버깅하려는 대상을 선택하세요(예: px4_iris)

  • IDE에서 직접 디버그 세션 시작

이 접근 방식은 시뮬레이터가 항상 백그라운드에서 실행되고 매우 가벼운 px4 프로세스만 다시 실행하기 때문에 디버그 주기 시간을 크게 줄입니다.

시뮬레이션된 카메라

이 카메라로 평면을 시뮬레이션하려면:

make px4_sitl_default gazebo-classic_plane_cam

메모

카메라는 다음 MAVLink 명령을 지원/응답합니다:

메모

시뮬레이션된 깊이(Depth) 카메라

이는 각각 /camera/depth/image_raw및 /camera/depth/camera_infoROS 주제에 대한 깊이 이미지와 카메라 정보를 게시합니다.

전방을 향한 깊이 카메라를 사용하여 쿼드로터를 시뮬레이션할 수 있습니다.

make px4_sitl gazebo-classic_iris_depth_camera

또는 아래쪽을 향하는 깊이 카메라가 있는 쿼드로터:

make px4_sitl gazebo-classic_iris_downward_depth_camera

시뮬레이션된 낙하산/비행 종료

Gazebo Classic은 비행 종료 중 낙하산 배치 를 시뮬레이션하는 데 사용할 수 있습니다 (비행 종료는 Gazebo Classic 에서 시뮬레이션되는 PWM 명령에 의해 트리거됨 ).

목표물 if750a에는 차량에 낙하산이 부착되어 있습니다. 차량을 시뮬레이션하려면 다음 명령을 실행하십시오.

make px4_sitl gazebo-classic_if750a

비디오 스트리밍

Gazebo Classic용 PX4 SITL은 시뮬레이션된 차량 모델에 부착된 카메라 센서에서 UDP 비디오 스트리밍을 지원합니다. 스트리밍이 활성화되면 QGroundControl (UDP 포트 5600)에서 이 스트림에 연결하고 실제 카메라에서와 마찬가지로 시뮬레이션된 차량에서 Gazebo Classic 환경의 비디오를 볼 수 있습니다. 비디오는 gstreamer 파이프라인을 사용하여 스트리밍되며 Gazebo Classic UI의 버튼을 사용하여 활성화/비활성화할 수 있습니다.

시뮬레이션된 카메라 센서는 다음 프레임에서 지원/활성화됩니다.

전제조건

비디오 스트리밍에는 Gstreamer 1.0 이 필요합니다. Gazebo Classic을 설정할 때 필수 종속성이 이미 설치되어 있어야 합니다 (macOS 및 Ubuntu Linux용 표준 PX4 설치 스크립트/지침에 포함되어 있음).

메모

참고로 종속성에는 gstreamer1.0-plugins-base, gstreamer1.0-plugins-good, gstreamer1.0-plugins-bad, gstreamer1.0-plugins-ugly, libgstreamer-plugins-base1.0-dev가 포함됩니다.

비디오 스트리밍 시작/중지

대상 차량에서 지원하면 비디오 스트리밍이 자동으로 시작됩니다. 예를 들어 Typhoon H480에서 비디오 스트리밍을 시작하려면:

make px4_sitl gazebo-classic_typhoon_h480

Gazebo UI 비디오 ON/OFF 버튼을 사용하여 스트리밍을 일시 중지/다시 시작할 수 있습니다.

가제보의 비디오를 보는 방법

SITL/Gazebo Classic 카메라 비디오 스트림을 보는 가장 쉬운 방법은 QGroundControl 을 사용하는 것입니다 . 애플리케이션 설정 > 일반을 열고 비디오 소스를 UDP h.264 비디오 스트림 으로 설정 하고 UDP 포트를 5600 으로 설정하기만 하면 됩니다.

그러면 Gazebo Classic의 비디오가 실제 카메라에서와 마찬가지로 QGroundControl 에 표시되어야 합니다.

메모

Gstreamer Pipeline을 이용하여 영상을 시청하는 것도 가능합니다 . 다음 터미널 명령을 입력하기만 하면 됩니다.

gst-launch-1.0  -v udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' \
! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink fps-update-interval=1000 sync=false

자세한 로깅

모델에 문제가 있으면 SITL은 자동으로 실패합니다. 다음과 같이 VERBOSE_SIM를 사용하여 보다 자세한 로깅을 활성화할 수 있습니다.

export VERBOSE_SIM=1
make px4_sitl gazebo-classic

또는

VERBOSE_SIM=1 make px4_sitl gazebo-classic

자세한설치 지침은 에서 찾을 수 있습니다.

다음 명령을 사용하여 제거 하고 Gazebo-Classic 11을 다시 설치할 수 있습니다.

(forward-facing)

(downward-facing)

(with video streaming)

가제보 클래식 UI

GPS 오류 및 배터리 소모와 같은 안전 장치를 작동하는 방법을 설명합니다.

PX4가 데이터 링크 시간 초과를 감지하는 것을 방지하려면 시뮬레이션 속도에 비례하여 매개변수의 값을 늘리십시오 . 예를 들어 실시간으로 10인 경우 10x 시뮬레이션 속도에서는 COM_DL_LOSS_T=100으로 증가합니다.

에서 확인할 수 있습니다.

에 저장된 여러 에 정의된 대로 특징 없는 평평한 평면을 표시합니다.

예는

다음 명령을 사용하여 에서 로버를 생성하여 이를 테스트할 수 있습니다(모델 데이터베이스에서 모델을 다운로드해야 하기 때문에 처음 생성하는 데 시간이 더 오래 걸립니다).

Gazebo Classic 측량 카메라는 위치 태그가 지정된 JPEG 이미지를 캡처하고 카메라 캡처 정보를 연결된 지상국으로 보냅니다. 카메라는 비디오 스트리밍도 지원합니다. 특히 측량 임무 내에서 카메라 캡처를 테스트하는 데 사용할 수 있습니다.

카메라는 이미지가 캡처될 때마다 메시지가 표시됩니다. 캡처된 이미지는 다음 위치에 저장됩니다: PX4-Autopilot/build/px4 sitle_default/tmp/frames/DSC_n .jpg (여기서 n은 00000으로 시작하고 각 캡처에서 1씩 반복됩니다).

, , , , , , , , , , ,

시뮬레이션된 카메라는

Gazebo Classic 사용하여 Intel® RealSense™ D455 스테레오 심도 카메라를 시뮬레이션합니다.

차량을 비행 종료 상태로 전환하려면 비행 종료가 안전 조치로 설정된 강제하여 이를 수행할 수 있습니다 .

비디오 ON/OFF 버튼
Gazebo에 대한 QGC 비디오 스트리밍 설정
QGC 비디오 스트리밍 가제보 예시
gazebosim.org
Gazebo(Garden)를
안전 장치 시뮬레이션에서는
COM_DL_LOSS_T
PX4/PX4-SITL_gazebo-classic/worlds/windy.world
PX4 는 PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/worlds
Worlds를 지원합니다.
기본적으로 Gazebo Classic은 empty.world
sonoma_raceway.world 에서 찾을 수 있습니다.
Sonoma Raceway World
MAVLink 카메라를 시뮬레이션합니다.
CAMERA_IMAGE_CAPTURED 를 방출합니다.
MAV_CMD_REQUEST_CAMERA_CAPTURE_STATUS
MAV_CMD_REQUEST_STORAGE_INFORMATION
MAV_CMD_REQUEST_CAMERA_SETTINGS
MAV_CMD_REQUEST_CAMERA_INFORMATION
MAV_CMD_RESET_CAMERA_SETTINGS
MAV_CMD_STORAGE_FORMAT
MAV_CMD_SET_CAMERA_ZOOM
MAV_CMD_IMAGE_START_CAPTURE
MAV_CMD_IMAGE_STOP_CAPTURE
MAV_CMD_REQUEST_VIDEO_STREAM_INFORMATION
MAV_CMD_REQUEST_VIDEO_STREAM_STATUS
MAV_CMD_SET_CAMERA_MODE
PX4/PX4-SITL_gazebo-classic/main/src/gazebo_camera_manager_plugin.cpp 에 구현되어 있습니다.
깊이 카메라 모델
Openni Kinect 플러그인을
안전 점검 에 실패하도록 강제할 수 있습니다.
예를 들어 지오펜스 위반을
Typhoon H480 (Hexrotor)
Quadrotor
Quadrotor with Optical Flow
Quadrotor with Depth Camera
Quadrotor with Depth Camera
3DR Solo (Quadrotor)
Typhoon H480 (Hexrotor)
Standard Plane
Standard Plane (with catapult launch)
Standard VTOL
Tailsitter VTOL
Ackerman UGV (Rover)
Differential UGV (Rover)
HippoCampus TUHH (UUV: Unmanned Underwater Vehicle)
Boat (USV: Unmanned Surface Vehicle)
Cloudship (Airship)
Iris
Generic Standard VTOL (QuadPlane)