21.8.1. 실시간 입력 토픽과 상태 천이 설계

21.8.1. 실시간 입력 토픽과 상태 천이 설계

페이로드 모듈을 제어하는 인공지능 명장(FSM, Finite State Machine)의 뇌세포를 스케치해 보자.
우리의 모듈은 무턱대고 밸브를 여는 것이 아니라, 오직 다음과 같은 명확한 ‘상태(State)’ 들을 순서대로 거치도록 설계되어야 한다.

1. 단계 유한 상태 기계 (FSM) 스케치

  1. STATE_IDLE (대기 상태):
  • 초기 부팅 후 기본 상태. 밸브는 굳게 닫혀있다.
  • 천이 조건: 조종사가 스위치를 눌러 ‘자동(Auto/Mission)’ 비행 모드로 진입하고, 기체가 이륙하여 공중에 떠올랐을 때 STATE_ARMED로 넘어간다.
  1. STATE_ARMED (무장 상태):
  • 언제든 투하할 준비가 된 상태. 하지만 아직 목표 지점은 아니다. 밸브는 여전히 닫혀있다.
  • 천이 조건: 기체의 현재 고도(Z축)가 QGC에서 설정한 목표 파라미터(TARGET_ALT) 영역에 도달하면 STATE_DROPPING으로 넘어간다.
  1. STATE_DROPPING (투하 상태):
  • ★ Action: 서보 모터를 최대 각도(예: 2.0ms PWM)로 틀어서 밸브를 활짝 연다. 약이 쏟아지기 시작한다!
  • 타이머 틱이 째깍거리기 시작한다.
  • 천이 조건: QGC에서 설정한 투하 지속 파라미터(DROP_SEC)의 시간(예: 3초)이 모두 흘러가면 STATE_FINISHED로 넘어간다.
  1. STATE_FINISHED (종료 상태):
  • ★ Action: 서보 모터를 다시 원위치(예: 1.0ms PWM)로 돌려 밸브를 꽉 닫는다.
  • 이후 드론이 착륙하여 시동이 완전히 꺼질 때까지 다시는 문을 열지 않도록 이 상태에 영원히 머문다(Lock-out).

이처럼 견고한 FSM 뼈대를 짰다면, 이제 이 뼈대를 움직이게 할 **‘신경망 데이터’**를 uORB에서 끌어올 차례다.

2. 두 개의 핵심 신경망 토픽 (Input Topics)

FSM이 상태를 천이(Transition)하려면 눈과 귀가 필요하다. 이를 위해 PX4 커널에서 가장 핵심적인 두 개의 토픽을 구독(Subscription)해야 한다.

  1. vehicle_status_s (기체 전반 상태):
  • 이 토픽은 드론의 ’정신 상태’를 알려준다. 지금 시동이 걸렸는지(arming_state), 현재 날고 구르는 비행 모드가 수동 조종(Manual)인지, 아니면 GCS가 지시한 미션 경로를 따르는 자동 비행(Mission) 모드인지를 판단할 수 있다.
  1. vehicle_local_position_s (로컬 좌표계 위치):
  • 이 토픽은 EKF 필터가 융합해 낸 ’현재 물리적 위치’를 알려준다. 특히 우리의 파라미터인 ’목표 고도(TARGET_ALT)’와 비교하기 위해 이 구조체 안의 위/아래 Z축 위치 데이터(z)가 절대적으로 필요하다.

그렇다면 FSM 루프 안에서 저 두 구조체를 어떻게 교차 검증해야 드론이 지상이나 엉뚱한 비행 모드에서 약을 쏟아내는 대참사를 막을 수 있을까?
그 이중 삼중의 물리적/소프트웨어적 인터록(Interlock) 설정 로직을 다음 21.8.1.1장에서 코드 레벨로 세밀하게 구축해 보자.