반응형
01. 프로젝트 개요
프로젝트명
Moka — Raspberry Pi Zero W용 RC 카 제어 OS
한 줄 요약
SD 카드에서 GPU 펌웨어 체인을 거쳐 자체 Stage 부트로더가 올라가고, 단일 주소 공간 미니멀 OS가 RC 구동·조향·원격 제어를 실시간에 가깝게 수행한다.
배경과 동기
- 상용 RC 전용 MCU 펌웨어 대신, SoC·OS·통신을 한 보드에서 통합해 프로토타입·실험 속도를 높인다.
- 교육·연구 목적뿐 아니라, WiFi/BT, 로깅, OTA(후순위) 같은 확장 통신을 OS 레벨에서 일관되게 다룬다.
- 하드웨어/OS 개발자로서 부트부터 제어 루프까지 스택 전체를 소유한다.
목표 (Goals)
ID목표성공 기준 (초기)
| G1 | Zero W에서 자체 커널 부팅 | UART에 부트 로그, LED/GPIO heartbeat |
| G2 | RC 구동계 제어 | 전진/후진/정지, 조향 PWM 안정 동작 |
| G3 | 원격 입력 | WiFi UDP 또는 UART RC 수신으로 주행 |
| G4 | 안전 | 워치독, 통신 타임아웃 시 모터 차단 |
| G5 | 개발 가능성 | 크로스 빌드 한 번으로 SD 이미지 재생성 |
비목표 (Non-Goals) — v1
- Linux/Raspbian 포팅
- 완전한 POSIX 호환 OS
- Pi 4/5, CM 모듈 지원
- 상용 ASIL/ISO26262 수준 안전 인증
- 비디오 스트리밍·SLAM (후속 로드맵만 언급)
설계 원칙
- 예측 가능한 지연: RC 제어 루프는 고정 주기(예: 100 Hz ~ 1 kHz)로 설계; 일반 목적 스케줄링은 2차.
- 작은 신뢰 경계: 부트로더는 검증·로드만; 드라이버는 커널; 정책(속도 제한 등)은 rc/ 서비스.
- 하드웨어 추상화는 얇게: Zero W 전용으로 시작, 나중에 #ifdef보다 보드 테이블 분리.
- 디버그 우선: 초기부터 UART 로그, GPIO 트레이스, 부트 단계별 LED 패턴.
- 실패 시 안전: 모터 드라이버 enable은 기본 비활성; 소프트웨어 패닉 시 하드웨어 워치독.
용어
용어정의
| GPU firmware | SD의 bootcode.bin / start.elf — VideoCore가 ARM을 깨우는 1차 체인 |
| Stage 0 | GPU가 로드하는 최소 ARM 스텁 (선택: 기존 chain 유지) |
| Stage 1 | Moka 부트로더 — 커널·DTB(선택)·initram 로드, MMU 전 커널 진입 준비 |
| Kernel | MMU, IRQ, 타이머, 드라이버, 스케줄러 |
| RC stack | 입력 디코딩 → 제어기 → PWM/방향 핀 출력 |
| ATB | ARM Trusted Firmware (본 프로젝트 v1 비사용) |
이해관계자와 사용 시나리오
- 개발자(본인): JTAG/UART, 크로스 GDB, Oscilloscope로 PWM 검증
- 운용: 배터리 장착 → 전원 → 3초 내 heartbeat → 스마트폰/조종기로 주행
- 실험: PID 게인, 속도 프로파일, 센서 fusion을 커널 모듈 없이 rc/에서 반복
라이선스·저작 (미정)
저장소 루트 LICENSE 확정 전까지 문서만 GPL/MIT 중 선택 예정. BCM2835 문서·Broadcom 바이너리 사용 시 배포 조건을 별도 docs/legal-notes.md에 정리할 것(후속).
728x90
반응형