SKYKICK EVOLUTION / Protocol / Structs
Modified : 2023.7.1
데이터 송수신 시에 사용하는 구조체들을 소개합니다.
- Protocol::Header
- Protocol::Ping
- Protocol::Ack
- Protocol::Error
- Protocol::Request
- Protocol::Information
- Protocol::Version
- Control::Quad8
- Control::Quad8AndRequestData
- Control::Position
- Protocol::Command::Command
- Protocol::ResponseRate
- Protocol::RawMotion
- Protocol::State
- Protocol::StateController
- Protocol::Altitude
- Protocol::Motion
- Protocol::VisionSensor
- Protocol::Count
- Protocol::Trim
- Protocol::Buzzer
- Protocol::Joystick
- Protocol::InformationAssembledForController
Protocol::Header
헤더
데이터 송수신 시에 사용하는 헤더입니다.
namespace Protocol
{
struct Header
{
u8 dataType; // 데이터의 형식
u8 length; // 데이터의 길이
u8 from; // 데이터를 전송하는 장치의 DeviceType
u8 to; // 데이터를 수신하는 장치의 DeviceType
};
}
변수 이름 | 형식 | 크기 | 범위 | 설명 |
---|---|---|---|---|
dataType | Protocol::DataType::Type | 1 Byte | - | 데이터의 타입 |
length | uint8_t | 1 Byte | 0 ~ 255 | 데이터의 길이 |
from | Protocol::DeviceType::Type | 1 Byte | - | 데이터를 전송하는 장치 |
to | Protocol::DeviceType::Type | 1 Byte | - | 데이터를 수신하는 장치 |
Protocol::Ping
Ping
특정 장치가 존재하는지를 확인할 때 사용합니다. 응답은 Ack를 받습니다.
namespace Protocol
{
struct Ping
{
u64 systemTime; // Ping을 전송하는 장치의 시각
};
}
변수 이름 | 형식 | 크기 | 범위 | 설명 |
---|---|---|---|---|
systemTime | uint64_t | 8 Byte | - | 시스템 시간 |
Protocol::Ack
응답
특정한 데이터를 요청하지 않은 경우에 Ack를 응답으로 전송합니다. 수신 받은 데이터의 crc16을 포함하여 돌려보내기 때문에 데이터를 전송한 측에서 정상적으로 데이터를 전송했는지 판별하는데 사용합니다.
namespace Protocol
{
struct Ack
{
u64 systemTime; // 수신 받은 시간
u8 dataType; // 수신 받은 데이터 타입
u16 crc16; // 수신 받은 데이터의 crc16
};
}
변수 이름 | 형식 | 크기 | 범위 | 설명 |
---|---|---|---|---|
systemTime | uint64_t | 8 Byte | - | 시스템 시간 |
dataType | Protocol::DataType::Type | 1 Byte | - | 수신 받은 데이터 타입 |
crc16 | uint16_t | 2 Byte | - | 수신 받은 헤더와 데이터의 CRC16 값 |
Protocol::Error
오류
namespace Protocol
{
struct Error
{
};
}
| 변수 이름 | 형식 | 크기 | 범위 | 설명 | |:————-:|:————————————————————-:|:——–:|:—–:|:———————-|
Protocol::Request
데이터 요청
namespace Protocol
{
struct Request
{
u8 dataType; // 요청할 데이터 타입
};
}
변수 이름 | 형식 | 크기 | 범위 | 설명 |
---|---|---|---|---|
dataType | Protocol::DataType::Type | 1 Byte | - | 요청할 데이터 타입 |
Protocol::Information
펌웨어 정보
namespace Protocol
{
struct Information
{
u8 modeUpdate; // 업데이트 모드
u32 modelNumber; // 모델 번호
u32 version; // 현재 펌웨어의 버전
u16 year; // 빌드 년
u8 month; // 빌드 월
u8 day; // 빌드 일
};
}
변수 이름 | 형식 | 크기 | 범위 | 설명 |
---|---|---|---|---|
modeUpdate | Mode::Update::Type | 1 Byte | - | 업데이트 모드 |
modelNumber | ModelNumber::Type | 4 Byte | - | 모델 번호 |
version | Protocol::Version | 4 Byte | - | 펌웨어의 버전 |
year | uint16_t | 2 Byte | - | 펌웨어 빌드 년 |
month | uint8_t | 1 Byte | - | 펌웨어 빌드 월 |
day | uint8_t | 1 Byte | - | 펌웨어 빌드 일 |
Protocol::Version
펌웨어 버전
버전 비교 시 v 값으로 비교할 수 있도록 struct 내부의 변수 배치 순서를 다른 구조체들과 다르게 역순으로 배열하였습니다.
namespace Protocol
{
union Version
{
struct
{
u16 build; // Build Number
u8 minor; // Minor Number
u8 major; // Major Number
};
u32 v;
};
}
변수 이름 | 형식 | 크기 | 범위 | 설명 |
---|---|---|---|---|
build | uint16_t | 14 bit | 0 ~ 65535 | 빌드 번호 |
minor | uint8_t | 1 Byte | 0 ~ 255 | 부 번호 |
major | uint8_t | 1 Byte | 0 ~ 255 | 주 번호 |
v | uint32_t | 4 Byte | - | build, minor, major를 하나로 묶은 것 |
Control::Quad8
드론
namespace Control
{
struct Quad8
{
s8 roll; // roll
s8 pitch; // pitch
s8 yaw; // yaw
s8 throttle; // throttle
};
}
변수 이름 | 형식 | 크기 | 범위 | 설명 | 음수 값(-) | 양수 값(+) |
---|---|---|---|---|---|---|
roll | int8_t | 1 Byte | -100 ~ 100 | 좌우 | 좌측 | 우측 |
pitch | int8_t | 1 Byte | -100 ~ 100 | 전후 | 후방 | 전방 |
yaw | int8_t | 1 Byte | -100 ~ 100 | 좌우 회전 | 시계 방향 | 반시계 방향 |
throttle | int8_t | 1 Byte | -100 ~ 100 | 승하강 | 하강 | 상승 |
Control::Quad8AndRequestData
드론 조종 및 데이터 요청
조종 명령 시 응답 데이터로 Ack 대신 요청한 데이터를 응답으로 보내게 함.
namespace Control
{
struct Quad8AndRequestData
{
s8 roll; // roll
s8 pitch; // pitch
s8 yaw; // yaw
s8 throttle; // throttle
u8 dataType; // DataType
};
}
변수 이름 | 형식 | 크기 | 범위 | 설명 | 음수 값(-) | 양수 값(+) |
---|---|---|---|---|---|---|
roll | int8_t | 1 Byte | -100 ~ 100 | 좌우 | 좌측 | 우측 |
pitch | int8_t | 1 Byte | -100 ~ 100 | 전후 | 후방 | 전방 |
yaw | int8_t | 1 Byte | -100 ~ 100 | 좌우 회전 | 시계 방향 | 반시계 방향 |
throttle | int8_t | 1 Byte | -100 ~ 100 | 승하강 | 하강 | 상승 |
dataType | Protocol::DataType::Type | - | 1 Byte | 요청할 데이터 타입 | - | - |
Control::Position
드론 이동 명령
드론에 이동 명령을 내리는 경우 사용
namespace Control
{
struct Position
{
float positionX; // meter
float positionY; // meter
float positionZ; // meter
float velocity; // m/s
s16 heading; // degree
s16 rotationalVelocity; // deg/s
};
}
변수 이름 | 형식 | 크기 | 범위 | 단위 | 설명 |
---|---|---|---|---|---|
positionX | float | 4 Byte | -10.0 ~ 10.0 | meter | 앞(+), 뒤(-) |
positionY | float | 4 Byte | -10.0 ~ 10.0 | meter | 좌(+), 우(-) |
positionZ | float | 4 Byte | -10.0 ~ 10.0 | meter | 위(+), 아래(-) |
velocity | float | 4 Byte | 0.0 ~ 5.0 | m/s | 앞뒤 이동 속도 |
heading | int16_t | 2 Byte | -360 ~ 360 | degree | 반시계방향(+), 시계방향(-) |
rotationalVelocity | int16_t | 2 Byte | 10 ~ 180 | degree/s | 좌우 회전 속도 |
Protocol::Command::Command
설정 변경
namespace Protocol
{
namespace Command
{
struct Command
{
u8 commandType; // 명령 타입
u8 option; // 명령에 대한 옵션
};
}
}
변수 이름 | 형식 | 크기 | 범위 | 설명 |
---|---|---|---|---|
commandType | Protocol::CommandType::Type | 1 Byte | - | 명령 타입 |
option | Mode::Control::Flight::Type | 1 Byte | - | 옵션 |
Escape::Type | - | |||
System::FlightEvent::Type | - | |||
System::Trim::Type | - | |||
Mode::Controller::Type | - | |||
uint8_t | - |
Protocol::ResponseRate
RF 송수신 응답률 (조종기에서만 받을수 있음)
namespace Protocol
{
struct ResponseRate
{
u8 responseRate;
};
}
변수 이름 | 형식 | 크기 | 범위 | 설명 |
---|---|---|---|---|
responseRate | uint8_t | 1 Byte | 0 ~ 100 | 송수신 응답률 |
Protocol::RawMotion
Motion 센서 RAW 데이터
namespace Protocol
{
struct RawMotion
{
s16 accX;
s16 accY;
s16 accZ;
s16 gyroRoll;
s16 gyroPitch;
s16 gyroYaw;
};
}
변수 이름 | 형식 | 크기 | 범위 | 설명 |
---|---|---|---|---|
accelX | Int16 | 2 Byte | -32,768 ~ 32,767 | 가속도 X |
accelY | Int16 | 2 Byte | -32,768 ~ 32,767 | 가속도 Y |
accelZ | Int16 | 2 Byte | -32,768 ~ 32,767 | 가속도 Z |
gyroRoll | Int16 | 2 Byte | -32,768 ~ 32,767 | 자이로 Roll |
gyroPitch | Int16 | 2 Byte | -32,768 ~ 32,767 | 자이로 Pitch |
gyroYaw | Int16 | 2 Byte | -32,768 ~ 32,767 | 자이로 Yaw |
Protocol::State
드론의 현재 상태
namespace Protocol
{
struct State
{
u8 modeSystem; // 시스템 모드
u8 modeFlight; // 비행 모드
u8 modeControlFlight; // 비행 제어 모드
u8 modeMovement; // 이동 상태
u8 Escape; // Escape 모드
u8 controlSpeed; // 제어 속도
u8 sensorOrientation; // 센서 방향
u8 battery; // 배터리량(0 ~ 100%)
};
}
변수 이름 | 형식 | 크기 | 범위 | 설명 |
---|---|---|---|---|
modeSystem | Mode::System::Type | 1 Byte | - | System 동작 모드 |
modeFlight | Mode::Flight::Type | 1 Byte | - | 비행 제어기 동작 모드 |
modeControlFlight | Mode::Control::Flight::Type | 1 Byte | - | 비행 제어 모드 |
modeMovement | Mode::Movement::Type | 1 Byte | - | 이동 상태 |
escape | Escape::Type | 1 Byte | - | escape 설정 상태 |
controlSpeed | uint8_t | 1 Byte | - | 제어 속도(1, 2, 3) |
sensorOrientation | SensorOrientation::Type | 1 Byte | - | 센서 방향 |
battery | uint8_t | 1 Byte | 0 ~ 100 | 드론 배터리 잔량 |
Protocol::StateController
조종기의 현재 상태
namespace Protocol
{
struct StateController
{
u8 modeSystem; // 시스템 동작 모드
u8 modeController; // 조종기 동작 모드
u8 modeConnection; // 연결 모드
u8 deviceType; // 현재 장치의 타입
s8 responseRate; // 송수신 응답률
u32 systemTime; // 시스템 시간(ms)
u32 timeConnected; // 연결된 이후부터의 시간(ms)
u32 timeLostConnection; // 연결이 끊어지고 나서의 시간(ms)
u8 countCycleTransferRF; // 1초당 전송 횟수 RF
u8 countCycleReceiveRF; // 1초당 수신 횟수 RF
u8 countCycleTransferExternal; // 1초당 전송 횟수 External
u8 countCycleReceiveExternal; // 1초당 수신 횟수 External
u8 countCycleTransferUSB; // 1초당 전송 횟수 USB
u8 countCycleReceiveUSB; // 1초당 수신 횟수 USB
};
}
변수 이름 | 형식 | 크기 | 범위 | 설명 |
---|---|---|---|---|
modeSystem | Mode::System::Type | 1 Byte | - | System 동작 모드 |
modeController | Mode::Controller::Type | 1 Byte | - | 조종기 동작 모드 |
modeConnection | Mode::Connection::Type | 1 Byte | - | 연결 모드 |
deviceType | Protocol::DeviceType::Type | 1 Byte | - | 장치 타입 |
responseRate | int8_t | 1 Byte | - | 송수신 응답률 |
systemTime | uint32_t | 4 Byte | - | 시스템 시간(ms) |
timeConnected | uint32_t | 4 Byte | - | 연결된 이후부터의 시간(ms) |
timeLostConnection | uint32_t | 4 Byte | 0 ~ 100 | 연결이 끊어지고 나서의 시간(ms) |
countCycleTransferRF | uint8_t | 1 Byte | 0 ~ 255 | 1초당 전송 횟수 RF |
countCycleReceiveRF | uint8_t | 1 Byte | 0 ~ 255 | 1초당 수신 횟수 RF |
countCycleTransferExternal | uint8_t | 1 Byte | 0 ~ 255 | 1초당 전송 횟수 External |
countCycleReceiveExternal | uint8_t | 1 Byte | 0 ~ 255 | 1초당 수신 횟수 External |
countCycleTransferUSB | uint8_t | 1 Byte | 0 ~ 255 | 1초당 전송 횟수 USB |
countCycleReceiveUSB | uint8_t | 1 Byte | 0 ~ 255 | 1초당 수신 횟수 USB |
Protocol::Altitude
고도
namespace Protocol
{
struct Altitude
{
f32 temperature;
f32 pressure;
f32 altitude;
f32 rangeHeight;
};
}
변수 이름 | 형식 | 크기 | 범위 | 설명 |
---|---|---|---|---|
temperature | float | 4 Byte | - | 온도 |
pressure | float | 4 Byte | - | 압력 |
altitude | float | 4 Byte | - | 고도 |
rangeHeight | float | 4 Byte | - | 거리 센서의 높이 |
Protocol::Motion
Motion 센서 데이터와 드론의 자세
namespace Protocol
{
struct Motion
{
s16 accX;
s16 accY;
s16 accZ;
s16 gyroRoll;
s16 gyroPitch;
s16 gyroYaw;
s16 angleRoll;
s16 anglePitch;
s16 angleYaw;
};
}
변수 이름 | 형식 | 크기 | 범위 | 단위 | 설명 |
---|---|---|---|---|---|
accelX | int16_t | 2 Byte | -1,568 ~ 1,568 (-156.8 ~ 156.8) |
m/s2 x 10 | 가속도 X |
accelY | int16_t | 2 Byte | -1,568 ~ 1,568 (-156.8 ~ 156.8) |
m/s2 x 10 | 가속도 Y |
accelZ | int16_t | 2 Byte | -1,568 ~ 1,568 (-156.8 ~ 156.8) |
m/s2 x 10 | 가속도 Z |
gyroRoll | int16_t | 2 Byte | -2,000 ~ 2,000 | degree/s | 자이로 Roll |
gyroPitch | int16_t | 2 Byte | -2,000 ~ 2,000 | degree/s | 자이로 Pitch |
gyroYaw | int16_t | 2 Byte | -2,000 ~ 2,000 | degree/s | 자이로 Yaw |
angleRoll | int16_t | 2 Byte | -180 ~ 180 | degree | 자세 Roll |
anglePitch | int16_t | 2 Byte | -180 ~ 180 | degree | 자세 Pitch |
angleYaw | int16_t | 2 Byte | -180 ~ 180 | degree | 자세 Yaw |
Protocol::VisionSensor
위치
namespace Protocol
{
struct VisionSensor
{
float x; // meter
float y; // meter
float z; // meter
};
}
변수 이름 | 형식 | 크기 | 범위 | 단위 | 설명 |
---|---|---|---|---|---|
x | float | 4 Byte | -100.0 ~ 100.0 | meter | 앞(+), 뒤(-) |
y | float | 4 Byte | -100.0 ~ 100.0 | meter | 좌(+), 우(-) |
z | float | 4 Byte | 0 ~ 4.0 | meter | 거리 센서의 값 |
Protocol::Count
카운트
비행 시간 및 관련 카운트 값을 읽을 때 사용합니다.
namespace Protocol
{
struct Count
{
u32 timeSystem; // 시스템 동작 시간
u32 timeFlight; // 비행 시간
u16 countTakeOff; // 이륙 횟수
u16 countLanding; // 착륙 횟수
u16 countAccident; // 충돌 횟수
};
}
변수 이름 | 형식 | 크기 | 범위 | 설명 |
---|---|---|---|---|
timeSystem | uint32_t | 4 Byte | - | 시스템 동작 시간(sec) |
timeFlight | uint32_t | 4 Byte | - | 비행 시간(sec) |
countTakeOff | uint16_t | 2 Byte | 0 ~ 65,535 | 이륙 횟수 |
countLanding | uint16_t | 2 Byte | 0 ~ 65,535 | 착륙 횟수 |
countAccident | uint16_t | 2 Byte | 0 ~ 65,535 | 충돌 횟수 |
Protocol::Trim
Trim
namespace Protocol
{
struct Trim
{
s16 roll; // Roll
s16 pitch; // Pitch
s16 yaw; // Yaw
s16 throttle; // Throttle
};
}
변수 이름 | 형식 | 크기 | 범위 | 설명 |
---|---|---|---|---|
roll | int16_t | 2 Byte | -200 ~ 200 | Roll |
pitch | int16_t | 2 Byte | -200 ~ 200 | Pitch |
yaw | int16_t | 2 Byte | -200 ~ 200 | Yaw |
throttle | int16_t | 2 Byte | -200 ~ 200 | Throttle |
Protocol::Buzzer
버저
namespace Protocol
{
struct Buzzer
{
u8 mode; // 버저 작동 모드
u16 value; // Scale 또는 hz
u16 time; // 연주 시간(ms)
};
}
변수 이름 | 형식 | 크기 | 범위 | 설명 |
---|---|---|---|---|
mode | Buzzer::Mode::Type | 1 Byte | - | 버저 동작 모드 |
value | Buzzer::Scale::Type | 2 Byte | - | Scale |
uint16_t | 2 Byte | 0 ~ 8,000 | Hz | |
time | uint16_t | 2 Byte | 0 ~ 65,535 | 소리를 지속할 시간(ms) |
Protocol::Joystick
조종기 좌우 조이스틱의 입력 값
namespace Protocol
{
struct Joystick
{
Protocol::JoystickBlock left;
Protocol::JoystickBlock right;
};
}
변수 이름 | 형식 | 크기 | 범위 | 설명 |
---|---|---|---|---|
left | Protocol::JoystickBlock | 4 Byte | - | 왼쪽 조이스틱 |
right | Protocol::JoystickBlock | 4 Byte | - | 오른쪽 조이스틱 |
Protocol::InformationAssembledForController
자주 갱신되는 데이터 모음(조종기)
조종기에 표시되는 데이터의 갱신 속도를 높일 목적으로 여러 데이터를 하나로 합친 구조체
namespace Protocol
{
struct InformationAssembledForController
{
s16 angleRoll; // 자세 Roll
s16 anglePitch; // 자세 Pitch
s16 angleYaw; // 자세 Yaw
u16 rpm; // RPM
s16 positionX; // meter x 10
s16 positionY; // meter x 10
s16 positionZ; // meter x 10
s8 speedX; // meter x 10
s8 speedY; // meter x 10
u8 rangeHeight; // meter x 100
s8 responseRate; // 송수신 응답률
};
}
SKYKICK EVOLUTION
- Intro
- Typedef
- DataType
- Definitions
- Structs
- Structs - Light