{{위키데이터 속성 추적}}
'''멀티위'''(MultiWii)는 비행용 RC(원격조정가능한) 모델을 제어하기위한 범용 무료 오픈 소스 프로젝트이다.<ref>{{웹 인용 |url=http://www.multiwii.com/wiki/?title=Main_Page |제목=멀티위 공식위키 |확인날짜=2019-01-09 |보존url=https://web.archive.org/web/20190109155536/http://www.multiwii.com/wiki/?title=Main_Page |보존날짜=2019-01-09 |url-status=dead }}</ref><ref>[https://code.google.com/archive/p/multiwii/ GNU GPL]</ref>

일례로 멀티위콥터(MultiWiiCopter)는 역사적으로 [[Wii]]가 확장된 [[Wii Motion Plus]]와 [[아두이노]](Arduino) pro 미니 보드계열(ATmega328칩)의 조합을 기반으로한다.<ref>(MSP)Multiwii Serial Protocol</ref> 또는 ATmega32u4칩의 아두이노 프로 마이크로<ref>(ATmega32u4칩)아두이노 프로 마이크로 보드계열 레오나르도등</ref>같은 매우 단순하고 저렴하며 미니멀한 비행 제어 장치에서 이 프로젝트는 성숙되어 GPS 네비게이션을 포함한 모든 추가 기능을 지원하도록 발전하여왔다. 오픈소스로 공개되어 개발되고있다.

==통신 프로토콜==
MSP(Multiwii Serial Protocol)는 멀티위 플라이트 콘트롤러(FC)가 사용하는 멀티위 펌웨어를 구성하는 표준통신 규약이다.
멀티위는 비행체의 FC보드와 무선조정장치(RC)를 서로 연동하는 무선 메시지를 교환하는 프로토콜로 MSP를 발전시켜 사용했으며 데이타형식으로는 [[아스키 코드]]를 [[시리얼통신]]에 사용하고있다.<ref>[https://github.com/filipproch/MSP_Arduino MultiWii Serial Protocol implementation for Arduino]</ref>

MSP패킷중 명령형 타입의 예<ref>(UINT 8)[[정수형]]중 부호없는 정수값 0~255</ref><ref>{{웹 인용 |url=http://www.multiwii.com/wiki/index.php?title=Multiwii_Serial_Protocol |제목=표준 MSP 테이블 |확인날짜=2019-01-15 |보존url=https://web.archive.org/web/20190115132516/http://www.multiwii.com/wiki/index.php?title=Multiwii_Serial_Protocol |보존날짜=2019-01-15 |url-status=dead }}</ref>
{| class="wikitable"
|-
| $ || M || < || size || type(메세지 ID) || bytes || crc
|-
| [[헤더 (컴퓨팅)|헤더]]1 || 헤더2 || 헤더3 || 데이타의 항목(DATA length) || [[네트워크 패킷|패킷]]타입(CODE) || 데이타(Roll,Pitch,Yaw,Throttole,AUX1,AUX2,AUX3,AUX4) || [[체크섬]]
|-
|36 || 77 || 60 || 8 || 200 || 125,125,125,0,10,0,0,0 || 233
|}
[[순환 중복 검사|CRC]] 체크섬 값은 데이타의 항목 , 패킷 타입, 데이타(Roll,Pitch,Yaw,Throttole,AUX1,AUX2,AUX3,AUX4)의 [[XOR]] 값이다.
위의 경우 crc = 8 XOR 200 XOR 125 XOR 125 XOR 125 XOR 0 XOR 10 XOR 0 XOR 0 XOR 0 =183이다.

아스키코드 표현
{| class="wikitable"
|-
| $ || M || < || ← || È || }}}□LF□□□ || É
|-
|36 || 77 || 60 || 8 || 200 || 125,125,125,0,10,0,0,0 || 233
|}
128이상에서는 [[ISO/IEC 8859]]중 [[ISO/IEC 8859-1|1]]를 적용한 경우이다.

==패킷 구조 및 형식==
패킷 형식은 FC(플라이트 컨트롤러)를 기준으로 하는 방향이다.<ref>{{웹 인용 |url=http://www.multiwii.com/forum/viewtopic.php?f=8&t=1516 |제목=New Multiwii Serial Protocol |확인날짜=2019-01-17 |보존url=https://web.archive.org/web/20190119121119/http://www.multiwii.com/forum/viewtopic.php?f=8&t=1516 |보존날짜=2019-01-19 |url-status=dead }}</ref>
:헤더1 과 헤더2의 값은 고유값이며 헤더3은 패킷의 신호 방향이다.

송신 패킷 형식
{| class="wikitable"
|-
| 헤더1 || 헤더2 || 헤더3 || DATA length || CODE || DATA || CRC
|-
| $ || M || < || ← || È || }}}□LF□□□ || É
|}
요청 패킷 형식
:데이타 필드가 없다. 따라서 데이터의 크기는 0이다.
{| class="wikitable"
|-
| 헤더1 || 헤더2 || 헤더3 || DATA length || CODE || CRC
|-
| $ || M || < || 0 || d ||  d
|}
수신 패킷 형식 (송신 패킷 형식의구조를 사용한다.)
{| class="wikitable"
|-
| 헤더1 || 헤더2 || 헤더3 || DATA length || CODE || DATA || CRC
|-
| $ || M || > ||  ||  ||   ||  
|}

==표준 MSP 코드 테이블의 예==
{| class="wikitable"
!command!!message_id(CODE) !!direction!!data!!type!!comment
|-
||MSP_IDENT||100||FC →||VERSION||UINT 8||version of MultiWii
|-
||||||||MULTITYPE||UINT 8||type of multi:
TRI/QUADP,QUADX,BI,GIMBAL,Y6,HEX6,FLYING_WING,Y4,HEX6X,OCTOX8,
OCTOFLATP,OCTOFLATX,AIRPLANE,HELI_120,HELI_90,VTAIL4,HEX6H,SINGLECOPTER,DUALCOPTER
|-
||||||||MSP_VERSION||UINT 8||not used currently
|-
||||||||capability||UINT 32||A 32 bit variable to indicate capability of FC board.
Currently,  BIND button is used on first bit, DYNBAL on second, FLAP on third
|-
!||||||||||
|-
||MSP_STATUS||101||FC →||cycleTime||UINT 16||unit: microseconds
|-
||||||||i2c_errors_count||UINT 16||
|-
||||||||sensor||UINT 16||bit variable: ACC|BARO<<1|MAG<<2|GPS<<3|SONAR<<4
|-
||||||||flag||UINT 32||a bit variable to indicate which BOX are active, the bit position depends on the BOX which are configured
|-
||||||||global_conf.currentSet||UINT 8||to indicate the current configuration setting

|-
||MSP_RC||105||FC →||rcData[RC_CHANS]||16 x UINT 16||Range [1000;2000]
ROLL,PITCH,YAW,THROTTLE,AUX1,AUX2,AUX3,AUX4
|-
!||||||||||
|-
||MSP_SET_RAW_RC||200||→ FC||rcData[RC_CHANS]||16 x UINT 16||Range [1000;2000]
ROLL,PITCH,YAW,THROTTLE,AUX1,AUX2,AUX3,AUX4

This request is used to inject RC channel via MSP.
Each chan overrides legacy RX as long as it is refreshed at least every second. See UART radio projects for more details.
|-
!||||||||||
|-
||MSP_RAW_GPS||106||FC →||GPS_FIX||UINT 8||0 or 1
|-
||||||||GPS_numSat||UINT 8||
|-
||||||||GPS_coord[LAT]||UINT 32||1 / 10 000 000 deg
|-
||||||||GPS_coord[LON]||UINT 32||1 / 10 000 000 deg
|-
||||||||GPS_altitude||UINT 16||meter
|-
||||||||GPS_speed||UINT 16||cm/s
|}

==소프트웨어 버전==
2011년 본격적으로 개발된 MultiWii version 1.8을 비롯해서 현재 [[펌웨어]]로 빌드되고있는 안정버전은 2.4이다.<ref>[https://code.google.com/archive/p/multiwii/ 구글코드아키브]</ref>

== 같이 보기 ==
* [[아두파일럿]]
* [[드론]]
* [[쿼드콥터]]
* [[NMEA]]

== 각주 ==
{{각주}}
* [http://www.multiwii.com/wiki/ 멀티위 공식위키]{{깨진 링크|url=http://www.multiwii.com/wiki/ }}
* [https://web.archive.org/web/20190109155536/http://www.multiwii.com/wiki/?title=Main_Page 멀티위]
* [https://web.archive.org/web/20190115132516/http://www.multiwii.com/wiki/index.php?title=Multiwii_Serial_Protocol MSP]

[[분류:원격 데스크톱]]