Graduation Project · Avionics Firmware

STM32 기반 비행제어기와 항법·제어 소프트웨어

STRIX FC는 자체 제작한 flight controller 보드에서 센서 수집, GNSS/INS/Baro 항법 추정, 자세·속도·위치·고도 제어, 모터 PWM 출력, RF 명령/텔레메트리, SD 로그를 하나의 펌웨어로 구성한 프로젝트다.

STM32F405RGTx FreeRTOS GNSS/INS/Baro EKF RF telemetry SD logging

Overview

프로젝트 목적

완제품 flight controller를 사용하는 대신, MCU 펌웨어에서 비행에 필요한 주요 경로를 직접 구현하고 로그와 지상국으로 검증 가능한 형태로 만드는 것이 목표다.

프로젝트 대상 VTOL 기체
프로젝트 대상 기체.

대상 플랫폼

STRIX FC는 이 기체에서 센서 수집, 항법 추정, 자세·속도·위치·고도 제어, 모터 출력, 무선 통신과 로그 기록을 담당하도록 구성했다.

01

비행제어기 펌웨어

STM32F405에서 IMU, GNSS, 기압계, RF, SD, 모터 PWM을 초기화하고 FreeRTOS 태스크로 분리해 실행한다.

02

항법 상태 추정

IMU 기반 예측, GNSS 보정, 기압계 고도 보정, 초기 정지 정렬, GNSS 기준점 확정, 정지 상태 보정을 사용해 NED 기준 위치와 속도를 추정한다.

03

제어 루프

quaternion 기반 자세 제어, body-rate PD 제어, quad X mixer, 모터 PWM 출력을 연결한다. Hover/PositionHold/AltHold 모드에서는 EKF 상태 기반 외부 루프도 사용한다.

04

검증 도구

NRF24 텔레메트리, SD 로그, GroundControlSystem 대시보드, 시연 영상을 통해 항법과 제어 상태를 확인한다.

현재 검증 초점 자세 제어와 데이터 수집 경로를 기반으로, GNSS/INS/Baro EKF의 수평 속도 안정성, 위치·고도 유지, hover 진입 조건을 점검 중이다.
설명 기준 주요 설명은 현재 펌웨어에서 동작하는 항법, 제어, 통신, 기록 흐름을 기준으로 정리했다.

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 출력 전에는 시동 상태, 비행 모드, 항법 준비 상태, 기압계 준비 상태, 모터 출력 허용 조건을 다시 확인한다.

STRIX 제어기 흐름도
제어 경로: EKF/명령 입력에서 roll·pitch 목표, 각속도 제어, 모터 혼합, 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 보정량을 계산한다.

Indoor attitude control test.
Attitude estimation visualization.

RTOS

FreeRTOS 태스크 설계

초기화 태스크가 센서와 모터, RF, SD를 준비한 뒤 주요 실행 작업을 시작한다. IMU와 GNSS는 interrupt/DMA 수신 이벤트에 맞춰 처리하고, 주기 작업은 각 태스크의 실행 주기에 맞춰 반복된다.

높은 우선순위

자세 제어 태스크

IMU 수신마다 자세/각속도 제어 계산과 모터 PWM 출력을 수행한다.

높은 우선순위

항법 태스크

IMU 예측, GNSS 보정, 정지 상태 보정, 항법 상태 전송을 담당한다.

중간 우선순위

외부 제어 태스크

Hover 속도 제어, PositionHold 위치 목표 변환, AltHold/Land 고도 보정을 주기 실행하고 내부 루프에 목표값을 전달한다.

중간 우선순위

RF 통신 태스크

RF 명령 수신을 먼저 처리하고 시스템 상태, GNSS, EKF, IMU 정보를 우선순위대로 전송한다.

일반 우선순위

GNSS 처리 태스크

USART3 DMA로 받은 GNSS 패킷을 해석하고 위치, 속도, 정확도 상태를 갱신한다.

낮은 우선순위

기압 / 로그 태스크

기압계는 25 Hz로 읽어 bias/상대고도 상태를 갱신하고, SD 기록은 센서, 항법, 제어 상태를 25 Hz 기준으로 저장한다.

Telemetry & GCS

통신, 로그, 지상국

RF 패킷은 32바이트 고정 크기이며, 명령과 텔레메트리를 packet type으로 구분한다. GroundControlSystem은 FC 상태 확인, 명령 송신, 로그 기반 분석을 위한 보조 도구다.

GroundControlSystem dashboard screen
GroundControlSystem 대시보드: attitude, EKF trajectory, GPS, covariance, command 상태 확인.

Command

Heartbeat, Arm/Disarm, Hover, AltHold, PositionHold, Land, attitude trim, Emergency Hover/Land/Disarm, MotorTest, base throttle 명령을 수신한다.

Telemetry

IMU 20 Hz, GNSS 2 Hz, system status 5 Hz, EKF state 5 Hz, EKF covariance 2 Hz 기준으로 전송하고 EKF 고도를 RF altitude 값으로 공유한다.

Logging

센서 상태, GNSS 정확도, 모터 출력, GNSS/Baro/ZUPT 보정 잔차, 속도·위치·고도 제어 진단값을 SD에 저장해 사후 분석에 사용한다.

Verification

검증 자료

자세 추정, 제어 응답, EKF 대시보드, hovering 영상, GCS 화면을 함께 배치해 어떤 기능을 검증했는지 확인할 수 있게 했다.

EKF dashboard playback.
RPY visualization.
Hovering test video.
Final hovering test.

검증 항목

  • IMU 좌표 변환과 자세 추정
  • GNSS 기준점 설정 후 NED 궤적과 EKF 상태 전송
  • GNSS/Baro/ZUPT 보정 게이트와 EKF 수직·수평 속도 안정성
  • 자세 제어 응답, hover 외부 루프, 모터 출력 제한 상태
  • RF 명령 수신, 텔레메트리 전송, SD 로그 기반 진단 상태