상세 컨텐츠

본문 제목

[드론 만들기] 내장된 응용 프로그램 생성 및 실행하기

만들기/드론

by kwangpil 2021. 11. 21. 23:23

본문

 

이전 글...

 

드론 만들기

  

   하드웨어

      기본부품

         비행 제어기(FC)

            Pixhawk 시리즈

               Pixhawk의 GPS

               Pixhawk의 텔레메트리(Telemetry)              

               Pixhawk의 변속기(ESC)

                  QGroundControl에서 변속기(ESC) 교정하기

               Pixhawk 4의 Power Management Board              

               Pixhawk 4

                  QGroundControl에서 Pixhawk 4 펌웨어 설치

                  QGroundControl에서 Pixhawk 4 설정하기 1/2

                  QGroundControl에서 Pixhawk 4 설정하기 2/2       

         모터

         배터리

            리튬 폴리머 배터리 팩

         변속기 (ESC)

         프로펠러 (Propeller)

         파워 분배기(PDB, Power Distribution Board)

         조종기(Radio Control)          

 

   소프트웨어

      MissionPlanner와 QGroundControl

      QGroundControl 설치

         QGroundControl 사용방법 1/4

         QGroundControl 사용방법 2/4

         QGroundControl 사용방법 3/4      

         QGroundControl 사용방법 4/4 

         QGroundControl에서 Pixhawk 4 펌웨어 설치

         QGroundControl에서 Pixhawk 4 설정하기 1/2

         QGroundControl에서 Pixhawk 4 설정하기 2/2

         QGroundControl에서 Pixhawk 파라미터 변경하기  

      VMware Workstation Pro 설치하기

         VMware Workstation Player에 Virtaul Machine 만들기

         VMware Workstation Player에 Ubuntu 설치하기

            Ubuntu(우분투) 터미널 명령어

            Ubuntu(우분투) 주요 디렉터리

            Ubuntu(우분투) 기초용어

 

   조립

      모터, 변속기에 커넥터 연결하기

      Power Management Board에 커넥터 연결하기

      변속기(ESC)와 Power Management Board 연결하기

      모터와 변속기(ESC) 연결하기

      QGroundControl에서 변속기(ESC) 교정하기

      GPS, Telemetry Pixhawk 4에 연결하기

  

   통신

      MAVLink

         MAVLink 설치하기

         MAVLink 라이브러리 생성하기

 

   개발

      드론 비행 시뮬레이터(Simulator)         

         툴체인(toolchain) 설치하기

            jMAVSim 사용하기 1/2

            jMAVSim 사용하기 2/2

            Gazebo 사용하기 1/4

            Gazebo 사용하기 2/4

            Gazebo 사용하기 3/4

            Gazebo 사용하기 4/4

      내장된 응용 프로그램 생성 및 실행하기

 

 

   비행

      쿼드콥터(Quadcopter) 비행 원리     

 

   문제해결

      Pixhawk와 Emax ESC(변속기) 호환문제 해결방법

 

   기타

      비행금지구역

      비행 시 주의 사항   

      멀티콥터 종류

      커넥터(connector)

      용어

 


완전 초짜의 드론 만들기 도전! 도전! 도전~!입니다.
맨땅에 헤딩~

인터넷 검색, 관련 사이트를 참고하여 Pixhawk 4(PX4)를 이용한 중/소형 쿼드콥터 드론을 만들려고 하고 있습니다.

참고만 하세요~!

 

※ 아래 내용은 픽스호크 홈페이지 내용을 기반으로 작성한 것으로 틀린 내용을 포함하고 있을 수도 있음.

※ 정확한/상세한 내용은 픽스호크 홈페이지 참조


PX4 소스코드를 설치하면 많은 응용 프로그램이 함께 설치된다.

 

여기서는 이러한 내장된 응용 프로그램(onboard application)을 어떻게 실행하는지 또 어떻게 응용 프로그램을 작성하고 실행하는지에 대해서 설명한다.

 

이를 위해서는 먼저 Simulator(jMAVSim)툴체인(PX4 소스코드 포함)이 설치되어있어야 한다.

 

<Pixhawk 4(출처:https://docs.px4.io)>

 

 

 

1. 내장된 응용 프로그램 실행하기

 

예제 소스 코드 중 하나인 px_simple_app을 SITL(jMAVSim)과 Pixhawk 4에서 어떻게 실행하는지 알아본다.

 

PX4에 내장된 응용 프로그램의 예제 소스 코드는 PX4-Autopilot> src> examples에 설치되어 있다

 

<내장된 응용 프로그램>

 

여기서 실행해 볼 응용 프로그램인 px_simple_app는 "Hello Sky!"를 출력한 후 가속도 센서의 데이터를 수신 및 화면에 출력한 후 종료한다(px4_simple_app의 전체 코드는 여기 참조).

 

 

1.1 jMAVSim에서 응용 프로그램 실행하기

 

우분투 터미널에서 PX4 소스코드 디렉터리로 이동한 후 아래의 명령어로 jMAVSim실행한다.

 

make px4_sitl jmavsim

 

<jMAVSim 실행>

 

실행이 완료되면 아래처럼 응용 프로그램 이름을 그대로 입력하여 응용 프로그램을 실행한다.

 

px4_simple_app

 

<jMAVSim에서 px4_simple_app 실행>

 

앞서 언급한 대로 "Hello Sky!"와 가속도가 출력된 후 응용 프로그램은 닫힌다.

 

 

1.2 Pixhawk 4에서 응용 프로그램 실행하기

 

Pixhawk 4에서 내장된 응용 소프트웨어를 실행하려면 먼저 USB로 Pixhawk 4를 컴퓨터에 연결한 후 NSH(NuttSHell)에 접속해야 한다.

 

NSH 접속은 시스템 콘솔(System Console), QGroundControl(QGC)에서 제공하는 MAVLink Console을 통해서 가능하다.

 

두 방법을 모두 적용해보려고 했지만 Pixhawk 홈페이지에서 설명하는 대로 시스템 콘솔을 설치했지만 제대로 실행이 되지 않았다.

 

여기서는 QGCMAVLink Console을 이용해서 NSH에 접속한다. 따라서 Pixhawk 4에서 응용 프로그램을 실행하려면 QGC가 설치되어 있어야 한다.

(QGroundControl 설치는 여기 참조)

 

QGC가 설치되었으면  USB로 Pixhawk 4를 컴퓨터에 연결한다.

 

<USB로 Pixhawk 4 컴퓨터에 연결>

 

그다음 QGC를 실행한 후 분석 > MAVLink Console을 선택한다.

 

<MAVLink Console>

흰색 바탕의 입력 창에 내장된 응용 프로그램 명인 px4_simple_app입력한 후 엔터 키를 누르면 응용 프로그램이 실행된다.

 

<px4_simple_app 실행결과>

jMAVSim(SITL)에서 실행한 것과 동일하게 "Hello Sky!"와 가속도가 출력된 후 종료된다.

 

 

 

2. 응용 프로그램 생성과 실행하기

 

간단한 응용 프로그램을 작성한 후 SITL(jMAVSim)과 Pixhawk 4에서 어떻게 실행하는지 알아본다.

 

 

2.1 새로운 디렉터리 만들기

 

응용 프로그램을 생성하기 전에 앞서 실행해본 px4_simple_app처럼 example 디렉터리 내에 응용 프로그램저장디렉터리를 만들어야 한다. 

 

디렉터리 이름은 다른 응용 프로그램들처럼 응용 프로그램 이름과 동일하게 하며, 여기는 px4_onboard_app_test로 만들었다.

 

<디렉토리에 새로운 디렉토리 만들기>

 

 

2.2 프로그램 작성

 

생성한 새로운 디렉터리에 응용 프로그램을 작성한다.

 

프로그램은 C/C++로 작성할 수 있으며, 여기서는 앞서 실행해본 px_simple_app 중에서 "Hello Sky!"출력하는 간단한 프로그램을 작성한다. 

 

사용하는 프로그래밍 소프트웨어가 있으면 그 소프트웨어를 사용하고 그렇지 않을 경우 텍스트 편집기에서 아래와 같이 프로그램을 작성한 후 px4_onboard_app_test 디렉터리px4_onboard_app_test.c저장한다.

 

#include <px4_platform_common/log.h>


__EXPORT int px4_onboard_app_test_main(int argc, char *argv[]){

       PX4_INFO("PX4_ONBOARD_APP_test");


      return ok;
}

 

프로그램 작성 시 주의해야 할 점은 main 함수의 이름응용 프로그램 이름_main이어야 하며 위에 작성한 것처럼 __EXPORT를 사용해서 이출(export) 되도록 해야 한다.

 

위에 사용한 PX4_INFO 함수는 PX4 쉘(shell)에서 C 언어printf와 동일한 기능을 갖는 함수로 PX4-Autopilot> Platforms> common> include> px4_platform_common> log.h에 포함되어 있다.

 

 

2.3 cmake 파일 작성하기

 

cmake는 크로스 플랫폼(cross flatform) 빌드 시스템 생성기로 지정한 운영체제에 맞는 makefile을 생성한다.

 

사용하는 프로그래밍 소프트웨어 또는 텍스트 편집기를 열어서 아래와 같이 cmake 파일을 작성한 후  px4_onboard_app_test 디렉터리파일명 CMakeLists.txt저장한다.

 

px4_add_module(
       MODULE example_px4_onboard_app
       MAIN px4_onboard_app
       STACK_MAIN 2000
       SRCS
              px4_onboard_app.c
       DEPENDS
       )

 

px4_add_module( ) 함수는 정적 라이브러리를 생성하며 상세한 함수 정보는 PX4-Autopilot> cmake> px4_add_module.cmake을 참조한다.

 

px4_add_module( ) 함수에서 사용한 용어의 의미는 아래와 같다.

MODULE: 모듈의 고유이름을 말하며 편의상 저장된 디렉터리의 이름에 소스 프로그램의 이름을  밑줄로 이어서 사용.

MAIN: NuttX에 명령어를 등록하는 모듈 진입점 입력함으로써 PX4 쉘 또는 SITL 콘솔에서 호출할 수 있음.

STACK_MAIN: 주 함수(main function)의 stack 크기.

SRC: 소스 파일.

DEPENDS: 모듈이 종속되어 있는 대상(target).

 

 

2.4 default.cmake에 새롭게 만든 응용 프로그램 추가하기

 

새롭게 생성한 응용 프로그램이 컴파일이 될 수 있게 하기 위해서 default.cmake새 응용 프로그램추가해주어야 한다.

 

여기서는 Pixhawk 4jMAVSim을 사용하기 때문에 각각의 default.cmake이 위치하는 디렉터리 주소는 아래와 같다.

 

PX4-Autopilot> boards>px4> fmu-v5>
PX4-Autopilot> boards>px4> sitl>

 

터미널 또는 탐색 창을 통해서 default.cmake 파일을 열고 아래와 같이 EXAMPLE 아래px4_board_app_test추가한 후 저장한다.

 

<default.cmake에 추가하기>

 

*** 참조***

 

오랜만에 pixhawk 홈페이지에 들어가 보니 설정 방법이 변경된 것 같다. 폴더 내용들도 바뀌었고...

변경사항 따라가기 급급해서 드론을 완성하기도 전에 pixhawk4가 녹슬어서 사용하지 못할 것 같다.

 

변경 내용은 아래와 같다.

 

- Kconfig 작성

cmake 파일 작성 완료 후 아래와 같이 작성한 후 Kconfig이라는 파일명으로 저장한다.

(Kconfig란 리눅스 커널(Linux Kernel) 용으로 개발된 선택 기반 설정 시스템(Selection-based configuration system)으로 빌드 타임 옵션(build time option)과 활성화/비활성화하는 특성을 선택하는데 일반적으로 사용한다)

 

bool "px4_onboard_app_test"
default n
---help---
     Enable px4_onboard_app_test

 

사용한 용어의 의미는 아래와 같다.

bool: 메뉴 타입을 지정하는 것

default n: 기본 설정 아님

 

- Kconfig key 추가

디렉터리 PX4-Autopilot> board> px4> fmu-v5와 PX4-Autopilot> boards> px4> sitl에서 default.px4board를 열고 아래와 같이 새로 만든 응용 프로그램을 위한 Kconfig key 추가한다.

 

CONFIG_EXAMPLES_PX4_ONBOARD_APP_TEST=y

 

******

 

 

2.5 jMAVSim에서 응용 프로그램 실행하기

 

터미널에서 PX4 소스코드 디렉터리로 이동한 후 아래의 명령어로 jMAVSim 실행한다.

 

make px4_sitl jmavsim

 

<MAVSim 실행>

실행이 완료되면 아래처럼 생성한 응용 프로그램 이름을 그대로 입력하여 응용 프로그램을 실행한다.

 

px4_onboard_app_test

 

<jMAVSim에서 px4_onboard_app_test 실행>

 

응용 프로그램이 실행되며, 위의 그림처럼 "Hello Sky!"가 출력된 후 종료된다.

 

 

2.6 Pixhawk 4에서 응용 프로그램 실행하기

 

Pixhawk 4에서 응용 프로그램을 실행하려면 변경사항을 Pixhawk 4에 업로드한 후 NSH에 접속해서 응용 프로그램을 실행해야 한다.

 

 

2.6.1 pixhawk 4에 펌웨어 업로드하기

 

변경된 펌웨어를 업로드하기 위해서 먼저 pixhawk 4 컴퓨터 연결한다.

 

그다음 우분투 터미널에서 PX4 소스코드 디렉터리로 이동한 후 아래의 명령어를 입력하여 펌웨어 업로드한다.

 

make px4_fmu-v5_default upload

 

<펌웨어 업로드하기>

상황에 따라 수분이 소요될 수 있으며 업로드가 완료되면 위와 같이 종료된다.

 

 

2.6.2 NSH에 접속 후 응용 프로그램 실행하기

 

QGC를 실행한 후 분석> MAVLink Console으로 이동한다.

 

<MAVLink Console>

 

하단의 흰색 입력 창에 생성한 응용 프로그램 px4_onboard_app_test를 입력한 후 엔터 키를 누르면 응용 프로그램이 실행된다.

 

<px4_onboard_app_test 실행결과>

jMAVSim에서 실행한 것과 동일하게 "Hello, Sky!"가 출력된 후 종료된다.


 

너무 띄엄띄엄 pixhawk 홈페이지를 방문해서 그런지 방문할 때마다 변경사항이 너무... 많다. 

 

관련글 더보기

댓글 영역