px4의 Autopilot의 기본깃허브는 아래와 같다.
GitHub - PX4/PX4-Autopilot: PX4 Autopilot Software
위의 코드 구조를 확인하여 우리가 원하는 방식으로 고치려고 한다.
본 코드는 펌웨어를 위한 코드(제어기, 센서관련)과 SITL을 하기 위한 setup과 Tool들이 모두 합쳐져있는 경우이다. 또한, general package이다보니 다양한 보드별 내용이 있어 방대하니 주의가 필요하다.
PX4-Autopilot/
├── src/ 실제 펌웨어 코드
├── msg/ uORB 토픽 메시지 정의
├── boards/ 보드별 빌드 설정
├── platforms/ NuttX, Linux 등 플랫폼 계층
├── ROMFS/ 부팅 스크립트, airframe 설정
├── Tools/ 시뮬레이션, 빌드, 유틸 스크립트
├── cmake/ CMake 빌드 시스템
├── build/ 빌드 결과물 생성 폴더
└── docs/ 문서 관련
로 크게 이루어져있으며, Px4내부에서는 ros topic과 같은 uORB라는 publish-subscribe 메시지를 활용하여 통신을 진행하고 있다.
src/modules/
├── commander/ arming, mode 변경, failsafe 관리
~~├── navigator/ mission, RTL, takeoff 같은 자율비행 관리~~
├── mc_pos_control/ 멀티콥터 위치 제어기
├── mc_att_control/ 멀티콥터 자세 제어기
├── mc_rate_control/ 멀티콥터 각속도 제어기
├── control_allocator/ 힘/토크 명령을 모터/서보 출력으로 분배
~~├── ekf2/ 상태추정기~~
├── mavlink/ QGC/companion computer와 MAVLink 통신
└── logger/ ulog 기록
여기에서, 내가 고칠부분은 src/modules/ 부분으로 아래와 같이 세분화 되어있으며 그 외는 안건드려도 될 것같다.
msg/
├── VehicleAttitude.msg
├── VehicleAngularVelocity.msg
├── VehicleLocalPosition.msg
├── VehicleStatus.msg
├── TrajectorySetpoint.msg
├── ActuatorMotors.msg
└── ...
새 토픽을 추가하려면 msg/에 .msg 파일을 만들고 msg/CMakeLists.txt에 추가하면, 빌드 시 C/C++ 코드가 자동 생성
(진짜 개 많음;;;;)
PX4 내부 모듈 간 통신: uORB
PX4 ↔ QGroundControl: MAVLink
PX4 ↔ ROS 2: DDS / px4_msgs / bridge 계열
PX4 ↔ 실제 하드웨어: drivers