/ TECHNOLOGY

Pixhawk based Drone Development

드론은 날려 보았으니 이것 저것 다른 것이 해보고 싶었다. 최종으로는 드론 군집 비행 같은 것을 좀 해보려고 하는데, 관련해서 스터디 한 내용을 정리해 보았다. 그런데, 군집 비행 하려면 몇 대가 필요할까… -_-;;;

python 설치

가능하면, c/c++로 개발을 할건데, 관련 내용은 대부분 python으로 되어 있어 공부를 좀 해야했다. 스크립트 언어에 대해 그리 좋은 인상이 없는데, 프로토타입 개발이 빨라서 익혀두면 좋을 것 같다. (라고 긍정적으로 생각해보지만…)

특히, python은 참 마음에 안드는게 버전 별로 호환이 안 되는 거다. 최신인 3.5버전이 있는데도 불구하고 대부분 사용하는 것은 2.7대 버전. 제대로 된 언어로 인정받고 싶다면 스스로 통일부터 했으면… 여기서는 일반적인 설치는 냅두고 에러 상황이나 특이한 내용에 대해 정리했다.

pip로 모듈 설치할 때 이상하면

모듈 설치가 안될 경우, 이렇게 하면 되지만 결국은 재설치했다. 속편하게…

pip install --ignore-installed [module]  
easy_install [module]  

python 실행이 이상할 때, 재설치

이리 설치되어 있는 python을 다 설치하는 방법. 물론 나는 맥이라 brew를 이용해서~ ㅎㅎㅎ

brew doctor   
brew reinstall python
brew install python
  
brew linkapps python
brew link --overwrite python
hash -r python

주석 때문에 실행이 안될 때

주석 시작하는 부분에 아래 내용을 넣어둔다.

# -*- coding: utf-8 -*-
"""
your comments
bluh bluh~~~

"""

DRONEKIT

3d Robotics에서 개발한 python tool이다. 간단히 여러가지 상황을 확인해 볼 수 있어서 좋다. 특히, “Guided 모드“를 활용한 Example은 많은 도움이 되었다.

dronekit 설치

공식 홈페이지의 Quick Start로 해서 안될 때가 있는데, 그냥 직접 github에서 받아 설치하면 된다.

sudo pip install git+https://github.com/dronekit/dronekit-sitl  
sudo pip install git+https://github.com/dronekit/dronekit-python

mavproxy 연동

굳이 연동 할 필요 없지만, 프로그램과 함께 GCS를 통해 동작을 확인하기 좋다. 우선, 드론 simulator만 실행을 시킨다. home position은 한국/서울로 잡고, copter 이미지를 이용한다.

dronekit-sitl --list
dronekit-sitl copter-3.3 --home=34.719086,127.0285034,584,353
잘못된 위도/경도 값으로 셋팅하면, 시뮬레이터가 그냥 사망한다. 조심하자. 

mavproxy로 bridge역활을 하며, 출력을 두 개로 나눈다.

mavproxy.py --master tcp:127.0.0.1:5760  --out 127.0.0.1:14550 --out 127.0.0.1:14551

dronekit의 예제 실행

QGroundControl을 실행 시키면 자동으로 port 14550으로 접속

python guided_set_speed_yaw.py --connect 127.0.0.1:14551  

실제 드론과 연결할 때는 udpout을 꼭! 붙여줘야 연결된다. tcp연결 아직 못찾음. -_-;

python guided_set_speed_yaw.py --connect udpout:[DRONE IP]:14551  

GUI Programming - PyQT

뭔가 테스트 해보려고 하니 CI는 느무 불편해서 아예 GUI로 구현 시도 중

왜 이걸 많이 안 쓰나 했더니 설치해야하는 진입 장벽이 존재함 -_-;; (윈도우는 제외) 매뉴얼도 좁쌀만한 크기의 말 때문에 읽기도 싫고 말이지…

SIP을 먼저 다운로드 받아서 압축을 풀자.

python configure.py  
make install   

PyQT도 다운로드 받고 압축을 풀자.

python configure-ng.py  
make   <== 꼭 해야함 
make install   

테스트 해보자고…

import sys
from PyQt4.QtCore import *	
from PyQt4.QtGui import *

app = QApplication(sys.argv)
label = QLabel("Hello PyQt")
label.show()
app.exec_()

코딱지만한 윈도우가 나오므로 눈크게 뜨고 찾아봐야함

QT Creator

qt designer를 쓰라고 되어 있는데, qt creator로 통합이 되어있는듯. 설치 파일을 받아서 그중에 Tool만 설치하면 된다. 다른 것들은 c++ 라이브러리인데, 쓸일이 없다.

설치된 QT Creator를 실행하고, 상단의 File->New File을 선택하면 아래의 화면이 나온다. 여기서 Desginer Form를 선택하고 파일 이름 넣으면 된다.

간단히, 위젯, 버튼 등을 넣고 저장한다. 여기서 파일 이름은 mainwindow.ui이다. 이파일을 python 파일로 변경한다.

# 정상적으로 qt가 빌드 되었다면, pyuic4가 설치 되어 있음
pyuic4 -x mainwindow.ui -o mainwindow.py 
 
# 아무 메시지 없으면 변환 성공 
python mainwindow.py

PyOpenGL

PyQT에서 3d구현하려면, PyOpenGL 필요하다. 그런데 설치해도 되지 않는 현상이 발생해서 삽질한 끝에 발견.. -_-;;

pip install pyopengl <== 이건 안됨 
easy_install pyopengl  

테스트는 PyQT의 샘플 코드로 가능하다.

기타

Use mavproxy to make the initial connection, and then fork it to Dronekit and Mission Planner.

mavproxy.py --master=/dev/ttyUSB0 --out=127.0.0.1:14550 --out=127.0.0.1:14551

음성 제어 드론

speech_recognition 모듈과 portaudio로 음성 제어 가능할 듯. (아직 해보지 않음) 영어만 인식 잘하는데 발음이 발음이 발음이… ㅠㅠ

import speech_recognition as sr

# obtain audio from the microphone
r = sr.Recognizer()
with sr.Microphone() as source:
	print("Say something!")
	audio = r.listen(source)
	
# recognize speech using Google Speech Recognition
try:
	print("Google Speech Recognition thinks you said " + r.recognize_google(audio))
except sr.UnknownValueError:
	print("Google Speech Recognition could not understand audio")
except sr.RequestError as e:
	print("Could not request results from Google Speech Recognition service; {0}".format(e))

Reference Sites