Dataflash log는 픽스호크(또는 APM 2.x)의 내장 dataflash 메모리에 저장되어 있으며, 비행후 다운로드 받을 수 있다. Plane 과 Rover의 경우, dataflash 로그는 시동후 즉시 생성된다. Copter의 경우, 시동을 건 후 생성된다. 이 글은 Dataflash 로그를 설정하고 접근하는 방법에 관한 글이다.
MAVLink를 통한 log 다운로드
이 방법은 AC3.2 이상에서만 사용할 수 있다.
- 기체를 microUSB 케이블을 사용하여 미션플래너와 연결한다.
- 미션플래너에서 Flight Data 화면을 연다.
- 화면 좌측 아래에서 "DataFlash Logs" 탭을 선택하고 "Download DataFalsh Log Via MAVlink" 버튼을 누른다.
그 다음 원하는 로그를 선택한다. 로그는 MissionPlanner/logs 디렉토리 내에 기체의 유형 이름(예: QUADCOPTER)의 폴더 속에 저장된다.
로그의 자동 분석
가장 간단하게 분석하는 방법은 일반적인 문제 영역을 분석하는 기본적인 자동 보고서를 생성하는 것이다. "Log Analysis" 버튼을 누르고, MissionPlanner/logs 디렉토리에 이미 저장된 로그를 선택한다. 로그는 기체의 유형 이름(예: QUADCOPTER 또는 ROVER 등) 안에 들어 있다. 로그를 선택하면 다음과 같은 보고서가 생성된다.
수동 로그 점검
좀 더 자세한 분석을 하려면 "Review a Log"를 선택하고, 이미 MissionPlanner/logs 디렉토리에 저장된 로그를 선택한다. 로그를 선택하면, 아래와 같은 그래프를 볼 수 있다. dataflash의 기본 포맷은 다음과 같다.
- 제일 좌측에 Line Number가 나타난다.
- 소프트웨어 버전과 보드 유형이 윗부분에 표시된다.
- 다음으로 FMT 메시지가 온다. 각각의 메시지 유형에 대한 행의 제목이 표시된다.
- 다음으로 PARM 행이 온다. 각각의 Parameter(EEPROM에 나타나는 순서로)와, 비행 시작시의 값이 표시된다.
- 다음으로 GPS, IMU 등의 비행 데이터 메시지가 온다.
먼저 적절한 행을 선택하면 행의 제목이 적절하게 갱신된다. 다음으로 원하는 열을 찾아 클릭한 뒤, "Graph left" 또는 "Graph right" 버튼을 누르면 그래프로 표시된다. 위의 예에서는 ATT의 Roll-In 과 Roll 데이터를 그린 것이다. 마우스 휠을 사용하면 확대/축소할 수 있다. 그래프에서 면적을 선택하여 확대하거나 축소할 수도 있다. 오른쪽 마우스 버튼을 누르고 "Set Scale to Default"를 누르면 기본 배율로 축소된다. 여기를 보면 간단한 투토리얼을 볼 수 있다.
첫번째 행을 선택하면 그 행(비행 데이터 메시지 유형)을 기준으로 필터링 할 수 있다. 예를 들어 드롭다운 메뉴에서 ATT를 선택하고 "Filter"를 누르면 ATT 메시지 외에는 모두 감춰진다. 이는 미션중 사용된 여러가지 비행모드 ("MODE" 메시지)를 볼때 특히 유용하다. 첫번째 열을 다시 클릭하고 "Cancel"을 누르면 필터가 취소된다.
저정을 원하는 데이터를 설정하기
LOG_BITMASK 파라미터는 dataflash에 어떤 메시지 유형이 저장될지 제어하는 데 사용된다. 최신 버전의 미션 플래너와 ardupilot의 경우, Config/Tuning -> Standard Params 화면에 들어가서 각각의 메시지를 선택할 수 있다.
예전 버전의 경우, 아래와 같이 드롭다운을 사용해 선택할 수 있다.
상세 메시지 (Copter 용)
ATT (자세 Attitude 정보)
DesRoll(RollIn) |
조종자가 원하는 roll 각도 (단위 centi-degree). Roll left 가 음수임 |
Roll |
기체의 실제 roll 각도 (단위 centi-degree). Roll left 가 음수임 |
DesPitch(PitchIn) |
조종자가 원하는 pitch 각도 (단위 centi-degree). Pitch forward 가 음수임 |
Pitch |
기체의 실제 pitch 각도 (단위 centi-degree). Pitch forward 가 음수임 |
DesYaw(YawIn) |
조종자가 원하는 yaw 각도비율 (-4500 ~ 4500. deg/sec 이 아님). 시계방향이 양수임 |
Yaw |
기체의 실제 heading (단위 centi-degrees. 북쪽이 0) |
NavYaw |
원하는 각도 (단위 centi-degrees) |
ATUN (Auto Tune 개요)
|
Axis : 1 = Roll, 1 = Pitch |
TuneStep |
0 = 수평쪽으로 복귀(test 전후) 2 = 이득 갱신 (twitch 완료 및 이득 조정) |
RateMin |
이 테스트 중 최소 기록 속도 |
RateMax |
이 테스트 중 최대 기록 속도 |
RPGain |
테스트중인 Rate P 이득 값 (Rate P gain value being tested) |
RDGain |
테스트중인 Rate D 이득 값 |
SPGain |
테스트중인 Stabilize P 이득 |
ATDE(Auto Tune Step Details)
Angle |
테스트 중인 축에 대한 콥터의 각(단위 centi-degrees) |
Rate |
테스트 중인 축에 대한 콥터의 회전속도 |
CAM(카메라 셔터가 작동된 시간 및 위치)
GPSTime |
epoch 기준 GPS 시간 (단위 milliseconds) |
Lat |
가속도계 + GPS 위도 추정값 |
Lon |
가속도계 + GPS 경도 추정값 |
Alt |
가속도계 + 기압계 추정 고도 (지상 기준 cm) |
Roll |
기체 roll 각도 (centi-degrees) |
Pitch |
기체 pitch 각도 (centi-degrees) |
Yaw |
기체의 방향 (centi-degrees) |
CMD (지상국에서 받은 명령 또는 Mission의 일부로 시행된 명령)
CTot |
미션에 포함된 총 명령수 |
CNum |
이 명령의 미션중 순서 (0 : home, 1 : 첫번쨰 명령 등) |
Cld |
|
Copt |
옵션 parameter (여러가지 다른 목적에 사용됨) |
Prm1 |
이 명령의 parameter(여러가지 다른 목적에 사용됨) |
Alt |
이 명령의 고도(미터) |
Lat |
이 명령의 위도 |
Lon |
이 명령의 경도 |
MAG(COMPASS) (raw compass, offset and compassmot 보정 값)
Field |
설명 |
MagX, MagY, MagZ |
x,y,z 축에 대한 원시 자기장 값 |
OfsX, OfsY, OfsZ |
원시 자기장 offsets (COMPASS_LEARN 이 1로 되어 있을 때만 변경됨) |
MOfsX, MOfsY, MOfsZ |
Compassmot compensation for throttle or current |
CURR(CURRENT) (배터리 전압, 전류, 보드 전압 정보)
Field |
설명 |
Thr |
조종사가 입력한 throttle (1~1000) |
ThrInt |
Throttle 총합 (즉 이 비행중 총 throttle output의 합계) |
Volt |
배터리 전압 (volt *100) |
Curr |
배터리로부터 끌어온 전류 (amp *100) |
Vcc |
보드 전압 |
CurrTot |
배터리로부터 끌어온 전류 총합 |
CTUN (Thrttle 과 Altitude 정보)
Field |
설명 |
ThrIn |
조종사의 throttle. (1~1000) |
SonAlt |
지상기준 고도 (sonar) |
BarAlt |
지상기준 고도 (기압계) |
WPAlt |
AltHold, Loiter, RTL, Auto 모드에서 원하는 고도 |
NavThr |
- |
AngBst |
콥터의 기울기의 결과에 따른 Throttle 증가분(0~1000) (기울이는 동안 고도를 잃지 않도록 모든 조종자 Throttle 및 AutoPilot Throttle에 자동으로 추가됨) |
CRate |
가속도계 + 기압계 climb rate 예측(cm/s) |
ThrOut |
모터에 보내진 최종 Throttle 출력(0~1000). Stabilize 모드에서는 일반적으로 ThrIn + AngBst 와 동일함 |
DCRate |
조종사가 원하는 상승속도 cm/s |
D32, DU32 (single data values. signed 32bit 정수 또는 unsigned 32bit 정수)
Field |
설명 |
id |
변수에 대한 고유번호. 2가지 가능성만 있음 |
|
7 = bit mask of internal state (각각의 비트의 의미는 AP 구조의 정의에 있음) 여기?? |
|
9 = simple mode's initial heading (centi-degrees) |
EKF (Extended Kalman Filter)
Log Information here (Dev Wiki) 개요 here
ERR (에러 메시지)
서브시스템과 에러코드
Error |
설명 |
1: Main |
(사용되지 않음) |
2: Radio |
ECode 1: "Late Frame", APM의 내장 PPM encoder가 최소2초 이상 갱신을 제공하지 않았다는 뜻 |
3: Compass |
ECode 1: 전자나침반 초기화 실패(하드웨어 문제) |
4: Optical Flow |
ECode 1: 초기화 실패(하드웨어 문제) |
5: Throttle Failsafe |
ECode 1: FS_THR_VALUE이하로 내려감. RX/TX간의 통신두절 가능성 ECode 0: 이상의 오류가 해결됨. |
6. Battery Failsafe |
ECode 1: 전압이 LOW_VOLT이하로 떨어짐 또는 총 사용 용량이 BATT_CAPACITY를 초과함 |
7. GPS Failsafe |
ECode 1: 5초이상 GPS 고정이 안됨 |
8. GCS Failsafe |
ECode 1: GCS joystick 갱신이 최소 5초간 없음 |
9. Fence |
ECode 1: 고도 Fence 침범함 ECode 3: 고도 및 Circular Fence 모두 침범함 ECode 0: 기체가 Fence 내로 돌아옴 |
10. Flight Mode |
ECode 0~17 : 기체가 원하는 비행모드로 진입할 수 없음 0=Stabilize, 1=Acro, 2=AltHold, 3=Guided, 4=Guided, 5=Loiter, 6=RTL, 7=Circle, 8=Position, 9=Land, 10=OF_Loiter, 11=Drift, 13=Sport, 14=Flip, 15=AutoTune, 16=PosHold, 17=Brake |
11. GPS |
ECode 2: GPS 고장 ECode 0 : GPS 고장 해소 |
12. Crash Check |
ECode 1: 충돌 감지됨 |
EV: (event 번호)
이벤트 번호 전체는 defines.h에 있음. 아래는 일반적인 이벤트임
Event No |
설명 |
10 |
시동걸림 |
11 |
시동 해제 |
15 |
Auto Armed (조종사가 throttle을 0이상으로 올렸고, autopilot이 throttle의 제어를 가질 자유가 있음? |
16 |
이륙 |
18 |
Land Complete |
25 |
Set Home (Home 위치 좌표를 획득함) |
GPS
Field |
설명 |
Status |
0: no GPS, 1 = GPS but no fix, 2= GPS with 2D fix, 3= GPS with 3D fix |
Time |
epoph 기준 GPS 시간 (milliseconds) |
NSats |
현재 사용중인 GPS의 수 |
HDop |
GPS 정확도 측정 (1.5이하이면 좋음. 2.0 이상이면 좋지 않음) |
Lat |
GPS에 따른 위도 |
Lng |
GPS에 따른 경도 |
RelAlt |
가속도계+기압계 고도 (meter) |
Alt |
GPS에 따른 고도 (비행콘트롤러에서 사용하지 않음) |
SPD |
수평 지상 속도 (m/s) |
GCrs |
지상 방향 (0=북쪽) |
IMU (가속도계 + 자이로 정보)
Field |
설명 |
GyrX, GyrY, GyrZ |
원시 자이로 회전률 (degrees/sec) |
AccX, AccY, AccZ |
원시 가속도계 값 (m/s/s) |
Mode (비행모드)
Field |
설명 |
Mode |
비행모드 (string으로 표시됨. 예: STABILIZE, LOITER 등) |
ThrCrs |
Throttle cruise(0~1000) 안정적인 호버링에 필요한 Throttle 값에 대한 autopilot의 최적 추정치 |
NTUN (항법 정보)
Field |
설명 |
WPDst |
다음 지점까지 거리(또는 loiter target) 단위 cm. Loiter/RTL/AUTO모드에서만 갱신됨 |
WPBrg |
다음 지점에 대한 방위각 (degrees) |
PErX |
콥터와 다음지점간의 중간 목표지 거리 (위도 방향) |
PErY |
콥터와 다음지점간의 중간 목표지 거리 (경도 방향) |
DVelX |
위도 방향의 원하는 속도 cm/s |
DVelY |
경도 방향의 원하는 속도 cm/s |
VelX |
위도 방향의 실제 가속도계 + GPS 속도 추정치 |
VelY |
경도 방향의 실제 가속도계 + GPS 속도 추정치 |
DAcX |
위도 방향의 원하는 가속도 cm/s/s |
DAcY |
경도 방향의 원하는 가속도 cm/s/s |
DRol |
원하는 roll 각도 centi-degrees |
DPit |
원하는 pitch 각도 centi-degrees |
PM (성능 모니터링)
Field |
설명 |
RenCnt |
DCM renormalization count - 숫자가 높으면 DCM에서 문제가 있을 수 있는 가능성 (아주 희박함) |
RenBlw |
DCM renormalization blow-up count - 마지막 PM으로부터 DCM가 DCM 매트릭스를 완전히 재구성한 횟수. 대부분 무해하지만, 숫자가 계속 증가하면 DCM이 고도를 계산하는데 문제가 있을 수 있음(아주 희박함) |
FixCnt |
마지막 PM 수신 이후 GPS 고정이 수신된 숫자 (이게 의미가 있나?) |
NLon |
오래 수행된 main loop의 수 (즉, 원래인 10ms 보다 5% 이상 오래 수행된 루프) |
NLoop |
마지막 PM 메시지 표시 이후 총 loop의 수. 천천히 수행된 루프의 비율을 계산하는데 사용될 수 있음. (15% 이상이 되어서는 안됨) 참고로 이 값은 autopilot의 clock speed에 따라 달라짐 |
MaxT |
마지막 PM 메시지 이후 최대 loop 시간. 10,000 에 근접해야 하지만, 모터가 시동되는 경우 6백만까지 올라갈 수 있음 |
PMT |
GCS에서 heartbeat가 수신될 때마다 증가하는 숫자 |
I2CErr |
마지막 PM 메시지 이후 I2C 오류의 수. I2C 오류는 I2C 버스에서의 문제를 가르키며, 이는 메인 루프의 속도를 떨어뜨려 성능문제를 초래함 |
RCOUT (각 RC 출력에 대한 PWM 출력)
RC1, RC2 등 : 비행콘트롤러에서 esc/모터/RC 출력으로 보내진 PWM 명령
KMZ 파일 보기
dataflash 로그를 다운로드받으면 자동적으로 KMZ 파일이 생성된다. 이 파일을 사용하면 구글어스(Google Earth)에서 비행 궤도를 볼 수 있다. 자세한 내용은 텔레메트리 로그 페이지를 참고하라.
비디오 투토리얼
===
원문 : http://ardupilot.org/copter/docs/common-downloading-and-analyzing-data-logs-in-mission-planner.html