한백전자 AutoFly 컴파일 환경 구축 (기타 팁 : 리모컨, DISARMED)

category 컴퓨터.전자기기 2018.11.05 23:41

안녕하세요. 


최근에 졸업설계 관련으로 드론을 만져보고 있습니다.


아래의 제품을 손대보고 있습니다.


http://www.hanback.co.kr/insiter.php?design_file=1143.php&search_value=&PB_1446318362=1&article_num=186



일단 정확하게 스펙을 파악하고 있지 않습니다만, 메인 컨트롤러는 pixhawk4-v2 로 이루어져 있습니다. 


이번에 학교를 순회하면서 학교 사진을 찍을 목적으로 제작하고 있습니다.



아래의 1번과 2번은 정확하게 사진을 찍지 않아서 글로만 작성되어 있습니다. 차후에 사진을 찍게 되면 첨부드리도록 하겠습니다.





1. 리모컨 페이링 팁


처음에 이 제품을 사용해 보면서 MissionPlanner 와 연결은 잘 되었지만, 리모컨과 연결이 되지 않는 상황이였습니다.


Mission Planner 와 USB 혹은 Telemetry (433MHz RF) 로 연동이 가능합니다. (펌웨어 올릴 시에는 USB 케이블로 연결해야됨)


리모컨 페어링의 경우 아래의 글을 참고하시면 쉽게 가능합니다.


https://m.blog.naver.com/PostView.nhn?blogId=tuscani2001&logNo=220747528593&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F


FLYSKY-IS6 제품과 PixHawk4 와 연결이 되어 있으며 이것이 리모컨 모듈입니다. 이 모듈의 전원을 내리시고 오토플라이 부품중에 제공된 점프선을 통해 작업하시면 됩니다.


점프선으로 쇼트를 내신 다음에 모듈에 전원을 공급하면 LED 가 빨리 깜박이게 됩니다. 


(천천히 깜박임 : 연결이 안됨 / 깜박이지 않음 : 연결됨)


이후 리모컨의 우측 아래의 검은 버튼을 오래 눌러주시면 페어링이 완료됩니다. 





2. DISARMED 팁


MissionPlanner 에서 아무리 해도 ARMED 상태로 되지 않는 경우가 있습니다. 


이 경우에는 일단, 보드 파라미터 중에 ARMED 체크를 모두 해제 하신 다음에 저장을 해 주시고, 리모컨의 왼쪽 조그를 오른쪽 아래로 놓으시면 ARMED 상태가 됩니다.


그 전에 PixHawk 의 스위치를 눌러섯 깜박이는 상태가 아닌, 계속 들어와있는 상태로 안전 모드를 풀어주셔야 정상 작동합니다.


추가적으로 리모컨 PWM 값 보정을 꼭 하시길 바랍니다.





3. 컴파일 환경 구축 (WSL 환경)


일단 윈도우에서는 WSL 을 통하여 작업이 가능합니다.


(미션 플래너가 윈도우만 동작이 되고 있음으로 리눅스 환경을 풀로 구성하는 것은 비추천드립니다.)


스토어에서 우분투 16.04 를 받아주시길 바랍니다. 



WSL 사용 설정은 아래를 참고하시길 바랍니다.


https://blog.djjproject.com/405


아래처럼 에러 메시지가 나온다면, 제어판에서 Linux 하위 시스템을 활성화 하셔야합니다.




재부팅 하시고 다시 시도하시면 잘 되실 껍니다.





4. 소스 받기


계정 설정이 끝나고 root 계정으로 로그인 합니다.


윈도우 디펜더가 파일을 일일이 검사함으로 IO가 떨어질 수 있습니다. 잠시 꺼두시길 바랍니다.



이런식으로 root 로그인을 하면 되겠습니다.


다음으로 패키지를 빨리 받기 위해서 kr 서버로 레포지토리를 수정합니다.


archive.ubuntu.com 만 수정합니다.



다음으로 패키지를 갱신하고 git 을 설치해 줍니다.


root@DESKTOP-O2EBQTQ:/home/djjprojecct# apt-get update && apt-get install git

Get:1 http://kr.archive.ubuntu.com/ubuntu xenial InRelease [247 kB]

Get:2 http://kr.archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]

Get:3 http://kr.archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB]

Get:4 http://security.ubuntu.com/ubuntu xenial-security InRelease [107 kB]

Get:5 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]

Get:6 http://kr.archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1,201 kB]

Get:7 http://kr.archive.ubuntu.com/ubuntu xenial/main Translation-en [568 kB]

Get:8 http://kr.archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [8,344 B]

Get:9 http://kr.archive.ubuntu.com/ubuntu xenial/restricted Translation-en [2,908 B]

Get:10 http://kr.archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [7,532 kB]

Get:11 http://kr.archive.ubuntu.com/ubuntu xenial/universe Translation-en [4,354 kB]

Get:12 http://kr.archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [144 kB]

Get:13 http://kr.archive.ubuntu.com/ubuntu xenial/multiverse Translation-en [106 kB]

Get:14 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [872 kB]

Get:15 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main Translation-en [354 kB]

Get:16 http://kr.archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [7,556 B]

Get:17 http://kr.archive.ubuntu.com/ubuntu xenial-updates/restricted Translation-en [2,272 B]

Get:18 http://kr.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [700 kB]

Get:19 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [573 kB]

Get:20 http://kr.archive.ubuntu.com/ubuntu xenial-updates/universe Translation-en [284 kB]

Get:21 http://kr.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [7,304 B]

Get:22 http://kr.archive.ubuntu.com/ubuntu xenial-backports/main Translation-en [4,456 B]

Get:23 http://kr.archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [7,804 B]

Get:24 http://kr.archive.ubuntu.com/ubuntu xenial-backports/universe Translation-en [4,184 B]

Get:25 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [16.4 kB]

Get:26 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse Translation-en [8,344 B]

Get:27 http://security.ubuntu.com/ubuntu xenial-security/main Translation-en [240 kB]

Get:28 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [397 kB]

Get:29 http://security.ubuntu.com/ubuntu xenial-security/universe Translation-en [153 kB]

Get:30 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [3,460 B]

Get:31 http://security.ubuntu.com/ubuntu xenial-security/multiverse Translation-en [1,744 B]

Fetched 18.2 MB in 10s (1,747 kB/s)

Reading package lists... Done

Reading package lists... Done

Building dependency tree

Reading state information... Done

The following package was automatically installed and is no longer required:

  libfreetype6

Use 'apt autoremove' to remove it.

Suggested packages:

  git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch git-cvs git-mediawiki

  git-svn

The following packages will be upgraded:

  git

1 upgraded, 0 newly installed, 0 to remove and 53 not upgraded.

Need to get 2,714 kB of archives.

After this operation, 4,096 B of additional disk space will be used.

Get:1 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 git amd64 1:2.7.4-0ubuntu1.5 [2,714 kB]

Fetched 2,714 kB in 0s (8,899 kB/s)

(Reading database ... 25666 files and directories currently installed.)

Preparing to unpack .../git_1%3a2.7.4-0ubuntu1.5_amd64.deb ...

Unpacking git (1:2.7.4-0ubuntu1.5) over (1:2.7.4-0ubuntu1.4) ...

Setting up git (1:2.7.4-0ubuntu1.5) ...


다음으로 ardupilot 소스 코드를 원하는 위치에 받습니다.


root@DESKTOP-O2EBQTQ:/mnt/d# mkdir arducopter

root@DESKTOP-O2EBQTQ:/mnt/d# cd arducopter/

root@DESKTOP-O2EBQTQ:/mnt/d/arducopter# ls

root@DESKTOP-O2EBQTQ:/mnt/d/arducopter# git clone https://github.com/ArduPilot/ardupilot.git

Cloning into 'ardupilot'...

remote: Enumerating objects: 61, done.

remote: Counting objects: 100% (61/61), done.

remote: Compressing objects: 100% (40/40), done.

Receiving objects:  15% (35358/235715), 7.10 MiB | 1.74 MiB/s





5. 컴파일 하기


이 내용은 아래의 내용을 참고하고 있습니다.


http://ardupilot.org/dev/docs/building-setup-windows10.html


사전에 필요로 하는 패키지를 설치해 주는 스크립트를 실행합니다. 실행하기 전에 실행권한을 줍니다.


root@DESKTOP-O2EBQTQ:/mnt/d/arducopter# ls

ardupilot

root@DESKTOP-O2EBQTQ:/mnt/d/arducopter# cd ardupilot/

root@DESKTOP-O2EBQTQ:/mnt/d/arducopter/ardupilot# chmod a+x Tools/scripts/install-prereqs-ubuntu.sh

root@DESKTOP-O2EBQTQ:/mnt/d/arducopter/ardupilot# ./Tools/scripts/install-prereqs-ubuntu.sh

---------- ./Tools/scripts/install-prereqs-ubuntu.sh start ----------

+ OPT=/opt

+ BASE_PKGS='build-essential ccache g++ gawk git make wget'

+ PYTHON_PKGS='future lxml pymavlink MAVProxy'

+ PX4_PKGS='python-argparse openocd flex bison libncurses5-dev           autoconf texinfo libftdi-dev zlib1g-dev           zip genromfs python-empy cmake cmake-data'

+ ARM_LINUX_PKGS='g++-arm-linux-gnueabihf pkg-config-arm-linux-gnueabihf'

+ SITL_PKGS='libtool libxml2-dev libxslt1-dev python-dev python-pip python-setuptools python-matplotlib python-serial python-scipy python-opencv python-numpy python-pyparsing xterm'


모든 작업이 잘 진행될때까지 기다리시길 바랍니다.




중간에 환경변수 추가 메시지가 나오면 Y 를 입력해 주시길 바랍니다.



중간에 모듈을 추가적으로 받는 과정이 상기와 같이 있습니다. 정말 오래 걸립니다.


기회가 되신다면 아예 소스를 zip 파일로 묶어서 배포하는 것을 받으시는것을 추천드립니다.



다음으로 환경 변수 설정을 살짝 변경해 줍니다. 아래의 export PATH 부분을 CTRL + K 를 눌러 삭제합니다. 



그리고 컴파일러를 설치해 줍니다. (재설치의 개념입니다. WSL 이라 이렇게 진행이 되는것 같네요)


root@DESKTOP-O2EBQTQ:~# apt-get install gcc-arm-none-eabi

Reading package lists... Done

Building dependency tree

Reading state information... Done

The following additional packages will be installed:

  binutils-arm-none-eabi libnewlib-arm-none-eabi libnewlib-dev libstdc++-arm-none-eabi-newlib

Suggested packages:

  libnewlib-doc

The following NEW packages will be installed:

  binutils-arm-none-eabi gcc-arm-none-eabi libnewlib-arm-none-eabi libnewlib-dev libstdc++-arm-none-eabi-newlib

0 upgraded, 5 newly installed, 0 to remove and 53 not upgraded.

Need to get 65.1 MB of archives.

After this operation, 610 MB of additional disk space will be used.

Do you want to continue? [Y/n]

Get:1 http://kr.archive.ubuntu.com/ubuntu xenial/universe amd64 binutils-arm-none-eabi amd64 2.26-4ubuntu1+8 [2,083 kB]

Get:2 http://kr.archive.ubuntu.com/ubuntu xenial/universe amd64 gcc-arm-none-eabi amd64 15:4.9.3+svn231177-1 [17.3 MB]

Get:3 http://kr.archive.ubuntu.com/ubuntu xenial/universe amd64 libnewlib-dev all 2.2.0+git20150830.5a3d536-1 [105 kB]

Get:4 http://kr.archive.ubuntu.com/ubuntu xenial/universe amd64 libnewlib-arm-none-eabi all 2.2.0+git20150830.5a3d536-1 [14.0 MB]

49% [4 libnewlib-arm-none-eabi 10.4 MB/14.0 MB 75%]


아래의 명령으로 환경변수 설정을 재 적용해 줍니다. 


root@DESKTOP-O2EBQTQ:~# . ~/.profile


소스 경로로 이동하여 waf 파일을 실행하고 인자를 아래와 같이 줍니다.


root@DESKTOP-O2EBQTQ:/mnt/d/arducopter/ardupilot# ./waf configure --board=px4-v2

Setting top to                           : /mnt/d/arducopter/ardupilot

Setting out to                           : /mnt/d/arducopter/ardupilot/build

Autoconfiguration                        : enabled

Setting board to                         : px4-v2

Checking for program 'arm-none-eabi-ar'  : /usr/bin/arm-none-eabi-ar

Using toolchain                          : arm-none-eabi

Checking for 'g++' (C++ compiler)        : /usr/bin/arm-none-eabi-g++

Checking for 'gcc' (C compiler)          : /usr/bin/arm-none-eabi-gcc

Checking for c flags '-MMD'              : yes

Checking for cxx flags '-MMD'            : yes

Checking for HAVE_CMATH_ISFINITE         : no

Checking for HAVE_CMATH_ISINF            : no

Checking for HAVE_CMATH_ISNAN            : no

Checking for NEED_CMATH_ISFINITE_STD_NAMESPACE : no

Checking for NEED_CMATH_ISINF_STD_NAMESPACE    : no

Checking for NEED_CMATH_ISNAN_STD_NAMESPACE    : no

Checking for header endian.h                   : not found

Checking for header byteswap.h                 : not found

Checking for program 'cmake'                   : /usr/bin/cmake

Checking cmake version                         : 3.5.1

Checking for program 'ninja, ninja-build'      : not found

Checking for program 'make'                    : /usr/bin/make

Checking for program 'python'                  : /usr/bin/python

Checking for python version >= 2.7.0           : 2.7.12

Checking for program 'python'                  : /usr/bin/python

Checking for python version >= 2.7.0           : 2.7.12

Source is git repository                       : yes

Update submodules                              : yes

Checking for program 'git'                     : /usr/bin/git

Gtest                                          : STM32 boards currently don't support compiling gtest

Checking for program 'arm-none-eabi-size'      : /usr/bin/arm-none-eabi-size

Benchmarks                                     : disabled

Unit tests                                     : disabled

Scripting                                      : disabled

Checking for program 'rsync'                   : /usr/bin/rsync

'configure' finished successfully (3.636s)

root@DESKTOP-O2EBQTQ:/mnt/d/arducopter/ardupilot#


적절하게 코드를 수정하셨으면, 아래의 명령으로 컴파일을 진행합니다.


root@DESKTOP-O2EBQTQ:/mnt/d/arducopter/ardupilot# ./waf copter

Waf: Entering directory `/mnt/d/arducopter/ardupilot/build/px4-v2'





컴파일 진행시 메모리가 대략 7기가 정도 필요합니다. 중간에 튕기지 않도록 가상메모리 설정을 잘 해주시길 바랍니다.




컴파일이 끝났습니다.


빌드된 파일은 아래의 경로에 위치하며, 미션 플래너에서의 사용자 정의 펌웨어 로딩을 통해 플래슁이 가능합니다.


arucopter.px4 가 펌웨어 입니다.



여기까지 간단히 알아보았습니다.


다음에 뵙겠습니다.



댓글을 달아 주세요