멀티위(MultiWii)는 비행용 RC(원격 조종) 모델을 제어하기 위한 범용 자유 오픈 소스 프로젝트이다. GNU GPL 라이선스 하에 배포되며, 누구나 소스 코드를 수정 및 배포할 수 있다.
개요
멀티위는 원래 닌텐도의 Wii 게임 콘솔용 주변기기인 Wii Motion Plus(자이로 센서)와 아두이노(Arduino) 프로 미니 보드 계열(ATmega328칩) 또는 ATmega32u4칩 기반 아두이노 프로 마이크로와 같은 저렴하고 소형인 비행 제어 장치(FC, Flight Controller)를 결합하여 드론(멀티콥터)을 제어할 목적으로 시작되었다. 시간이 지나면서 GPS 내비게이션, 기압 센서 기반 고도 유지, 지자계 센서 기반 방위 유지 등 고급 기능을 지원하도록 발전하였다.
역사
2011년경 MultiWii version 1.8이 본격적으로 개발되었으며, 현재까지 빌드 및 사용이 가능한 안정 버전은 2.4이다. 이후 개발은 Cleanflight, Betaflight 등 파생 오픈 소스 펌웨어 프로젝트로 이어지게 되었다.
통신 프로토콜: MSP
멀티위는 자체적인 표준 통신 규약인 MSP(Multiwii Serial Protocol)를 사용한다. MSP는 비행 컨트롤러(FC)와 지상 관제 프로그램(GUI), OSD(On-Screen Display), 텔레메트리 장치 등이 데이터를 주고받기 위한 바이너리 기반의 경량 직렬 통신 프로토콜이다.
MSP 패킷은 다음과 같은 구조를 가진다.
| 필드 | 헤더1 | 헤더2 | 헤더3 | DATA length | CODE | DATA | CRC |
|---|---|---|---|---|---|---|---|
| 값 | $ (0x24) | M (0x4D) | < 또는 > | 데이터 길이 | 메시지 ID | 실제 데이터 | 체크섬 |
- 헤더1, 헤더2: 고정값(
$M)으로 패킷의 시작을 식별한다. - 헤더3: 데이터 방향을 나타낸다.
'<'는 PC에서 FC로의 송신,'>'는 FC에서 PC로의 응답을 의미한다. - CRC: 데이터 길이, CODE, 각 데이터 바이트를 모두 XOR한 값으로 오류 검출에 사용된다.
대표적인 MSP 명령으로는 기체 식별 정보를 요청하는 MSP_IDENT(ID 100), 상태 정보를 요청하는 MSP_STATUS(ID 101), RC 채널 데이터를 요청하는 MSP_RC(ID 105), GPS 정보를 요청하는 MSP_RAW_GPS(ID 106), RC 채널을 외부에서 주입하는 MSP_SET_RAW_RC(ID 200) 등이 있다.
활용
멀티위는 아두이노 기반 드론(쿼드콥터, 트라이콥터, 헥사콥터, Y6, VTAIL 등 다양한 기체 형태 지원) 제작에 널리 사용되었다. PC 또는 모바일용 GUI 프로그램(MultiWiiConf 등)을 통해 실시간으로 센서 값을 모니터링하고 PID 게인을 조정할 수 있다. 이후 Cleanflight, Betaflight 등으로 계승되며 드론 오픈 소스 펌웨어 발전의 기초가 되었다.