'드론 프로그래밍'에 해당되는 글 7건

Dev/Drone

SITL(3) : 실행 및 파라미터


GUIDED 모드


이전 글에서 SITL 을 성공적으로 설치했다면 이번에는 시뮬레이터 속의 드론을 비행시켜 보자.

  • ardupilot/ArduCopter 으로 이동한 후에 아래 명령어를 입력한다. 
sim_vehicle.py -w --map --console

 




 위와 같은 화면 구성이 보일 것이다. 명령어를 실행시켰던 기존 콘솔에서 동작하는 프로세스가 MAVProxy 이다. MAVProxy 에 아래와 같이 명령어를 입력해 보자.

  • 모드를 GUIDED 로 설정한다.
mode GUIDED
  • 모터를 ARM 시킨다.
arm throttle

ARM 은 아두파일럿에서 '시동' 과 비슷한 의미라고 생각해 두면 좋다.

  • 이륙시켜 보자.
takeoff 100

console 에서 altitude 가 20 이 될 때까지 드론이 움직이는 모습을 볼 수 있다.

  • GUIDED 모드는 GCS 에서의 즉각적인 명령에 따르는 모드이다.  MAP 위에서 명령을 날려서 원하는 위치로 날려보자.




Auto 모드


ardupilot 의 mission 기반 자동 비행 기능으로, 'Autopilot'  이름값을 하는 모드이다. SITL 을 실행하고 MAVProxy 에 아래와 같은 명령어를 입력해 보자.

  • 미리 설정된 waypoint 들을 전송

    wp load ../Tools/autotest/copter_mission.txt
    




  • 위와 같이 map 에 waypoint 가 보일 것이다. 먼저 이륙을 시켜보자.

    mode guided 
    arm throttle 
    takeoff 20
    
  • 이륙 후에 모드를 Auto 로 변경하면, waypoint 를 따라서 비행이 시작된다.

    mode auto
    

sim_vehicle.py


sim_vehicle.py 는 아두파일럿의 빌드와 코드의 실행을 자동으로 Simulating & Testing 할 수 있는 스크립트이다.

아레는 sim_vehicle.py -h 을 실행했을 때 볼 수 있는 파라미터들에 대한 설명이다.

Options:
  -h, --help            show this help message and exit
  -v VEHICLE, --vehicle=VEHICLE
                        vehicle type (ArduPlane, ArduCopter or APMrover2)
  -f FRAME, --frame=FRAME
                        set aircraft frame type                      for
                        copters can choose +, X, quad or octa
                        for planes can choose elevon or vtail
  -C, --sim_vehicle_sh_compatible
                        be compatible with the way sim_vehicle.sh works; make
                        this the first option
  -H, --hil             start HIL

  Build options:
    -N, --no-rebuild    don't rebuild before starting ardupilot
    -D, --debug         build with debugging
    -c, --clean         do a make clean before building
    -j JOBS, --jobs=JOBS
                        number of processors to use during build (default for
                        waf : number of processor, for make : 1)
    -b BUILD_TARGET, --build-target=BUILD_TARGET
                        override SITL build target
    -s BUILD_SYSTEM, --build-system=BUILD_SYSTEM
                        build system to use
    --rebuild-on-failure
                        if build fails, do not clean and rebuild
    --waf-configure-arg=WAF_CONFIGURE_ARGS
                        extra arguments to pass to waf in its configure step
    --waf-build-arg=WAF_BUILD_ARGS
                        extra arguments to pass to waf in its build step

  Simulation options:
    -I INSTANCE, --instance=INSTANCE
                        instance of simulator
    -V, --valgrind      enable valgrind for memory access checking (very
                        slow!)
    -T, --tracker       start an antenna tracker instance
    -A SITL_INSTANCE_ARGS, --sitl-instance-args=SITL_INSTANCE_ARGS
                        pass arguments to SITL instance
    -G, --gdb           use gdb for debugging ardupilot
    -g, --gdb-stopped   use gdb for debugging ardupilot (no auto-start)
    -d DELAY_START, --delay-start=DELAY_START
                        delays the start of mavproxy by the number of seconds
    -B BREAKPOINT, --breakpoint=BREAKPOINT
                        add a breakpoint at given location in debugger
    -M, --mavlink-gimbal
                        enable MAVLink gimbal
    -L LOCATION, --location=LOCATION
                        select start location from
                        Tools/autotest/locations.txt
    -l CUSTOM_LOCATION, --custom-location=CUSTOM_LOCATION
                        set custom start location
    -S SPEEDUP, --speedup=SPEEDUP
                        set simulation speedup (1 for wall clock time)
    -t TRACKER_LOCATION, --tracker-location=TRACKER_LOCATION
                        set antenna tracker start location
    -w, --wipe-eeprom   wipe EEPROM and reload parameters
    -m MAVPROXY_ARGS, --mavproxy-args=MAVPROXY_ARGS
                        additional arguments to pass to mavproxy.py
    --strace            strace the ArduPilot binary
    --model=MODEL       Override simulation model to use

  Compatibility MAVProxy options (consider using --mavproxy-args instead):
    --out=OUT           create an additional mavlink output
    --map               load map module on startup
    --console           load console module on startup

대부분 default 로 놓아도 문제가 없지만, 중요한 파라미터는 다음과 같다.

  • --out : MAVProxy 에게 적용되는 파라미터로써, SITL 상에서 존재하는 드론과 연결할 GCS 혹은 다른 Application 의 Address 가 오면 된다.
  • --map : Vehicle 의 위치에 대한(GPS 좌표 기반) 지도를 표시한다. 이 화면을 이용하여 GUIDED 모드의 기능을 테스트하고 Vehicle 의 행동을 그래픽으로 대강이나마 관찰할 수 있다.
  • --console : Vehicle 에 대한 정보를 볼 수 있는 콘솔을 추가로 연다. 그렇지 않으면 기존 터미널에 출력된다.
  • -G --gdb : 디버깅 옵션을 추가한다.
  • -w --wipe-eeprom : eeprom (드론의 보조 기억장치) 를 지우고 시작한다. 사전에 설정된 Mission 등등이 삭제된다.

참고문헌



http://ardupilot.org/dev/docs/copter-sitl-mavproxy-tutorial.html

Dev/Drone

SITL(2) : 설치




환경


필자는 다음과 같은 환경에서 테스트 하였다.

  • Ubuntu 14.04 (Windows 10 에서 VM ware 를 이용)

설치

  • 아두파일럿 다운로드
sudo apt-get install git # git 이 설치되어 있지 않을 경우 
git clone git://github.com/ArduPilot/ardupilot.git
cd ardupilot
git submodule update --init --recursive
  • 필수 패키지 설치
sudo apt-get update 
sudo apt-get install python-matplotlib python-serial python-wxgtk2.8 python-wxtools python-lxml
sudo apt-get install python-scipy python-opencv ccache gawk git python-pip python-pexpect
sudo pip install future pymavlink MAVProxy
  • 환경변수 추가
export PATH=$PATH:$HOME/jsbsim/src
export PATH=$PATH:$HOME/ardupilot/Tools/autotest
export PATH=/usr/lib/ccache:$PATH

위의 코드를 ~/.bashrc 의 맨 밑줄에 추가해 준 후, 터미널을 껏다 켜거나 다음 명령어를 입력한다.

 . ~/.bashrc

실행


ardupilot 을 다운로드 받은 디렉터리로 이동한 후, 다음 디렉터리로 이동한다.

 cd ardupilot/ArduCopter 
 sim_vehicle.py -w --map --console

몇 분간의 빌드를 마치면 아래와 같이 아두파일럿 SITL 이 실행된다.



참고문헌



http://ardupilot.org/dev/docs/setting-up-sitl-on-linux.html

Dev/Drone

아두콥터의 모드(아두콥터의 기능)


아두파일럿을 이해하기 위해서는 비행 모드들에 대해서 이해해야 한다. 아두콥터에는 다양한 모드들이 있는데, 아두콥터는 이 모드에 따라 stablization, 자동 비행 등의 행동을 결정한다. 아두콥터의 비행 모드는 Radio(조종기), Ground Station 의 Command 등에 의해 컨트롤된다.

아두콥터에는 십여개의 모드가 있는데, 일반적인 상황에서 쓰이는 모드는 9개 남짓이다. 이 포스팅에서는 일반적으로 다루게 될 모드들에 대해서만 소개하였다.

아두콥터의 모드들


모드 이름 GPS Dependency
Loiter O
RTL(Return To Launch) O
Auto O
Guided O
Drift O
Pos Hold O
Circle O
Throw O
Stablize X
Alt Hold X
Acro X
Sport X
Land X

Stablize


Stablize 모드는 아두콥터의 기본 모드인데, 드론을 직접 조종할 때 쓰게 된다. Stablize 모드는 드론의 수평을 맟춰 주고 이동 중 현재 방향을 유지시켜 주며, 파일럿(조종하는 사람) 이 Throttle 을 완전히 제어할 수 있게 해준다.

Alt Hold




Alt Hold (Altitude Hold Mode) 는 yaw, pitch, roll 동작을 허용하면서 드론 고도를 일정하게 유지시키는 것이 목적이다.

RTL


RTL (Return To Launch) 모드에 진입하면, 드론은 HOME 으로 귀환한다. 15미터 미만이라면, 안전을 위해 15미터까지 상승 후 이동한다. 특별한 설정이 없는 이상 일반적으로 이륙 전 모터가 ARM 된 위치가 HOME 이 된다.

보통 조종기 혹은 GCS 와 연결이 끊겼을 때 자동으로 Failsafe (안전장치) 에 의해 이 모드가 자동으로 실행된다.

Auto


Auto 모드에서는 드론은 Mission Planner, APM Planner 2 등의 프로그램을 이용하여 사전에 전달받은 Mission Script 대로 행동한다. 드론에게 설정해 줄 수 있는 명령은 대표적으로 Takeoff, Waypoint, spin 등이다.

Guided


Guided 모드는 Ground Station (Mission Planner) 혹은 Dronekit 등을 이용한 어플리케이션의 명령을 받아 행동하는 모드이다. 드론 관련 어플리케이션을 제작하는 사람들에겐 이 모드가 가장 유용하게 쓰일 것이다.

외부로부터 이동 명령을 전달 받으면, 해당 위치로 이동한 후 다음 명령을 받을 때 까지 Hover 하며 기다린다.

참고문헌


http://www.arducopter.co.uk/all-arducopter-guides/arducopter-flight-modes

이미지 출처

http://ardupilot.org/copter/docs/flight-modes.html

다른 모드들에 대해서도 궁금하다면 위 문서를 보길 바란다.

Dev/Drone

아두파일럿 소스 분석(2) : 개요 


개요


아두파일럿에는 다음과 같은 하위 프로젝트들이 있다.

  • ArduPlane
  • ArduCopter
  • ArduRover
  • ArduSub(잠수함)


이 중에 드론(쿼드콥터)을 위한 프로젝트는 ArduCopter 인데, 가장 활발하게 참여가 이루어지는 프로젝트이기도 하다.  


먼저, 아두파일럿의 기본 구조를 살펴 보자.


[ardupilot 의 Layer 구조]





위 그림은 아두파일럿이 동작하는 드론의 구조를 고수준에서 간단하게 나타낸 다이어그램이다. 아두파일럿은 드론에서 OS 와 같은 역할을 한다. (어쩌면 드론의 OS 라고 생각해도 좋을지 모른다) 혹시 아래의 설명이 낮설고 이해가 가지 않는다면 OS 이론의 개요 부분을 읽고 오면 도움이 될 것이다.


그림 중간에 위치한 아두파일럿은 크게 Vehicle Specific Code, Shared Libraries, Hardware Abstraction Layer(HAL) 로 이루어져 있다.


그 중 가장 아래의 HAL 은 하드웨어를 추상화 하여 아두파일럿이 하드웨어에 독립적으로 동작하게 해 준다.(같은 아두파일럿 코드를 다양한 하드웨어 위에서 돌릴 수 있게 한다) 또한, 코드 내에서 HAL 객체를 통하여 하드웨어로의 접근을 제공해 준다.


Shared Libraries 는 아두파일럿 하위 프로젝트인 콥터, 플레인, 로버 등등이 공유하는 기능 혹은 Basic 한 기능들을 모아놓은 라이브러리를 제공해 준다. 예를 들면 GPS, Compass , accelometer, Math Library 등이다.


Vehicle specific code 가 바로 이 포스팅에서 분석할 부분으로, Vehicle 에 특화된 부분을 다룬다. 예를 들어 쿼드콥터의 비행 제어와 관련된 코드는 이 Layer 에 있다. 


MAVLink 는 일종의 통신 프로토콜로, 아두파일럿을 비롯한 Autopilot 시스템에서 정보, 커맨드를 주고 받는데 사용된다. Serial 통신, UDP, TCP, Telemetry 위에서 동작하는 Application Layer 의 프로토콜이다.  



가장 상위에는 Ground Station, DroneKit 등이 있는데 이 중 Ground Station 은 드론에게 미션 설정, 파라미터 설정, 드론 비행 로그 관리 외에도 잡다한 기능을 제공하는 프로그램이다.  대표적으로 APM Planner 2 가 있다. 


Dronekit 은 아두파일럿과 상호 협동할 컴퓨터 위에서 API를 제공하는 플랫폼인데, Android, Python, Cloud (Restful api), IOS(Comming soon) 가 있는데 현재 프로젝트가 잘 활성화 되어 있는 것 같지 않아 보이고 (Github 을 봤을 때) 이 중 필자의 경험으로는 Android 와 Python 은 쓸만 한 것 같다.



참고 : 

https://en.wikipedia.org/wiki/MAVLink


http://qgroundcontrol.org/mavlink/start


http://dronekit.io/



Dev/Drone

Ardupilot 코드 분석(1) : 사전 준비



이 포스팅을 수월하게 이해하기 위해서는 독자에게 요구되는 수준은 다음 질문에 대답할 수 있어야 한다

  • git 이 무엇인지 아는가?
  • Linux 환경의 경험이 있는가? 
  • C++ 코드를 읽을 수 있다.(이것만 가능해도 된다.)

사전 준비




가장 중요한 아두파일럿의 코드는 아래의 Github repo에서 구할 수 있다.


https://github.com/ArduPilot/ardupilot/



각자 익숙한 C++ 환경 (Eclipse, Vim & Ctags, Clion ... ) 에서 코드를 분석하기를 바란다.


장인은 도구를 탓하지 않지만, 굳이 Nodepad 로 소스를 분석하는 장인은 없을 것이다.


가능하면 Navigation 기능이 있는 환경에서 코드를 분석하도록 하자. 

. 코드 분석에는 Navigation 기능이 크게 도움이 되기 때문이다. (Find Usage, Go to Declaraton 등등) 학생 혜택 등으로 라이센스가 있다면 CLion 을 추천하지만, 상황의 여의치 않다면 Eclipse 등을 사용해도 무방하다.



CLion 


공식 Wiki Eclipse 환경세팅법



필자는 Ubuntu 14.04 환경에서 Clion 으로 에서 작업하였다. 아래는 Clion 에서의 간단한 코드 분석 환경(빌드는 X) 설정법이다.




Clion 에서 코드 네비게이션 기능 적용시키기





import Project from Source 를 클릭한다. 




본인의 아두파일럿 프로젝트가 있는 디렉터리를 선택하고 OK 를 누른다. 



ArduCopter 디렉터리와 Libraries 디렉터리를 위와 같이 Project Sources and Headers 로 지정해 주면 아래와 같이 Code Navigation 기능을 이용할 수 있게 된다. 







[ardupilot] 아두파일럿 소스 분석(2) : 개요


Dev/Drone

SITL 개요

SITL 이란?

SITL 이란 Software-In-The-Loop 의 줄임말으로써, Ardupilot 코드를 PC 와 같은 Linux 머신 위에서 빌드 및 테스트 해 볼수 있는 시뮬레이션 프로그램이다.

SITL 을 이용하면 다음과 같은 점을 기대해 볼 수 있겠다.

  • Hardware 에 종속적이지 않게 Vehicle specific code 를 Testing 할 수 있다
  • Physical 하지 않은 function 들을 안전하게 test, Debugging 할 수 있다.(즉, 드론이 덜 추락할 것이므로 돈을 아낄 수 있다.)
  • 실제 드론, 즉 하드웨어가 없어도 아두파일럿을 빌드하고 실행되는 모습을 가볍게 볼 수 있으므로 편리하다 그러나 다음과 같은 한계도 지닌다. *실제 비행 제어 (Physical) 의 동작은 신뢰할 수 없는 시뮬레이터의 한계를 가진다.


[SITL 의 Architecture]

아두파일럿 코드를 SITL 을 target 으로 빌드하게 되면, 리눅스 실행 바이너리인 .elf 형태로 빌드된다. 이것을 실제로 실행해 보면 아래와 같이 실행된다. 코드를 빌드하고 매개변수를 전달하여 실행하는 과정은 스크립트로 자동화 되어 제공되는데, 뒤에서 자세히 다루겠다.

아래 스크린샷은 SITL 을 실행한 모습이다.

[SITL 이 실행되는 모습]



[ardupilot][SITL] SITL(2) : 시뮬레이터 설치


Dev/Drone

아두파일럿 이란?

아두파일럿은 아두이노 + Autopilot 의 줄임말으로, 다양한 하드웨어 환경의 Vehicle 에 탑재될 수 있는 오픈소스 autopilot system 이다.(대표적으로 Quad Copter 에는 ArduCopter 가 들어간다.) 일반적으로 드론에게 기대할 수 있는 기능들을 제공하며, 눈여겨 볼 만한 특징으로는 GPS 기반으로 미션을 설정하여 자동 비행을 할 수 있다는 점이다. 이를 응용하면 다양한 활용 방안을 생각해 볼 수 있다. 대표적으로 공식 홈페이지의 Use Case & Application 을 살펴보면 아래와 같은 mission 을 수행하며 촬영한 카메라로 3D Mapping 을 하는데에 활용되는 모습을 볼 수 있다.

{: .center-image} [드론에게 위와 같이 waypoint 를 가지는 mission 을 설정할 수 있다.]

[드론을 이용하여 제작된 3D 이미지]


아두파일럿 공식 홈페이지

공식 홈페이지에서는 아두파일럿에 대해 친절하게 설명되어 있다.

최근 들어 드론의 활용에 관한 연구와 개발이 많이 이루어 지는데 오픈소스인 Ardupilot 을 이용하는 경우가 많다. (어른의 사정) 나는 아두파일럿을 공부하는데에 자료가 풍족하지 않아 공부하는데에 고생을 했다. 그렇다. 그래서 이 포스팅에 공부한 내용을 정리하기로 했다. 


 이 포스팅에서는 아두파일럿의 대표적인 하위 프로젝트인 아두 콥터에 대해서 살펴본다. 

아두파일럿을 공부하기에 앞서, 아두파일럿이 탑재된 드론이 있다면 가지고 충분히 조작해 보고 관찰하기를 바란다. 어느 분야나 그렇듯이, 코드를 분석하기 위해서는 코드의 동작을 먼저 관찰하는 것이 이해에 수월하다.

이 포스팅은 공식 사이트의 wiki 를 참고하였다.



1
블로그 이미지

IT & Computer Science

빨간호랑이