멀티위

멀티위(MultiWii)는 비행용 RC(원격조정가능한) 모델을 제어하기위한 범용 자유 오픈 소스 프로젝트이다.GNU GPL

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

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

MSP패킷중 명령형 타입의 예(UINT 8)정수형중 부호없는 정수값 0~255
 $  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이다.

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

패킷 구조 및 형식
패킷 형식은 FC(플라이트 컨트롤러)를 기준으로 하는 방향이다.
헤더1 과 헤더2의 값은 고유값이며 헤더3은 패킷의 신호 방향이다.

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

표준 MSP 코드 테이블의 예
commandmessage_id(CODE) directiondatatypecommentMSP_IDENT100FC →VERSIONUINT 8version of MultiWiiMULTITYPEUINT 8type of multi:
TRI/QUADP,QUADX,BI,GIMBAL,Y6,HEX6,FLYING_WING,Y4,HEX6X,OCTOX8,
OCTOFLATP,OCTOFLATX,AIRPLANE,HELI_120,HELI_90,VTAIL4,HEX6H,SINGLECOPTER,DUALCOPTERMSP_VERSIONUINT 8not used currentlycapabilityUINT 32A 32 bit variable to indicate capability of FC board.
Currently,  BIND button is used on first bit, DYNBAL on second, FLAP on thirdMSP_STATUS101FC →cycleTimeUINT 16unit: microsecondsi2c_errors_countUINT 16sensorUINT 16BARO<<1|MAG<<2|GPS<<3|SONAR<<4flagUINT 32a bit variable to indicate which BOX are active, the bit position depends on the BOX which are configuredglobal_conf.currentSetUINT 8to indicate the current configuration settingMSP_RC105FC →rcData[RC_CHANS]16 x UINT 16Range [1000;2000]
ROLL,PITCH,YAW,THROTTLE,AUX1,AUX2,AUX3,AUX4MSP_SET_RAW_RC200→ FCrcData[RC_CHANS]16 x UINT 16Range [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_GPS106FC →GPS_FIXUINT 80 or 1GPS_numSatUINT 8GPS_coord[LAT]UINT 321 / 10 000 000 degGPS_coord[LON]UINT 321 / 10 000 000 degGPS_altitudeUINT 16meterGPS_speedUINT 16cm/s

소프트웨어 버전
2011년 본격적으로 개발된 MultiWii version 1.8을 비롯해서 현재 펌웨어로 빌드되고있는 안정버전은 2.4이다.구글코드아키브

 같이 보기 
 아두파일럿
 드론
 쿼드콥터
 NMEA

 각주 

 멀티위 공식위키
 멀티위
 MSP

분류:원격 데스크톱