콘텐츠로 건너뛰기
쿼드(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
  • 🐧Linux (Ubuntu) 기초
  • Linux Package 에 대한 이해

Linux Package 에 대한 이해

5 min read

서론

여러분이 해보고 싶은 게임이 생겼다. 어떻게 할 것인가??

당연히 해당 게임을 설치할 수 있는 홈페이지에 가서 파일을 다운로드를 하고 실행할 것이다.

그럼 이때 다운로드한 파일은 어떠한 모양을 하고 있을까?

여러분도 예상했다시피 대부분 왼쪽 그림처럼 압축 파일(.zip)이거나 오른쪽 그림처럼 윈도우 인스톨러(.msi) 파일일 것이다.

압축 파일의 압축을 해제하고 프로그램을 실행하거나 윈도우 인스톨러를 클릭하여 프로그램을 설치하고 실행하는 방식은 우리가 윈도우 운영체제(Windows OS)에 익숙하다면 흔히 접할 수 있는 상황이다.

그럼 리눅스에서 우리가 원하는 프로그램을 설치하고 싶으면 어떤 파일을 다운로드하여야 할까?

리눅스도 윈도우와 크게 다르지 않다.

리눅스도 압축 파일을 다운로드하거나 윈도우 인스톨러처럼 설치를 도와주는 파일을 다운로드한다.

리눅스에서는 이러한 파일들을 통틀어 패키지(Package)라고 부른다.

그러면 리눅스 패키지와 리눅스 패키지를 관리하는 방식에 대해 자세히 알아보자.

리눅스 패키지(Linux Package)

리눅스 패키지(Linux Package)란 리눅스 시스템에서 소프트웨어를 실행하는데 필요한 파일들(실행 파일, 설정 파일, 라이브러리 등)이 담겨 있는 설치 파일 묶음이다.

패키지는 종류는 소스 패키지(Source Package)와 바이너리 패키지(Binary Package)가 있다.

소스 패키지(Source Package) vs 바이너리 패키지(Binary Package)

소스 패키지(Source Package)는 말 그대로 소스 코드가 들어 있는 패키지로 컴파일 과정을 통해 바이너리 파일로 만들어야 실행할 수 있다.

즉, 소스 패키지는 설치할 때 컴파일 작업도 진행되므로 설치 시간이 길고 컴파일 작업 과정에서 오류가 발생할 수 있다.

바이너리 패키지(Binary Package)는 성공적으로 컴파일된 바이너리 파일이 들어있는 패키지이다.

이미 컴파일이 되어 있으니 소스 패키지에 비해 설치 시간도 짧고 오류가 발생할 가능성도 적다.

따라서 리눅스의 기본 설치 패키지들은 대부분 바이너리 패키지이다.

이렇게만 보면 바이너리 패키지가 소스 패키지보다 장점만 많은 거 같은데 왜 소스 패키지도 사용하는 것일까?

소스 패키지를 사용하는 이유

그 이유는 내가 원하는 대로 소프트웨어를 수정해서 사용할 수 있기 때문이다.

리눅스에서는 많은 소프트웨어 패키지가 있으며 대부분 GPL 라이선스가 있는 무료 및 오픈 소스이다.

따라서 원한다면 소프트웨어를 맘대로 수정해서 사용할 수 있는데 그러려면 당연히 소스 패키지를 다운로드하여 소스 코드를 수정하거나 컴파일 옵션을 변경하여 사용해야 한다.

또한, 바이너리 패키지는 중요한 문제가 있다.

바이너리 패키지의 문제점

바이너리 패키지는 이미 컴파일되어 있어서 바로 설치할 수 있다는 장점이 있지만 내 컴퓨터 환경과 바이너리 패키지가 컴파일된 환경이 달라서 문제가 발생할 수 있다.

즉, 내가 설치한 바이너리 패키지를 실행하기 위해서 특정 버전의 라이브러리들이 필요하다면 내가 그 라이브러리들을 가지고 있지 않을 경우 제대로 프로그램을 실행할 수 없다.

이렇게 바이너리 패키지를 제대로 실행하기 위해서는 특정 라이브러리나 다른 패키지가 필요할 수 있는데 이러한 패키지 간의 의존성을 패키지 의존성(Package Dependencies)이라 부른다.

리눅스 패키징 방식(Linux Packaging System)

리눅스 배포판 별로 다양한 패키징 방식이 존재하지만 대표적으로 두 가지 방식이 있다.

  1. Debian 계열(Debain, Ubuntu, Linux Mint 등)에서 사용하는 패키징 방식 : DEB
  2. Red Hat 계열(Red hat, Fedora, CentOS 등)에서 사용하는 패키징 방식 : RPM

DEB 패키지 파일의 확장자는 *. deb이고 RPM 패키지 파일의 확장자는 *rpm이다.

리눅스 패키지 관리 방식(Linux Package Management System)

리눅스에서는 패키지를 관리하기 위해 패키지 관리 도구(Package Management Tool)를 사용한다.

패키지 관리 도구는 저수준 패키지 도구(Low Level Package Tool)와 고수준 패키지 도구(Hight Level Package Tool)로 구성된다.

저수준 패키지 도구(Low Level Package Tool)

저수준 패키지 도구는 패키지 파일을 설치하거나 제거할 때 사용하는 도구이다.

저수준 패키지 도구는 각 패키지의 파일을 설치하고 제거할 수는 있어도 패키지 간의 의존성은 알지 못한다.

Debian 계열에서 사용하는 저수준 패키지 도구는 dpkg이고 Red Hat 계열에서 사용하는 저수준 패키지 도구는 rpm이다.

고수준 패키지 도구(Hight Level Package Tool)

고수준 패키지 도구는 패키지 파일을 설치하고 제거할 뿐만 아니라 다운로드 가능한 패키지들을 검색하고 패키지 의존성(Package Dependencies)을 해결하는 도구이다.

패키지 의존성을 해결한다는 의미는 해당 패키지가 가지고 있는 패키지 간의 의존성을 파악하고 필요하다면 자동으로 설치해준다는 뜻이다.

Debian 계열에서 사용하는 고수준 패키지 도구는 apt-get, apt, aptitude이고 Red Hat 계열에서 사용하는 고수준 패키지 도구는 yum, dnf이다.

※ 각 패키지 도구들의 명령어는 생략하겠다. 자세한 내용은 각 패키지 도구에 맞게 검색해보자.

리눅스 패키지 저장소(Linux Package Repository)

리눅스 패키지 도구를 사용하면 우리가 원하는 소프트웨어를 다운로드할 수 있다.

예를 들어 Debian에서 APT 도구를 사용해서 python3 패키지를 설치한다고 생각해보자

sudo apt install python3

이때 APT는 python3 패키지가 뭔지 어떻게 알고 설치할 수 있는 것일까?

그것은 바로 APT가 인터넷에 있는 특정 주소로부터 필요한 패키지를 가져오기 때문이다.

이렇게 패키지들을 가지고 있는 사이트들을 리눅스 패키지 저장소(Linux Package Repository)라 부른다.

리눅스 패키지 저장소는 패키지에 대한 정보(패키지들의 이름, 버전 번호, 패키지 설명 등)가 포함된 메타 정보(Metadata)를 가지고 있다. 이를 통해 우리는 언제든지 패키지 도구를 이용해 저장소가 가지고 있는 패키지 정보를 확인할 수 있다.

apt list

리눅스는 패키지 저장소 사이트들을 특정 파일에 저장하고 있는데 Debian의 경우 etc/apt/source.list 파일에 저장되어 있다.

source.list 정보

source.list에 적혀있는 정보들은 다음과 같다.

deb http://www.deb-multimedia.org buster main none-free
[deb or deb-src] [repository url] [distribution] [component]

deb or deb-src : 바이너리 패키지 저장소(Binary Package Repositories)와 소스 패키지 저장소(Source Package Repositories) 중 어떤 저장소를 사용하는지를 의미

repository url : 해당 저장소의 주소를 의미

distribution : 릴리즈하는 리눅스 버전 이름을 의미

component : main(표준으로 제공되는 무료 오픈소스 소프트웨어), restricted(공식적으로 지원하는 사유 소프트웨어), universe(커뮤니티에 의해 유지되고 지원되는 오픈소스 소프트웨어), multiverse(공식적으로 지원되지 않는 사유 소프트웨어)를 의미

※ Debian 계열이 아닌 리눅스 패키지 저장소도 비슷한 형태를 하고 있다.


리눅스 패키지 설치 과정

지금까지 이해한 내용을 바탕으로 리눅스 패키지가 어떻게 설치되는지 알아보자.

먼저 리눅스 시스템의 패키지 관리자(Package Manager)는 패키지 저장소(Package Repository)로부터 설치할 수 있는 패키지 정보들을 가진 패키지 메타 정보(Package Metadata)를 로컬 캐시에 저장한다.

패키지 관리자(Package Manager)가 특정 패키지의 설치를 명령하면 로컬 캐시를 참조하여 패키지 정보를 찾고 패키지 저장소(Package Repository)를 통해 패키지를 다운로드한다.

이때 패키지는 패키지 종속성(Package Dependencies)이 있을 수 있다. 패키지 관리자(Package Manager)는 종속성을 처리하고 필요한 패키지들을 자동으로 설치한다.

이 과정을 통해 우린 원하는 패키지들을 쉽게 설치하고 관리할 수 있다.

참고.

패키지 저장소 관리는 오픈소스 기반의 리눅스 시스템을 사용하는데 있어서 매우 중요한 요소 입니다. 패키지 저장소가 깨지게 되면 리눅스 시스템을 다시 설치해야 할 수도 있습니다.

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

당신의 감정은 어떤가요?

  • Happy
  • 보통
  • 슬픈

이 문서 공유 :

  • Facebook
  • X
  • LinkedIn
  • Pinterest

제공 BetterDocs

답글 남기기 응답 취소

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

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

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