스콜라/드론 매뉴얼 편집하기
통진고위키
편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
| 최신판 | 당신의 편집 | ||
| 1번째 줄: | 1번째 줄: | ||
''본 문서는 융합탐구동아리 [[스콜라]] 부원들을 위한 드론에 관한 전반적인 매뉴얼입니다. 스콜라 1기 멤버 [[안중원]]이 처음 작성했으며, 이후 추가 및 개선할 내용이 있다면 통진고 재학생 여러분이 지속적으로 반영해주시기 바랍니다.'' | ''본 문서는 융합탐구동아리 [[스콜라]] 부원들을 위한 드론에 관한 전반적인 매뉴얼입니다. 스콜라 1기 멤버 [[안중원]]이 처음 작성했으며, 이후 추가 및 개선할 내용이 있다면 통진고 재학생 여러분이 지속적으로 반영해주시기 바랍니다.'' | ||
==개요== | ==개요== | ||
| 46번째 줄: | 42번째 줄: | ||
#Tello.js 파일이 저장된 폴더(일반적으로 압축해제된 폴더)를 열고 shift 키를 누른 채로 마우스 오른쪽 버튼을 누른다. | #Tello.js 파일이 저장된 폴더(일반적으로 압축해제된 폴더)를 열고 shift 키를 누른 채로 마우스 오른쪽 버튼을 누른다. | ||
#메뉴에서 "여기서 명령 창 열기" 또는 "여기서 PowerShell 창 열기"를 누르면 콘솔 창이 뜬다. | #메뉴에서 "여기서 명령 창 열기" 또는 "여기서 PowerShell 창 열기"를 누르면 콘솔 창이 뜬다. | ||
#콘솔에서 다음 명령어를 입력하고 엔터를 누르면 Tello 확장기능 서버가 실행된다.<syntaxhighlight | #콘솔에서 다음 명령어를 입력하고 엔터를 누르면 Tello 확장기능 서버가 실행된다.<syntaxhighlight line="1"> | ||
node Tello.js | node Tello.js | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| 215번째 줄: | 211번째 줄: | ||
==군집비행 코딩== | ==군집비행 코딩== | ||
*''본 문단에서는 [https://github.com/TelloSDK/Multi-Tello-Formation Multi-Tello-Formation]를 통해 Tello EDU 군집비행을 코딩하는 방법을 설명합니다.'' | * ''본 문단에서는 [https://github.com/TelloSDK/Multi-Tello-Formation Multi-Tello-Formation]를 통해 Tello EDU 군집비행을 코딩하는 방법을 설명합니다.'' | ||
*''Tello EDU 군집비행에 대한 최신 설명서는 [https://github.com/TelloSDK/Multi-Tello-Formation/blob/master/README.md Multi-Tello-Formation README]를 통해 확인할 수 있습니다.'' | * ''Tello EDU 군집비행에 대한 최신 설명서는 [https://github.com/TelloSDK/Multi-Tello-Formation/blob/master/README.md Multi-Tello-Formation README]를 통해 확인할 수 있습니다.'' | ||
===설치=== | === 설치 === | ||
Windows 운영체제에서 Tello EDU 군집비행을 코딩하기 위해선 Python2.7, Multi-Tello-Formation 등을 설치해야 한다. 그러려면 먼저 다음 항목들을 차례로 내려받는다. | Windows 운영체제에서 Tello EDU 군집비행을 코딩하기 위해선 Python2.7, Multi-Tello-Formation 등을 설치해야 한다. 그러려면 먼저 다음 항목들을 차례로 내려받는다. | ||
*[https://www.python.org/downloads/windows/ Python2.7]: 링크에 들어가서 "Latest Python 2 Release"로 시작하는 링크를 클릭한다. 다시 여러가지 내려받기 링크가 나오는데, 이중 자신의 컴퓨터에 맞는 것을 내려받는다. 과학실 노트북은 모두 64비트이므로, "Windows x86-64 MSI installer"를 내려받는다.설치 과정에서는 별다른 옵션 설정 없이 진행한다. 설치가 완료됐다면 명령 프롬프트나 PowerShell 등에서 <code>C:\Python27\python --version</code> 명령어를 실행했을 때 설치된 버전이 출력된다. python 최신 버전인 3.x 버전과 충돌할 수 있으므로 본 문서에서는 "python" 명령어 대신 "C:\Python27\python"이라는 절대경로 명령어를 사용한다. | * [https://www.python.org/downloads/windows/ Python2.7]: 링크에 들어가서 "Latest Python 2 Release"로 시작하는 링크를 클릭한다. 다시 여러가지 내려받기 링크가 나오는데, 이중 자신의 컴퓨터에 맞는 것을 내려받는다. 과학실 노트북은 모두 64비트이므로, "Windows x86-64 MSI installer"를 내려받는다.설치 과정에서는 별다른 옵션 설정 없이 진행한다. 설치가 완료됐다면 명령 프롬프트나 PowerShell 등에서 <code>C:\Python27\python --version</code> 명령어를 실행했을 때 설치된 버전이 출력된다. python 최신 버전인 3.x 버전과 충돌할 수 있으므로 본 문서에서는 "python" 명령어 대신 "C:\Python27\python"이라는 절대경로 명령어를 사용한다. | ||
*[https://aka.ms/vcpython27 vcpython27]: Python2.7에서 일부 패키지를 내려받을 때 필요하다. | * [https://aka.ms/vcpython27 vcpython27]: Python2.7에서 일부 패키지를 내려받을 때 필요하다. | ||
*[https://github.com/TelloSDK/Multi-Tello-Formation/archive/master.zip Multi-Tello-Formation]: 코드 전체를 압축파일로 내려받는다. 내려받은 압축파일은 원하는 위치에 압축을 풀어놓는다. | * [https://github.com/TelloSDK/Multi-Tello-Formation/archive/master.zip Multi-Tello-Formation]: 코드 전체를 압축파일로 내려받는다. 내려받은 압축파일은 원하는 위치에 압축을 풀어놓는다. | ||
모든 항목을 내려받았다면 다음 순서에 따라 설치한다. | 모든 항목을 내려받았다면 다음 순서에 따라 설치한다. | ||
#Multi-Tello-Formation 폴더에서 Shift를 누른 채 마우스 오른쪽 버튼을 눌러서 나온 메뉴에서 "여기서 명령 창 열기" 또는 "여기서 PowerShell 창 열기"를 눌러 콘솔창을 실행한다. | # Multi-Tello-Formation 폴더에서 Shift를 누른 채 마우스 오른쪽 버튼을 눌러서 나온 메뉴에서 "여기서 명령 창 열기" 또는 "여기서 PowerShell 창 열기"를 눌러 콘솔창을 실행한다. | ||
#다음 명령어로 pip와 netifaces, netaddr 패키지를 설치한다.<syntaxhighlight | # 다음 명령어로 pip와 netifaces, netaddr 패키지를 설치한다.<syntaxhighlight line="1"> | ||
C:\Python27\python get-pip.py | C:\Python27\python get-pip.py | ||
C:\Python27\python -m pip install netifaces netaddr | C:\Python27\python -m pip install netifaces netaddr | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===준비=== | === 준비 === | ||
다음 순서에 따라 드론을 군집비행에 맞게 준비한다. Multi-Tello-Formation 폴더에 콘솔은 미리 켜 놓는다. | 다음 순서에 따라 드론을 군집비행에 맞게 준비한다. Multi-Tello-Formation 폴더에 콘솔은 미리 켜 놓는다. | ||
#Multi-Tello-Formation 폴더의 formation_setup.py의 26번째 줄을 다음과 같이 수정한다. 이때 와이파이의 이름(SSID)과 비밀번호에는 공백문자(' ')나 언더바('_')가 있으면 안 된다. 과학실 및 학교 와이파이 이름에는 대부분 언더바가 들어가므로, 스마트폰 핫스팟을 켜고 핫스팟의 이름과 비밀번호를 입력하는 것이 좋다. 핫스팟은 군집 비행을 준비하고 실행하는 동안 계속 켜놓는다.<syntaxhighlight lang=" | # Multi-Tello-Formation 폴더의 formation_setup.py의 26번째 줄을 다음과 같이 수정한다. 이때 와이파이의 이름(SSID)과 비밀번호에는 공백문자(' ')나 언더바('_')가 있으면 안 된다. 과학실 및 학교 와이파이 이름에는 대부분 언더바가 들어가므로, 스마트폰 핫스팟을 켜고 핫스팟의 이름과 비밀번호를 입력하는 것이 좋다. 핫스팟은 군집 비행을 준비하고 실행하는 동안 계속 켜놓는다.<syntaxhighlight lang="python" line="1" start="26"> | ||
set_ap('Wifi이름', 'Wifi비밀번호') | set_ap('Wifi이름', 'Wifi비밀번호') | ||
</syntaxhighlight> | </syntaxhighlight> | ||
#노트북 와이파이를 코딩하려는 드론에 연결한다. | # 노트북 와이파이를 코딩하려는 드론에 연결한다. | ||
##전원 버튼을 눌러 드론을 켠다. 드론이 무지개빛으로 반짝이다가 노란불이 빠르게 깜빡이는 상태가 되면 와이파이를 연결할 수 있다. | ## 전원 버튼을 눌러 드론을 켠다. 드론이 무지개빛으로 반짝이다가 노란불이 빠르게 깜빡이는 상태가 되면 와이파이를 연결할 수 있다. | ||
##노트북 와이파이를 드론에 연결한다. 와이파이 이름은 드론의 배터리 넣는 칸 안에 적혀있다. 현재 과학실의 Tello EDU 드론은 와이파이 이름(SSID)과 시리얼 ID가 라벨링되어있지 않은데, 라벨링하여 사용하길 추천한다. | ##노트북 와이파이를 드론에 연결한다. 와이파이 이름은 드론의 배터리 넣는 칸 안에 적혀있다. 현재 과학실의 Tello EDU 드론은 와이파이 이름(SSID)과 시리얼 ID가 라벨링되어있지 않은데, 라벨링하여 사용하길 추천한다. | ||
#다음 명령어를 통해 formation_setup.py를 실행한다.<syntaxhighlight | #다음 명령어를 통해 formation_setup.py를 실행한다.<syntaxhighlight> | ||
C:\Python27\python formation_setup.py | C:\Python27\python formation_setup.py | ||
</syntaxhighlight>성공적으로 실행됐다면 콘솔에 다음 메시지가 뜬다. 동시에 드론 3초 뒤 재부팅돼서 처음 켤 때처럼 노란불이 깜빡이는 상태가 된다.<syntaxhighlight | </syntaxhighlight>성공적으로 실행됐다면 콘솔에 다음 메시지가 뜬다. 동시에 드론 3초 뒤 재부팅돼서 처음 켤 때처럼 노란불이 깜빡이는 상태가 된다.<syntaxhighlight> | ||
sending command command | sending command command | ||
from ('192.168.10.1', 8889): ok | from ('192.168.10.1', 8889): ok | ||
| 252번째 줄: | 249번째 줄: | ||
#2~3번 과정을 모든 군집비행 드론에 대해 반복한다. | #2~3번 과정을 모든 군집비행 드론에 대해 반복한다. | ||
#드론들을 연결시킨 와이파이(또는 스마트폰 핫스팟)에 노트북도 연결한다. | #드론들을 연결시킨 와이파이(또는 스마트폰 핫스팟)에 노트북도 연결한다. | ||
#ip.txt의 내용을 다음과 같이 변경한다.<syntaxhighlight | #ip.txt의 내용을 다음과 같이 변경한다.<syntaxhighlight> | ||
scan [드론 개수] | scan [드론 개수] | ||
</syntaxhighlight> | </syntaxhighlight> | ||
#다음 명령어로 준비한 드론이 모두 연결되었는지 확인한다.<syntaxhighlight | #다음 명령어로 준비한 드론이 모두 연결되었는지 확인한다.<syntaxhighlight> | ||
C:\Python27\python multi_tello_test.py ip.txt | C:\Python27\python multi_tello_test.py ip.txt | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===실행=== | === 실행 === | ||
메모장으로 코딩을 완료한 뒤 Multi-Tello-Formation 폴더에 저장했다면 다음 명령어로 군집비행을 실행할 수 있다.<syntaxhighlight | 메모장으로 코딩을 완료한 뒤 Multi-Tello-Formation 폴더에 저장했다면 다음 명령어로 군집비행을 실행할 수 있다.<syntaxhighlight> | ||
C:\Python27\python multi_tello_test.py [코드파일이름] | C:\Python27\python multi_tello_test.py [코드파일이름] | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===코딩 가이드=== | === 코딩 가이드 === | ||
군집비행 코드는 일반적으로 다음의 구조를 이룬다: | 군집비행 코드는 일반적으로 다음의 구조를 이룬다: | ||
{| class="wikitable" | {| class="wikitable" | ||
| 316번째 줄: | 313번째 줄: | ||
|- | |- | ||
|<code>[N]>[명령어]</code> | |<code>[N]>[명령어]</code> | ||
|[N]번 드론에 [명령어]를 보낸다. [N] 자리에 <code>*</code>이 들어가면 모든 드론에 [명령어]를 보낸다. | |[N]번 드론에 [명령어]를 보낸다. [N] 자리에 <code>*</code>이 들어가면 모든 드론에 [명령어]를 보낸다. | ||
|<code>1>forward 100</code> | |<code>1>forward 100</code> | ||
<code>*>land</code> | <code>*>land</code> | ||
|- | |- | ||
|<code>[N]>Re [명령어]</code> | |<code>[N]>Re [명령어]</code> | ||
|<code>[N]>[명령어]</code>와 동작은 같지만 패킷 손실을 | |<code>[N]>[명령어]</code>와 동작은 같지만 패킷 손실을 위한 내부 처리가 추가로 이루어진다. | ||
|<code>2>cw 180</code> | |<code>2>cw 180</code> | ||
|- | |- | ||
| 334번째 줄: | 331번째 줄: | ||
[명령어]에 들어가는 자세한 비행 명령은 [[스콜라/드론 매뉴얼#Tello SDK|Tello SDK]] 문단 참조. | [명령어]에 들어가는 자세한 비행 명령은 [[스콜라/드론 매뉴얼#Tello SDK|Tello SDK]] 문단 참조. | ||
==Tello SDK== | == Tello SDK == | ||
추가예정. | |||