# 1. 시스템 공통 라이브러리 및 명령어: src/lib/ 및 src/systemcmds/
각종 센서 모듈과 제어기들이 독립적으로 각개전투를 벌이다 보면, 결국 ’공통으로 필요한 연산’과 ’시스템을 유지보수하는 범용 기능’에 대한 수요가 겹치게 마련이다. 한 치의 플래시 메모리도 아껴야 하는 임베디드 생태계에서, 여기저기 똑같은 코드를 중복해서 짜는 것은 범죄다. 이를 해결하는 전역 보급창고가 바로 src/lib/와 src/systemcmds/ 다.
수학과 물리 엔진의 결정체: src/lib/
src/lib/mathlib/: 비행 제어기라면 숨 쉬듯 해야 하는 삼각함수, 벡터 내적/외적 연산의 집합소다. 특히mathlib내부를 열어보면 단순히 표준math.h를 복사한 것이 아니라, ARM Cortex 코어의 FPU(부동소수점 유닛)를 극한으로 끌어쓰기 위한 어셈블리 레벨의 최적화 흔적이나, 무거운 삼각함수 연산을 근사치(Approximation) 표로 때워 오버헤드를 줄이는 테크닉이 난무한다.src/lib/matrix/: PX4의 자랑인 순수 C++ 템플릿 기반 행렬 라이브러리다. EKF 연산에서 수십×수십 크기의 공분산 행렬을 더하고 곱하고 역행렬을 취할 때, 동적 메모리 할당(malloc)을 쓰면 RTOS가 멈춰버리거나 파편화(Fragmentation)로 시스템이 죽는다. 이 폴더의 라이브러리는 모든 행렬 크기를 컴파일 타임에 정적 메모리(Stack) 공간으로 박아 넣어, 속도와 메모리 무결성 두 마리 토끼를 동시에 잡는 기적을 행한다.src/lib/conversion/: 쿼터니언(Quaternion) \leftrightarrow 오일러(Euler) 변환, GPS 위경도(WGS84) \leftrightarrow 로컬 직교 좌표계(NED) 변환 등 복잡한 우주역학적 좌표계 변환을 전담하는 모듈이다.
시스템 장악과 셸 커맨드: src/systemcmds/
NuttX의 콘솔인 NSH(NuttShell) 나 MAVLink 셸에서 개발자가 자판을 두드릴 때 반응하는 명령어들의 실체가 바로 이곳에 존재한다. 리눅스의 /bin 디렉토리와 같다.
top/: 리눅스의 그top맞다. 현재 드론 CPU에서 어떤 스레드(모듈)가 몇 %의 점유율을 쥐어짜고 있는지 실시간으로 모니터링하는 데몬이다.param/:param show,param set등 명령어를 통해 기체 내 파라미터(EEPROM/FRAM) 값들을 실시간으로 까보고 수정하는 콘솔 툴이다.perf/: 퍼포먼스(Performance) 카운터. 특정 인터럽트나 스레드가 예정된 시간 안에 안착했는지 지연(Latency) 시간을 마이크로초 단위로 추적하는 프로파일링 로직이다. 디버깅의 신들이 가장 애용하는 무기다.reboot/: 기체를 강제로 끄거나 부트로더 모드로 밀어 넣어버리는 파괴적인 시스템 콜을 담당한다.