28.4.2.1. `estimator_status`의 비트마스크(Bitmask) 플래그를 통한 센서 융합 신뢰도(Confidence) 확인

28.4.2.1. estimator_status의 비트마스크(Bitmask) 플래그를 통한 센서 융합 신뢰도(Confidence) 확인

커맨더(Commander) 모듈이 비행 모드의 진입 허가를 내릴 때 가장 신뢰하는 ’센서 건강 진단서’가 있다. 바로 EKF2(Extended Kalman Filter) 모듈이 고주파수로 발행하는 estimator_status.msg uORB 메시지다.

이 메시지 내부에는 드론의 공간 인지 상태를 단 하나의 정수형 변수로 완벽하게 압축해 낸 solution_status_flags라는 비트마스크(Bitmask) 변수가 핵심으로 자리 잡고 있다.

1. 비트마스크(Bitmask) 변수의 효율성 무장

수십 개의 센서 상태를 bool 변수 여러 개로 나열하면 메모리 패딩(Padding)이 발생하고 통신 대역폭이 낭비된다. PX4 EKF2 설계자들은 16비트(또는 32비트) 정수 하나를 선언하고, 각 자리의 비트(Bit) 1개마다 특정 센서의 신뢰도(Confidence) 락(Lock) 상태를 할당하는 비트 필드(Bit Field) 방식을 채택했다.

// estimator_status_flags 열거형 (의사 코드)
const uint16 CS_TILT_ALIGN  = (1 << 0); // 0번 비트: 기체 기울기(Roll/Pitch) 정렬 완료
const uint16 CS_YAW_ALIGN   = (1 << 1); // 1번 비트: 기수 방향(Yaw/Heading) 정렬 완료
const uint16 CS_GPS         = (1 << 2); // 2번 비트: GPS 데이터 융합 중 (위치 신뢰도 확보)
const uint16 CS_OPT_FLOW    = (1 << 3); // 3번 비트: 옵티컬 플로우 데이터 융합 중
const uint16 CS_BARO_HGT    = (1 << 5); // 5번 비트: 기압계 고도 데이터 융합 중
const uint16 CS_EV_POS      = (1 << 8); // 8번 비트: 외부 비전(VIO) 위치 데이터 융합 중

만약 EKF2 필터가 “현재 GPS도 쌩쌩하고 기압계도 정상이며 자세 정렬도 끝났다“라고 판단하면, 해당 비트들을 모두 1로 세팅한 값을 버스에 띄운다.

2. Commander의 비트 연산(Bitwise) 판독 로직

커맨더 심장부의 상태 머신은 이 비트마스크 변수를 받으면, 비트 논리곱(&) 연산을 통해 순식간에 필요한 전제 조건 통과 여부를 검사해 낸다.

예를 들어 조종사가 GPS를 필수로 요구하는 ‘Hold 모드’ 진입을 요청했다면, 커맨더는 다음과 같은 단 한 줄의 초고속 비트 논리 연산으로 진입 가능 여부를 평가한다.

bool is_global_pos_valid = (status.solution_status_flags & CS_GPS) == CS_GPS;

if (mode_request == HOLD && !is_global_pos_valid) {
    // GPS 비트가 0이므로 Hold 모드 진입 거부!
    reject_mode_switch();
}

3. 동적 신뢰도(Dynamic Confidence)의 실시간 반영

이 비트마스크 필드는 단순히 비행 전(Pre-flight)에만 쓰이는 것이 아니다.

드론이 자율 비행(Mission) 도중 GPS 전파가 닿지 않는 거대한 무선 기지국 근처 그늘로 진입했다고 가정해 보자. EKF2 모듈은 GPS 위성 개수가 급감하고 오차율(HDOP)이 치솟는 것을 감지하는 즉시, solution_status_flags에서 2번 비트(CS_GPS)를 0으로 꺼버린다(Drop).

커맨더는 다음 폴링(Polling) 루프(수십 밀리초 이내)에서 GPS 신뢰도 비트가 날아간 것을 즉각 감지하고, 현재 유지 중인 Mission 모드의 전제 조건이 깨졌다고 판단하여 곧바로 GPS가 필요 없는 1단계 아래의 안전 모드(예: Altitude 모드)로 기체의 제어권을 강제 강등(Fallback)시킨다.

이처럼 estimator_status의 비트마스크 아키텍처는 센서 데이터의 품질 저하 현상을 비행 모드 관리자에게 빛의 속도로 전파하는 가장 극단적으로 최적화된 내부 통신망이라 할 수 있다.