<aside> 🧭

노트북을 ELRS 조종기처럼 만들고, War Thunder 마우스 조준 방식으로 비행기를 조종하는 프로그램의 개발 기록. 시간은 한국 시간(KST), 대화 로그와 코드 수정 시각 기준.

</aside>

한눈에 보기

마우스·키보드
 → flight_ui.py (조준 → 정렬 PID → 뱅크/피치 명령, 짐벌 CH7/CH8)
 → crsf_link.py (CRSF 0x16 채널 프레임 50~100Hz, 400000bps)
 → FT232R (신호 반전) → Ranger CRSF 핀 → ELRS 2.4GHz → SuperD → F405 INAV (ANGLE)

F405 텔레메트리 (자세·배터리·GPS·고도·LQ)
 → Ranger → FT232R RX → crsf_link.py 수신 스레드 → HUD·정렬 PID

카메라 → F405 OSD → VTX → VRX → 캡처보드 → flight_ui.py 배경 영상
파일 역할
crsf_test.py 처음 만든 송신 테스트 (고정/사인파 채널, COM 자동 탐색)
crsf_link.py CRSF 인코더 + 송신 스레드 + 텔레메트리 파서(자세·배터리·링크·GPS·바리오·기압)
raw_dump.py 수신 바이트를 그대로 찍는 진단 도구
telemetry_viewer.py 텔레메트리 값과 자세를 눈으로 확인하는 미니 앱
flight_ui.py → FlightUI.exe 메인 UI: 워썬더 HUD, 마우스 조준, 정렬 PID, 짐벌, F2 튜닝
sim/pyflyt_sim.py PyFlyt/PyBullet 가상 기체 + INAV 흉내 제어기 + 자동 튜너
sim/camera_setup.py 시뮬 시작 전 카메라 위치·고정/짐벌 설정 화면
sim/models/biplane/build_biplane.py Fusion 복엽기 → OBJ/URDF 변환

개발 타임라인

9/22 · PC가 조종기가 되다 (CRSF 송신)

9/29 · 서보·모터 구동, FlightUI 첫 버전

10/03 ~ 10/06 · 조종성 튜닝, 파서 버그

10/22 · 영상이 UI에 들어오다, 텔레메트리 성공

10/24 · IMU 정렬과 War Thunder 시점

11/05 · 워썬더 HUD, 시뮬레이터, 정렬 PID

11/06 · exe 재빌드, 실기체 텔레메트리 점검

11/07 · 짐벌 제어, 지연 보상 조준원

🎥 11/07 12:04 실제 짐벌 벤치 테스트 영상

I 모드에서 마우스로 실제 GM3 짐벌을 돌리는 화면. 오른쪽 F2 패널에 짐벌 보정값(끝각·방향·지연·시정수·화각), 아래 LOOK 팬/틸트 표시, 위쪽 깨진 글자는 폰트 업로드 전 INAV OSD

I 모드에서 마우스로 실제 GM3 짐벌을 돌리는 화면. 오른쪽 F2 패널에 짐벌 보정값(끝각·방향·지연·시정수·화각), 아래 LOOK 팬/틸트 표시, 위쪽 깨진 글자는 폰트 업로드 전 INAV OSD

11/13 · 짐벌 보정 다시, VRX 핀 사진, GM3 자세 피드백 조사

11/14 · ESP32-S3 ↔ F405 MSP 연결, 짐벌 팬 오버라이드

주요 버그와 해결

날짜 증상 원인 해결
9/22 송신 몇 초 뒤 링크 끊김 ELRS 핸드셋 baud 후보에 420000 없음 400000 고정
9/29 디버그 덤프 중 바인드 끊김 아무것도 안 보내면 Ranger가 핸드셋을 잃음 중립 프레임 송신 스레드
9/29 마우스를 움직일수록 트림 밀림 Windows 200% DPI 배율 DPI-aware 선언
10/06 텔레메트리 프레임 누락 0xEA 시작 프레임을 버림 주소 목록 추가
10/22 텔레메트리 안 옴 TX 직렬 저항 + FT232R 약한 출력 TX·RX 저항 없이 직결
10/22 RSSI −247dBm 부호 있는/없는 값 혼용 부호 처리 수정
10/24 피치 반대 INAV CRSF는 기수 위 = 음수 부호 반전
10/24 자세 뚝뚝 끊김 자세 10Hz 예측 스무더
10/24 조준이 일정 높이 이상 안 감 ±80° 고도 제한 NED 단위벡터
11/05 시뮬 기체가 뒤집힘 PyFlyt 셋포인트 순서 문서 오류 실측 재매핑
11/05 모델 못 열음 PyBullet 한글 경로 영문 캐시
11/05 정렬 PID 진동 요 미분 잡음 D에 뱅크 기반 선회율
11/05 짐벌 영상이 도는 화면 짐벌 영상을 롤만큼 회전 회전 없이 짐벌 방향에 배치
11/06 exe 튜닝값 저장 안 됨 PyInstaller 임시 폴더 exe 폴더에 저장
11/07 영상 대신 웹캠 캡처 장치 번호 변경 번호 재지정 (이름 탐색 사용 권장)
11/07 짐벌 표시 지연 짐벌 응답 시간 지연 + 1차 지연 모델로 추정해 표시
11/13 짐벌이 마우스 반대로 감 방향값 −1 팬·틸트 +1
11/13 크게 돌리면 +와 실제 물체가 벌어짐 화각 120°·끝각 추정값 녹화 분석: 화각 72°, 끝각 160°
11/14 짐벌 틸트 때 플래퍼론 작동 가능 FLAPERON 모드가 CH7 CH10으로 이동
11/14 짐벌이 뚝뚝 끊기며 따라옴 ELRS 보조 채널 저해상도 Ranger 333Hz Full (예정)
11/14 링크 없을 때 짐벌이 아래로 숙임 CH7 페일세이프 값 CH7 1500 지정 (예정)

설계에서 내린 결정