대상 플랫폼
STRIX FC는 이 기체에서 센서 수집, 항법 추정, 자세·속도·위치·고도 제어, 모터 출력, 무선 통신과 로그 기록을 담당하도록 구성했다.
STRIX Flight Controller
Team 3 Avionics
Graduation Project · Avionics Firmware
STRIX FC는 자체 제작한 flight controller 보드에서 센서 수집, GNSS/INS/Baro 항법 추정, 자세·속도·위치·고도 제어, 모터 PWM 출력, RF 명령/텔레메트리, SD 로그를 하나의 펌웨어로 구성한 프로젝트다.
Overview
완제품 flight controller를 사용하는 대신, MCU 펌웨어에서 비행에 필요한 주요 경로를 직접 구현하고 로그와 지상국으로 검증 가능한 형태로 만드는 것이 목표다.
STRIX FC는 이 기체에서 센서 수집, 항법 추정, 자세·속도·위치·고도 제어, 모터 출력, 무선 통신과 로그 기록을 담당하도록 구성했다.
STM32F405에서 IMU, GNSS, 기압계, RF, SD, 모터 PWM을 초기화하고 FreeRTOS 태스크로 분리해 실행한다.
IMU 기반 예측, GNSS 보정, 기압계 고도 보정, 초기 정지 정렬, GNSS 기준점 확정, 정지 상태 보정을 사용해 NED 기준 위치와 속도를 추정한다.
quaternion 기반 자세 제어, body-rate PD 제어, quad X mixer, 모터 PWM 출력을 연결한다. Hover/PositionHold/AltHold 모드에서는 EKF 상태 기반 외부 루프도 사용한다.
NRF24 텔레메트리, SD 로그, GroundControlSystem 대시보드, 시연 영상을 통해 항법과 제어 상태를 확인한다.
System
펌웨어는 STM32CubeIDE 프로젝트를 기반으로 하며, 주변장치 초기화는 CubeMX 설정과 HAL 드라이버를 사용한다. 비행 관련 기능은 센서 수집, 항법 추정, 제어, 통신, 기록 작업으로 나누어 실행된다.
| 영역 | 구성 | 역할 |
|---|---|---|
| MCU | STM32F405RGTx | 168 MHz Cortex-M4F, FreeRTOS 기반 태스크 실행 |
| IMU | USART2 RX DMA | quaternion, gyro, accel 수집 및 내부 제어 루프 입력 |
| GNSS | USART3 RX circular DMA | 위도/경도/고도, NED 속도, 공분산을 EKF 보정에 사용 |
| Barometer | I2C1 · BMP390L | 상대 고도 측정, bias 보정, Baro-EKF 수직 보정, 고도 유지 조건 판단 |
| RF | SPI1 · NRF24L01+ | 명령 수신, IMU/GNSS/status/EKF 텔레메트리 송신 |
| Motor | TIM1 PWM 4채널 | 쿼드 X 모터 혼합 결과를 ESC PWM으로 출력 |
| Logging | SDIO | 센서, 항법, GNSS/Baro 보정, ZUPT, 위치·고도 제어 진단값을 25 Hz 기준으로 저장 |
센서 상태, RF 상태, 항법 상태, 제어 명령, 모터 출력을 하나의 실행 흐름 안에서 연결한다.
IMU 예측, GNSS 보정, 기압계 수직 보정, 정지 상태 보정, 초기 정렬, 기준점 설정을 단계적으로 수행한다.
자세 목표, 각속도 제어, 속도·위치·고도 기반 보정, 모터 혼합, PWM 출력을 순서대로 연결한다.
Control
제어기는 내부 자세/각속도 루프와 hover 외부 루프로 나뉜다. 실제 PWM 출력 전에는 시동 상태, 비행 모드, 항법 준비 상태, 기압계 준비 상태, 모터 출력 허용 조건을 다시 확인한다.
IMU에서 받은 자세와 각속도 데이터를 기준으로 roll/pitch 목표 각속도를 만든다. yaw는 별도 주기로 목표 각속도를 유지해 자세 제어 흐름에 반영한다.
자이로 값을 필터링한 뒤 각속도 제어를 수행하고, 쿼드 X 모터 혼합으로 4개 모터 명령을 만든다. 출력은 정규화 명령에서 ESC PWM us로 변환된다.
Hover 모드에서 EKF 수평 속도를 읽고 목표 속도 0 m/s 기준의 roll/pitch 목표를 생성한다. 속도 입력과 미분항은 저역통과 필터를 거치고, 가속도와 기울기 명령은 각각 제한한다.
PositionHold는 현재 N/E 위치를 latch한 뒤 위치 오차를 속도 목표로 변환한다. AltHold와 Land는 EKF 고도·수직 속도, 기압계 준비 상태, 자세 한계를 확인한 뒤 PWM 보정량을 계산한다.
RTOS
초기화 태스크가 센서와 모터, RF, SD를 준비한 뒤 주요 실행 작업을 시작한다. IMU와 GNSS는 interrupt/DMA 수신 이벤트에 맞춰 처리하고, 주기 작업은 각 태스크의 실행 주기에 맞춰 반복된다.
IMU 수신마다 자세/각속도 제어 계산과 모터 PWM 출력을 수행한다.
IMU 예측, GNSS 보정, 정지 상태 보정, 항법 상태 전송을 담당한다.
Hover 속도 제어, PositionHold 위치 목표 변환, AltHold/Land 고도 보정을 주기 실행하고 내부 루프에 목표값을 전달한다.
RF 명령 수신을 먼저 처리하고 시스템 상태, GNSS, EKF, IMU 정보를 우선순위대로 전송한다.
USART3 DMA로 받은 GNSS 패킷을 해석하고 위치, 속도, 정확도 상태를 갱신한다.
기압계는 25 Hz로 읽어 bias/상대고도 상태를 갱신하고, SD 기록은 센서, 항법, 제어 상태를 25 Hz 기준으로 저장한다.
Telemetry & GCS
RF 패킷은 32바이트 고정 크기이며, 명령과 텔레메트리를 packet type으로 구분한다. GroundControlSystem은 FC 상태 확인, 명령 송신, 로그 기반 분석을 위한 보조 도구다.
Heartbeat, Arm/Disarm, Hover, AltHold, PositionHold, Land, attitude trim, Emergency Hover/Land/Disarm, MotorTest, base throttle 명령을 수신한다.
IMU 20 Hz, GNSS 2 Hz, system status 5 Hz, EKF state 5 Hz, EKF covariance 2 Hz 기준으로 전송하고 EKF 고도를 RF altitude 값으로 공유한다.
센서 상태, GNSS 정확도, 모터 출력, GNSS/Baro/ZUPT 보정 잔차, 속도·위치·고도 제어 진단값을 SD에 저장해 사후 분석에 사용한다.
Verification
자세 추정, 제어 응답, EKF 대시보드, hovering 영상, GCS 화면을 함께 배치해 어떤 기능을 검증했는지 확인할 수 있게 했다.