콘텐츠로 건너뛰기
쿼드(QUAD) 드론연구소

쿼드(QUAD) 드론연구소

  • 👨‍✈️ 초보 파일럿
  • 🎖️ 개발자
  • 🥇 전문가
  • 💎 다이아몬드
  • 🛠️ Tech-Tip
  • 📝 블로그
  • ⚠️ 저작권
login
쿼드(QUAD) 드론연구소
쿼드(QUAD) 드론연구소

🕰️PX4와 ArduPilot의 개발 배경

4
  • ArduPilot 주요 개발자
  • ArduPilot
  • PX4 주요 개발자
  • PX4

📚드론 개발 라이브러리

10
  • 1.드론 개발자 로드맵(Load-Map)
  • 2.드론 개발 소프트웨어 개요
  • 3.MAVLINK
  • 4.PyMAVLink
  • 5.MavProxy
  • 6.MAVSDK
  • 7.MAVROS
  • 8.PX4 uORB with ROS 2
  • 9.자율주행드론 개발 프로세스
  • 10.학습 로드맵(Road-map)

🧩자율주행드론 시스템 아키텍처

4
  • Smart UAV is Robot!
  • PX4 System 아키텍쳐
  • PX4 Software 아키텍쳐
  • 쿼드(QUAD) 자율주행드론 UAV 시스템 아키텍처

🐧Linux (Ubuntu) 기초

14
  • Ubuntu 22.04 설치 (PC에 직접 설치)
  • Windows 10/11 WSL2 설치
  • Linux 개요
  • 리눅스 쉘 기본 명령어
  • 자주쓰는 명령어 정리 (Ubuntu 사용)
  • 자주 사용하는 터미널 명령어
  • Linux Package 에 대한 이해
  • su와 sudo 명령어 활용법
  • 리눅스 파일 시스템 이해하기
  • 리눅스 권한에 대한 이해
  • 빌드 시스템에 대한 이해
  • Make(Makefile) 사용 가이드
  • CMake 의 이해
  • CMake 사용 가이드

픽스호크(Pixhawk) 기초

29
  • 쿼드(QUAD) 자율주행 드론(UAV) 개발 키트
  • 픽스호크 드론의 기초 개요
  • 드론에 사용되는 물리학
  • 멀티콥터의 동작 원리
  • ArduPilot vs. PX4 선택
  • PX4 시스템 아키텍처
  • 지상국(Ground Control System) 선택
  • Pixhawk 6C 비행 컨트롤러
  • Pixhawk 6X 비행 컨트롤러
  • 드론에서 사용되는 센서간 통신제어 방식
  • Pixhawk 배선
  • Pixhawk 전원 공급
  • GPS/나침반
  • 거리 측정기 (LiDAR)
  • 고도(Altitude) 이해
  • 컴패니언 컴퓨터
  • 오프보드(Offboard) 제어
  • 컴패니언 컴퓨터 GPIO를 이용한 FC 제어
  • ESC(전자속도제어기)
    • ESC (전자속도제어기)
    • BLHeli32 및 BLHeli_S ESC
    • DShot ESC
    • DroneCAN ESC
    • PWM, OneShot 및 OneShot125 ESC
  • 무선제어시스템(Radio)
    • 무선 제어 시스템 (Radio)
    • 조종기/수신기
    • 수신기 RSSI 강도 표시
  • Telemetry 라디오
    • Telemetry 라디오
    • SiK Radio 설정
    • 다중 Point-to-Point 설정

Q250 사용 가이드

17
  • Q250 빠른 시작 가이드
  • QGroundControl 설치
  • Q250 펌웨어 재설치 (선택)
  • Q250 파라메터 설정
  • FS-i6x 조종기와 수신기 설정
  • 비행 모드
  • 전원 설정
  • Actuators (모터) 설정
  • Flight Behavior 설정
  • 텔레메트리 연결
  • GPS 연결
  • 컴패니언컴퓨터 전원 공급장치(UBEC) 사용 가이드
  • LED 컨트롤러 사용 가이드
  • 컴패니언 컴퓨터와 FC의 UART 케이블 연결
  • Optical-Flow & LiDAR 설정
  • 지자계 간섭 문제 해결
  • fake_gps (가상 GPS)

Q500 사용 가이드

10
  • Q500 사용 가이드 개요
  • QGroundControl 설치
  • Q500 펌웨어 설정
  • Q500 파라메터 설정
  • Radiomaster 조종기 설정
  • 수신기의 전파 수신 강도(RSSI) 설정
  • Pixhawk 6X Ethernet 설정
  • 컴패니언 컴퓨터와 FC 연결 설정
  • 시뮬레이터 사용 가이드
  • fake_gps (가상 GPS)

Q650 사용 가이드

9
  • Q650 사용 가이드 개요
  • QGroundControl 설치
  • Q650 펌웨어 설정
  • Q650 파라메터 설정
  • 조종기 설정
  • 수신기의 전파 수신 강도(RSSI) 설정
  • Pixhawk 6X Ethernet 설정
  • 컴패니언 컴퓨터와 FC 연결 설정
  • H-Flow 설정 가이드

첫 비행 및 튜닝

12
  • 첫 비행 및 튜닝 개요
  • 첫 비행 지침
  • 수동비행 지침
  • 임무 비행
  • 지오펜스
  • 안전지점(Rally Points)
  • 비행 모드
  • 지형 추적/유지
  • PID 튜닝
  • 비행 기록 분석
    • 비행 기록 분석
    • Flight Review를 이용한 로그 분석
    • 비행기록 분석 실습

PX4-Toolchain 개발환경 구성

4
  • Windows 10/11 WSL2 설치
  • ROS(1) + PX4 Toolchain 구성
  • Gazebo Classic 시뮬레이터 사용하기
  • ROS2 + PX4 Toolchain 구성

MAVLink-Python 프로그래밍

17
  • MAVLINK 개요
  • Python MAVLink 라이브러리 사용
  • 드론에 연결하기(Connect)
  • MAVLINK 메시지 주고받기
  • 비행 모드 (PX4 멀티콥터)
  • MAV_CMD
  • PX4 ‘OFFBOARD” 와 Ardupilot ‘GUIDED’ 모드 차이
  • PX4 Offboard 모드에서만 유효한 주요 MAV_CMD
  • 드론에 시동걸기(MAV_CMD_COMPONENT_ARM_DISARM)
  • 이륙하기(MAV_CMD_NAV_TAKEOFF)
  • 이동하기(SET_POSITION_TARGET_GLOBAL_INT)
  • 이동하기(SET_POSITION_TARGET_LOCAL_NED)
  • 기수 방향과 속도 변경
  • [별첨]참고 자료
  • MAVLINK 신뢰성 보장
    • MAVLINK 신뢰성 보장
    • MAVLINK 2 메시지 서명
    • [참고]HMAC-SHA256이란?

🛠️Tech-Tip

2
  • MAVLink Router
  • 쿼드(QUAD) 자율주행 드론용 컴패니언컴퓨터 소프트웨어 – Jetson Orin-Nano 용 (Ver.3.1-Ubuntu 22.04)
카테고리 보기
  • Home
  • Docs
  • 🧩자율주행드론 시스템 아키텍처
  • PX4 Software 아키텍쳐

PX4 Software 아키텍쳐

5 min read

PX4는 두 가지 주요 레이어로 구성됩니다. 비행 스택 은 추정 및 비행 제어 시스템이고, 미들웨어 는 모든 유형의 자율 로봇을 지원할 수 있는 일반 로봇 레이어로 내부/외부 통신 및 하드웨어 통합을 제공합니다.

모든 PX4 플랫폼은 단일 코드베이스를 공유합니다(여기에는 보트, 탐사선, 잠수함 등과 같은 다른 로봇 시스템이 포함됩니다). 전체 시스템 설계는 반응적 입니다, 의미하는 것은:

  • 모든 기능은 교환 가능한 구성 요소와 재사용 가능한 구성 요소로 구분됩니다.
  • 통신은 비동기 메시지 전달을 통해 이루어집니다.
  • 시스템은 다양한 작업 부하를 처리할 수 있습니다.

High Level 소프트웨어 아키텍처

아래 다이어그램은 PX4의 빌딩 블록에 대한 자세한 개요를 제공합니다. 다이어그램의 상단 부분에는 미들웨어 블록이 포함되어 있고 하단 부분에는 플라이트 스택의 구성 요소가 표시됩니다.

소스 코드는 자체 포함된 모듈/프로그램으로 분할됩니다( monospace다이어그램에 표시됨). 일반적으로 빌딩 블록은 정확히 하나의 모듈에 해당합니다.

팁

런타임 시 쉘의 top명령으로 어떤 모듈이 실행되는지 확인할 수 있으며, <module_name> start/stop를 통해 각 모듈을 개별적으로 시작/중지할 수 있습니다 . top명령은 NuttX 쉘 에만 적용되지만 다른 명령은 SITL 쉘(pxh>)에서도 사용할 수 있습니다. 각 모듈에 대한 자세한 내용은 모듈 및 명령 참조 를 참조하세요 .

화살표는 모듈 간의 가장 중요한 연결 에 대한 정보 흐름을 보여줍니다 . 실제로는 표시된 것보다 더 많은 연결이 있으며 대부분의 모듈에서 일부 데이터(예: 매개변수용)에 액세스합니다.

모듈은 uORB 라는 게시-구독 메시지 버스를 통해 서로 통신합니다 . 게시-구독 체계를 사용한다는 것은 다음을 의미합니다.

  • 시스템은 반응적입니다. 비동기식이며 새 데이터가 사용 가능해지면 즉시 업데이트됩니다.
  • 모든 작업과 통신이 완전히 병렬화됩니다.
  • 시스템 구성 요소는 스레드로부터 안전한 방식으로 어디에서나 데이터를 사용할 수 있습니다.

메모

이 아키텍처를 사용하면 이러한 블록 하나하나를 런타임 중에도 빠르고 쉽게 교체할 수 있습니다.

플라이트 스택

플라이트 스택은 자율 드론을 위한 안내, 탐색 및 제어 알고리즘의 모음입니다. 여기에는 고정익, 멀티로터 및 VTOL 기체용 컨트롤러와 자세 및 위치 추정기가 포함됩니다.

다음 다이어그램은 플라이트 스택의 빌딩 블록에 대한 개요를 보여줍니다. 여기에는 센서, RC 입력 및 자율 비행 제어(내비게이터)부터 모터 또는 서보 제어(액추에이터)까지 전체 파이프라인이 포함됩니다.

추정기(Estimator)는 하나 이상의 센서 입력을 가져와 결합하고 차량 상태(예: IMU 센서 데이터의 자세)를 계산합니다.

컨트롤러는 설정점과 측정 또는 추정 상태(프로세스 변수)를 입력으로 사용하는 구성 요소입니다. 그 목표는 설정값과 일치하도록 프로세스 변수의 값을 조정하는 것입니다. 출력은 결국 해당 설정점에 도달하기 위한 수정입니다. 예를 들어 위치 컨트롤러는 위치 설정점을 입력으로 사용하고, 프로세스 변수는 현재 추정된 위치이며, 출력은 차량을 원하는 위치로 이동시키는 자세 및 추력 설정점입니다.

믹서는 강제 명령(예: “우회전”)을 받아 이를 개별 모터 명령으로 변환하는 동시에 일부 제한을 초과하지 않도록 합니다. 이 변환은 차량 유형에 따라 다르며 무게 중심을 기준으로 한 모터 배열이나 차량의 회전 관성과 같은 다양한 요인에 따라 달라집니다.

미들웨어

미들웨어 는 주로 내장 센서, 외부 세계(컴패니언 컴퓨터, GCS 등)와의 통신 및 uORB 게시-구독 메시지 버스를 위한 장치 드라이버로 구성됩니다.

또한 미들웨어에는 PX4 비행 코드를 데스크톱 운영 체제에서 실행하고 시뮬레이션된 “세계”에서 컴퓨터 모델링 차량을 제어할 수 있는 시뮬레이션 레이어가 포함되어 있습니다.

Rate 업데이트

모듈은 메시지 업데이트를 기다리기 때문에 일반적으로 드라이버는 모듈 업데이트 속도를 정의합니다. 대부분의 IMU 드라이버는 1kHz에서 데이터를 샘플링하고 이를 통합한 후 250Hz로 게시합니다.

메시지 업데이트 속도는 uorb top를 실행하여 시스템에서 실시간으로 확인할 수 있습니다 .

런타임 환경

PX4는 POSIX-API를 제공하는 다양한 운영 체제(예: Linux, macOS, NuttX 또는 QuRT)에서 실행됩니다. 또한 어떤 형태의 실시간 스케줄링(예: FIFO)도 있어야 합니다.

모듈 간 통신( uORB 사용 )은 공유 메모리를 기반으로 합니다. 전체 PX4 미들웨어는 단일 주소 공간에서 실행됩니다. 즉, 모든 모듈 간에 메모리가 공유됩니다.

메모

시스템은 최소한의 노력으로 별도의 주소 공간에서 각 모듈을 실행할 수 있도록 설계되었습니다.

모듈을 실행하는 방법에는 두 가지가 있습니다.

  • 작업 : 모듈은 자체 스택 및 프로세스 우선순위를 사용하여 자체 작업에서 실행됩니다.
  • 작업 대기열 작업 : 모듈은 공유 작업 대기열에서 실행되며 대기열의 다른 모듈과 동일한 스택 및 작업 대기열 스레드 우선 순위를 공유합니다.
    • 모든 작업은 서로 방해할 수 없으므로 협력적으로 작동해야 합니다.
    • 여러 작업 대기열 작업이 하나의 대기열에서 실행될 수 있으며 대기열이 여러 개 있을 수 있습니다.
    • 작업 대기열 작업은 미래의 고정 시간을 지정하거나 uORB 주제 업데이트 콜백을 통해 예약됩니다.
    작업 대기열에서 모듈을 실행하면 RAM을 덜 사용하고 잠재적으로 작업 전환 횟수가 줄어든다는 장점이 있습니다. 단점은 작업 대기열 작업이 절전 모드 또는 메시지 폴링을 허용하지 않거나 IO 차단(예: 파일 읽기)을 수행할 수 없다는 것입니다. 장기 실행 작업(과중한 계산 수행)은 잠재적으로 별도의 작업 또는 최소한 별도의 작업 대기열에서 실행되어야 합니다.

메모

작업 대기열에서 실행 중인 작업은 top에 표시되지 않습니다(작업 대기열 자체만 볼 수 있음 – 예: wq:lp_default).

work_queue status 은 모든 활성 작업 대기열 항목을 표시하는 데 사용됩니다 .

백그라운드 작업

px4_task_spawn_cmd()

호출(상위) 작업과 독립적으로 실행되는 새 작업(NuttX) 또는 스레드(POSIX – Linux/macOS)를 시작하는 데 사용됩니다.

independent_task = px4_task_spawn_cmd(
    "commander",                    // Process name
    SCHED_DEFAULT,                  // Scheduling type (RR or FIFO)
    SCHED_PRIORITY_DEFAULT + 40,    // Scheduling priority
    3600,                           // Stack size of the new task or thread
    commander_thread_main,          // Task (or thread) main function
    (char * const *)&argv[0]        // Void pointer to pass to the new task
                                    // (here the commandline arguments).
    );

OS별 정보

NuttX

NuttX 비행 제어 보드에서 PX4를 실행하기 위한 기본 RTOS입니다. 오픈 소스(BSD 라이센스)이며 가볍고 효율적이며 매우 안정적입니다.

모듈은 작업으로 실행됩니다. 자체 파일 설명자 목록이 있지만 단일 주소 공간을 공유합니다. 작업은 파일 설명자 목록을 공유하는 하나 이상의 스레드를 시작할 수 있습니다.

각 작업/스레드에는 고정 크기 스택이 있으며 모든 스택에 충분한 여유 공간이 남아 있는지 확인하는 주기적인 작업이 있습니다(스택 색상 기준).

Linux/MacOS

Linux 또는 macOS에서 PX4는 단일 프로세스에서 실행되며 모듈은 자체 스레드에서 실행됩니다(NuttX에서와 같이 작업과 스레드 간에 구별이 없습니다).

업데이트된 날짜 2025년 11월 22일

당신의 감정은 어떤가요?

  • Happy
  • 보통
  • 슬픈

이 문서 공유 :

  • Facebook
  • X
  • LinkedIn
  • Pinterest

제공 BetterDocs

답글 남기기 응답 취소

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

© 2025 쿼드(QUAD) 드론연구소 - Kadence WP의 워드프레스 테마

  • 👨‍✈️ 초보 파일럿
  • 🎖️ 개발자
  • 🥇 전문가
  • 💎 다이아몬드
  • 🛠️ Tech-Tip
  • 📝 블로그
  • ⚠️ 저작권
Korean
English