이어서 코드값 뒤의 헥사값에 대한 알아낸 분석 결과입니다.
DataType | ||
이름 | 값 | 정보 |
None | 0x00 |
|
Ping | 0x01 | 통신확인(reserve) |
Ack | 0x02 | 데이터 수신에 대한 응답 |
Error | 0x03 | 오류(reserve, 비트 플래그는 추후에 지정) |
Request | 0x04 | 지정한 타입의 데이터 요청 |
Passcode | 0x05 | 새로운 페어링 비밀 번호 |
Control | 0x10 | 조종 |
Command | 0x11 | 명령 |
Command2 | 0x12 | 다중 명령(2가지 설정을 동시에 변경) |
Command3 | 0x13 | 다중 명령(3가지 설정을 동시에 변경) |
LedMode | 0x20 | LED 모드 지정 |
LedMode2 | 0x21 | LED 모드 2개 지정 |
LedModeCommand | 0x22 | LED 모드, 커맨드 |
LedModeCommandIr | 0x23 | LED 모드, 커맨드, IR 데이터 송신 |
LedModeColor | 0x24 | LED 모드 3색 직접 지정 |
LedModeColor2 | 0x25 | LED 모드 3색 직접 지정 2개 |
LedEvent | 0x26 | LED 이벤트 |
LedEvent2 | 0x27 | LED 이벤트 2개 |
LedEventCommand | 0x28 | LED 이벤트, 커맨드 |
LedEventCommandIr | 0x29 | LED 이벤트, 커맨드, IR 데이터 송신 |
LedEventColor | 0x2A | LED 이벤트 3색 직접 지정 |
LedEventColor2 | 0x2B | LED 이벤트 3색 직접 지정 2개 |
LedModeDefaultColor | 0x2C | LED 초기 모드 3색 직접 지정 |
LedModeDefaultColor2 | 0x2D | LED 초기 모드 3색 직접 지정 2개 |
Address | 0x30 | IEEE address |
State | 0x31 | 드론의 상태(비행 모드, 방위기준, 배터리량) |
Attitude | 0x32 | 드론의 자세 |
GyroBias | 0x33 | 자이로 바이어스 값 |
TrimAll | 0x34 | 전체 트림 |
TrimFlight | 0x35 | 비행 트림 |
TrimDrive | 0x36 | 주행 트림 |
IrMessage | 0x40 | IR 데이터 송수신 |
|
|
|
CommandType | ||
None | 0x00 | 이벤트 없음 |
ModePetrone | 0x10 | 페트론 동작 모드 전환 |
Coordinate | 0x20 | 방위 기준 변경 |
Trim | 0x21 | 트림 변경 |
FlightEvent | 0x22 | 비행 이벤트 실행 |
DriveEvent | 0x23 | 주행 이벤트 실행 |
Stop | 0x24 | 정지 |
ResetHeading | 0x50 | 방향을 리셋(앱솔루트 모드 일 때 현재 heading을 0도로 변경) |
ClearGyroBiasAndTrim | 0x51 | 자이로 바이어스와 트림 설정 초기화 |
PairingActivate | 0x80 | 페어링 활성화 |
PairingDeactivate | 0x81 | 페어링 비활성화 |
TerminateConnection | 0x82 | 연결 종료 |
Request | 0x90 | 지정한 타입의 데이터 요청 |
|
|
|
ModePetrone | ||
None | 0x00 |
|
Flight | 0x10 | 비행 모드(가드 포함) |
FlightNoGuard | 0x11 | 비행 모드(가드 없음) |
FlightFPV | 0x12 | 비행 모드(FPV) |
Drive | 0x20 | 주행 모드 |
DriveFPV | 0x21 | 주행 모드(FPV) |
Test | 0x30 | 테스트 모드 |
Coordinate | ||
None | 0x00 |
|
Absolute | 0x01 | 고정 좌표계 |
Relative | 0x02 | 상대 좌표계 |
|
|
|
Trim | ||
None | 0x00 |
|
RollIncrease | 0x01 | Roll 증가 |
RollDecrease | 0x02 | Roll 감소 |
PitchIncrease | 0x03 | Pitch 증가 |
PitchDecrease | 0x04 | Pitch 감소 |
YawIncrease | 0x05 | Yaw 증가 |
YawDecrease | 0x06 | Yaw 감소 |
ThrottleIncrease | 0x07 | Throttle 증가 |
ThrottleDecrease | 0x08 | Throttle 감소 |
|
|
|
FlightEvent | ||
None | 0x00 |
|
TakeOff | 0x01 | 이륙 |
FlipFront | 0x02 | 회전 |
FlipRear | 0x03 | 회전 |
FlipLeft | 0x04 | 회전 |
FlipRight | 0x05 | 회전 |
Stop | 0x06 | 정지 |
Landing | 0x07 | 착륙 |
Reverse | 0x08 | 뒤집기 |
Shot | 0x09 | 미사일을 쏠 때 움직임 |
UnderAttack | 0x0A | 미사일을 맞을 때 움직임 |
Square | 0x0B | 정방향 돌기 |
CircleLeft | 0x0C | 왼쪽으로 회전 |
CircleRight | 0x0D | 오른쪽으로 회전 |
Rotate180 | 0x0E | 180도 회전 |
|
|
|
Request | ||
Address | 0x30 | IEEE address |
State | 0x31 | 드론의 상태(비행 모드, 방위기준, 배터리량) |
Attitude | 0x32 | 드론의 자세(Vector) |
GyroBias | 0x33 | 자이로 바이어스 값(Vector) |
TrimAll | 0x34 | 전체 트림 |
TrimFlight | 0x35 | 비행 트림 |
TrimDrive | 0x36 | 주행 트림 |
|
|
|
LEDMode | ||
None | 0x00 |
|
EyeNone | 0x10 |
|
EyeHold | 0x11 | 지정한 색상을 계속 켬 |
EyeMix | 0x12 | 순차적으로 LED 색 변경 |
EyeFlicker | 0x13 | 깜빡임 |
EyeFlickerDouble | 0x14 | 깜빡임(두 번 깜빡이고 깜빡인 시간만큼 꺼짐) |
EyeDimming | 0x15 | 밝기 제어하여 천천히 깜빡임 |
ArmNone | 0x40 |
|
ArmHold | 0x41 | 지정한 색상을 계속 켬 |
ArmMix | 0x42 | 순차적으로 LED 색 변경 |
ArmFlicker | 0x43 | 깜빡임 |
ArmFlickerDouble | 0x44 | 깜빡임(두 번 깜빡이고 깜빡인 시간만큼 꺼짐) |
ArmDimming | 0x45 | 밝기 제어하여 천천히 깜빡임 |
ArmFlow | 0x46 | 앞에서 뒤로 흐름 |
ArmFlowReverse | 0x47 | 뒤에서 앞으로 흐름 |
Colors(0~141 == 0x00~0x8D) | ||
ModeFlight | ||
None | 0x00 |
|
Ready | 0x01 | 비행 준비 |
TakeOff | 0x02 | 이륙 (Flight로 자동전환) |
Flight | 0x03 | 비행 |
Flip | 0x04 | 회전 |
Stop | 0x05 | 강제 정지 |
Landing | 0x06 | 착륙 |
Reverse | 0x07 | 뒤집기 |
Accident | 0x08 | 사고 (Ready로 자동전환) |
Error | 0x09 | 오류 |
|
|
|
ModeDrive | ||
None | 0x00 |
|
Ready | 0x01 | 준비 |
Start | 0x02 | 출발 |
Drive | 0x03 | 주행Stop, 강제 정지 |
Accident | 0x04 | 사고 (Ready로 자동전환) |
Error | 0x05 | 오류 |
|
|
|
SensorOrientation | ||
None | 0x00 |
|
Normal | 0x01 | 정상 |
ReverseStart | 0x02 | 뒤집히기 시작 |
Reverse | 0x03 | 뒤집힘 |
이 값은 제가 아닌 팀원이 자료조사를 하면서 알아낸 값입니다.
아래 자료도 팀원이 C#에 대한 기본 명령어를 정리해둔 목록입니다. (위 아래 자료 모두 동의하에 포스팅
한 자료입니다.)
※ C# 명령어
* F2 : 파일 이름 변경
* F6 : 컴파일 수행
* Window+R : 실행 창 띄우기
→ cmd를 입력하여 명령 프롬프트 창 출력
※ using System;
* using : C#의 키워드(C#의 규격에 미리 정의되어 있는 특별한 단어) 중 하나
그 다음에 따라오는 System을 사용하겠다는 뜻
* System : 데이터를 다룰 수 있는 기본적인 데이터 처리 클래스를 비롯한 C# 코드가 기본적으로 필요로 하는
클래스 담고 있는 네임스페이스
* 세미콜론(;) : 컴파일러에게 문장의 끝을 알리는 기호
※ 네임 스페이스
→ 성격이나 하는 일이 비슷한 클래스, 구조체, 인터페이스, 델리게이트, 열거 형식 등을 하나의 이름 아래 묶는 일을 수행
namespace 네임스페이스_이름
{
// 클래스, 구조체, 인터페이스 등...
}
* namespace BrainCSharp : BrainCSharp이라는 네임스페이스를 만들고 괄호 { }는 BrainCSharp 네임스페이스에
HelloWorld 클래스를 담는다.
※ class HelloWorld { }
→ HelloWorld라는 이름의 클래스를 만든다.
* class : C#을 구성하는 기본 단위로 데이터와 데이터를 처리하는 기능(메소드)으로 이루어진다.
C#프로그램은 최소한 하나 이상의 클래스로 이루어진다.
※ 주석(Comment)
→ 소스 안에 기록하는 메모로 컴파일할 때 주석을 만나면 무시하고 지나간다.
//은 한줄로 끝나는 주석을 입력할 때 사용하고 /*와 */는 사이를 주석으로 처리한다.
※ static void Main(string[] args) { }
→ 특별한 메소드로 프로그램의 진입점으서 프로그램을 시작하면 실행되고 이 메소드가 종료되면 프로그램도
종료된다.
따라서 모든 프로그램은 반드시 Main이라는 이름을 가진 메소드를 하나 가지고 있어야 한다.
→ Main() 메소드가 static 키워드로 수식되어 있지 않으면 CLR은 진입점을 찾지 못했다는 에러를 남긴다.
* static : 한정자(다른 요소들을 꾸며주는 역할을 하는 성분)로서 메소드나 변수 등을 수식한다.
static 키워드로 수식되는 코드는 프로그램이 처음 구동될 때 메모리에 할당된다.
* void : 메소드의 반환 형식으로 어떤 결과도 돌려주지 않을 것이라는 것을 컴파일러에게 알려주는 기능
* Main : 메소드 이름
string[] args : 매개 변수로 Main() 메소드의 매개 변수는 프로그램을 실행할 때 입력하는 매개변수가 입력.
* { } : 코드 블록으로 메소드의 실행할 세부 코드를 담는다.
※ CLR
→ C#으로 만든 프로그램이 실행되는 환경으로 각 언어로 작성된 프로그램의 실행뿐 아니라 서로 다른 언어로 작성 된 언어 사이의 호환성을 제공하기도 한다.
→ C# 프로그램을 실행해주는 또 다른 프로그램
→ IL 언어로 쓰여진 코드를 CLR이 다시 자신이 설치된 플랫폼에 최적화시켜 컴파일한 후 실행.
→ CLR은 환경 기능 외에 프로그램의 오류가 발생했을 때 처리하도록 도와주는 기능, 언어간의 상속 지원, COM과의
상호 운영성 지원, 자동 메모리 관리 등의 기능을 제공한다.
* 적시 컴파일(JIT 컴파일) : 파일을 실행시키면 CLR이 중간 코드를 읽어 들여 다시 OS가 이해할 수 있는 네이티브 코드로 컴파일한 후 실행시키는 것.
→ 실행에 필요한 코드를 실행할 때마다 실시간으로 컴파일해서 실행한다는 뜻.
* IL(중간 언어) : 서로 다른 언어들이 만나기 위한 지점
* 가비지 컬렉셜 : 자동 메모리 관리로 프로그램에서 더 이상 사용하지 않는 메모리를 쓰레기로 간주하고 수거하는
기능.
또 드론을 제어하기 위해 가장 기초적으로 알아야할
row(기체를 정면에서 봤을때 날개 부분이 시계, 반시계 방향으로 회전하는 각도의 정도),
pitch기체를 수평에서 보았을때 앞으로 기울어지거나, 뒤로기울어지는 정도),
yaw(기체를 중심으로 시계, 반시계 방향으로 변하는 각도),
throttle(기체의 높이)
비행기 모형에서 보면 위와 같은 값들이 row, pitch, yaw라는 것을 확인할 수 있습니다.
또 호버링 상태를 유지하기 위해서는 PID제어, 상보필터에 대한 개념을 알고 있어야 됩니다.
PID제어의 사전적인 의미는
. pid제어
제어 변수와 기준 입력 사이의 오차에 근거하여 계통의 출력이 기준 전압을 유지하도록 하는 피드백 제어의 일종으로, 비례(Proportional) 제어와 비례 적분(Proportional-Integral) 제어, 비례 미분(Proportional-Derivative) 제어를 조합한 것. P 제어(비례)는 기준 신호와 현재 신호 사이의 오차 신호에 적당한 비례 상수 이득을 곱해서 제어 신호를 만든다.
[요약] 기존의 ON, OFF 제어 방식과 달리 비례(P: Proportional), 적분(I: (Proportional) Integral), 미분(D: (Proportional) Derivative)을 조합하여 제어하는 방식
즉, 원하는 값에 도달하기 위한 기초적인 자동 피드백 제어 방법 중 하나입니다. 출력 값과 설정 값과의
오차를 이용하여 제어 값을 계산해내는 방식입니다.
PID 제어
목표로한 물리량을 자연스럽게 수렴시키는 제어 방법으로 자율주행 차량, 로봇, 센서값 보정 등에
필수적인 함수
목표값과 현재값의 차이인 에러값을 줄여주는 방향으로 현재값을 보정하며, 에러값은 PID값으로
변환된 후 현재값을 보정하는 데 사용한다.
P제어
proportinal 비례항
현재 제어값이 오차에 비례하여 제어량을 변화시키는 방법
오차에 따라 출력이 출력을 바꾼다.
장점 : 편차는 점점 줄어든다.
단점 : 오차가 0이 되지 않고 근사값에 가까워지면서 진동도 발생한다.
I제어
integral 적분항
일정한 상태로 유지되는 오차를 없애는 작용
장점 : 오차가 클 경우 적분항에 의해 시간이 지나면 오차의 합이 쌓여 출력은 빠르게 변해 오차를 제거하기 때문에 P제어의 단점을 보완하기에 적합하다.
D제어
differential 미분항
오차 변화율을 계산하고 그 결과를 출력에 더한다.
미분항은 시스템의 진동을 최소화 시키기 위해 오차 변화율을 계산하고 그 값을 출력에 더해준다.
오차의 변화에 따라 미분값도 변화한다.
이 값들의 합으로 보정값을 수렴한다.
PID는 목표하는 위치, 속도, 방향, 온도 등 센서값과 같은 물리량을 기계적으로 자동 제어하는
데 필수적인 알고리즘.
PID 제어는 아날로그량(연속)을 제어하는 것이 기본이나 컴퓨터의 프로그램으로는 연속적인 양을
취급할 수 없다. 그래서 샘플링 방식(이산값)에 적합한 PID 연산 방식을 사용한다.
샘플링 방식
조작량 = Kp x 편차(비례항) + Ki x 편차의 누적값(적분항) + Kd x 전회 편차와의 차(미분항)
상보필터 : 연속적으로 입력 받은 값에 있어서 그 값의 이전 값을 이용하여 보정된 값을 구하는
재귀 필터 중 하나로 서로 보완되는 특징을 가진 센서들을 이용하여 더 정확한 측정 결과를 얻고자
할 때 사용되는 것을 말합니다.
패트론에 있어서 사용되는 각도 공식이 있습니다.
angle = (0.95 * (angle + (dgy_x * 0.001)))+(0.05 * deg);
angle은 출력할 각도, dgy_x는 자이로 값, deg는 각도 값, dge는 가속도 센서를 이용해서 값을 구합니다.
인터넷에서 조사한 자료들은 이외에도 여러가지 있지만 대략적으로 알고있어야 되는 큰 개념들을
설명해보았습니다.
이론적으로도 그렇고 코딩 소스들은 예상보다 많이 않기 때문에 구글에서 여러번 다양한 키워드로 검색해
찾으실 수 있습니다. 조사한 파일들도 여러가지 있지만 혹시모를 저작권에 대해 문제가 생길수도 있으니
따로 올리지는 않도록 하겠습니다.
다음 포스팅에서는 미니드론 자율비행 경진대회 준비과정을 보여드리겠습니다.
'교외활동 > 공모전' 카테고리의 다른 글
C언어 데이터의 정의 (0) | 2018.05.27 |
---|---|
객체 지향 프로그래밍 (C#) (0) | 2018.05.23 |
2017 KEPCO 대학생 서포터즈 (한국전력공사) 피드백 (0) | 2018.05.22 |
바이로봇 패트론 (전기학회 미니드론 자율비행 경진대회) (Byrobot petrone) 후기 및 피드백 (3) (0) | 2018.05.17 |
바이로봇 패트론 (전기학회 미니드론 자율비행 경진대회) (Byrobot petrone) 후기 및 피드백 (0) | 2018.05.12 |