멀티위
멀티위(MultiWii)는 비행용 RC(원격조정가능한) 모델을 제어하기위한 범용 무료 오픈 소스 프로젝트이다.[1][2]
일례로 멀티위콥터(MultiWiiCopter)는 역사적으로 Wii가 확장된 Wii Motion Plus와 아두이노(Arduino) pro 미니 보드계열(ATmega328칩)의 조합을 기반으로한다.[3] 또는 ATmega32u4칩의 아두이노 프로 마이크로[4]같은 매우 단순하고 저렴하며 미니멀한 비행 제어 장치에서 이 프로젝트는 성숙되어 GPS 네비게이션을 포함한 모든 추가 기능을 지원하도록 발전하여왔다. 오픈소스로 공개되어 개발되고있다.
통신 프로토콜[편집]
MSP(Multiwii Serial Protocol)는 멀티위 플라이트 콘트롤러(FC)가 사용하는 멀티위 펌웨어를 구성하는 표준통신 규약이다. 멀티위는 비행체의 FC보드와 무선조정장치(RC)를 서로 연동하는 무선 메시지를 교환하는 프로토콜로 MSP를 발전시켜 사용했으며 데이타형식으로는 아스키 코드를 시리얼통신에 사용하고있다.[5]
$ | 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(플라이트 컨트롤러)를 기준으로 하는 방향이다.[8]
- 헤더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 코드 테이블의 예[편집]
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 | 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이다.[9]
같이 보기[편집]
각주[편집]
- ↑ “멀티위 공식위키”. 2019년 1월 9일에 원본 문서에서 보존된 문서. 2019년 1월 9일에 확인함.
- ↑ GNU GPL
- ↑ (MSP)Multiwii Serial Protocol
- ↑ (ATmega32u4칩)아두이노 프로 마이크로 보드계열 레오나르도등
- ↑ MultiWii Serial Protocol implementation for Arduino
- ↑ (UINT 8)정수형중 부호없는 정수값 0~255
- ↑ “표준 MSP 테이블”. 2019년 1월 15일에 원본 문서에서 보존된 문서. 2019년 1월 15일에 확인함.
- ↑ “New Multiwii Serial Protocol”. 2019년 1월 19일에 원본 문서에서 보존된 문서. 2019년 1월 17일에 확인함.
- ↑ 구글코드아키브