스콜라/드론 매뉴얼 편집하기

통진고위키

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.

편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.

최신판 당신의 편집
1번째 줄: 1번째 줄:
''본 문서는 융합탐구동아리 [[스콜라]] 부원들을 위한 드론에 관한 전반적인 매뉴얼입니다. 스콜라 1기 멤버 [[안중원]]이 처음 작성했으며, 이후 추가 및 개선할 내용이 있다면 통진고 재학생 여러분이 지속적으로 반영해주시기 바랍니다.''
''본 문서는 융합탐구동아리 [[스콜라]] 부원들을 위한 드론에 관한 전반적인 매뉴얼입니다. 스콜라 1기 멤버 [[안중원]]이 처음 작성했으며, 이후 추가 및 개선할 내용이 있다면 통진고 재학생 여러분이 지속적으로 반영해주시기 바랍니다.''
스콜라 부원이 이 매뉴얼을 사용하고 있다면 소식을 들려주세요...
2020학년도에는 1학년들이 드론을 한번도 적하지 못한 상황에서 당시 2학년들의 설명에만 의존해서 활동을 조금만 할 수 있었지만 2021학년도에는 보다 구체화된 이 메뉴얼을 통하여 문제가 생겨도 잘 해결할 수 있을 듯하다.(by 스콜라 부원)


==개요==
==개요==
2020년 12월 현재 [[골방|과학실 교무실]]에 구비된 드론은 중국의 드론 스타트업 기업 [https://www.ryzerobotics.com/kr Ryze]의 [https://www.ryzerobotics.com/kr/tello Tello]와 [https://www.ryzerobotics.com/kr/tello-edu Tello EDU]이다. Tello와 Tello EDU는 모두 프로그래밍이 가능하지만 Tello EDU에는 미션패드, 군집비행, SDK 2.0 등의 기능이 추가/개선되었다.
2020년 12월 현재 [[골방|과학실 교무실]]에 구비된 드론은 중국의 드론 스타트업 기업 [https://www.ryzerobotics.com/kr Ryze]의 [https://www.ryzerobotics.com/kr/tello Tello]와 [https://www.ryzerobotics.com/kr/tello-edu Tello EDU]이다. Tello와 Tello EDU는 모두 프로그래밍이 가능하지만 Tello EDU에는 미션패드, 군집비행, SDK 2.0 등의 기능이 추가/개선되었다.


이하에 서술하는 모든 드론 조종 및 코딩에 앞서, 처음 비행을 시작할 때는 활성화(activation) 과정이 필요하다. 활성화 방법은 [[스콜라/드론 매뉴얼#스마트폰 조종|스마트폰 조종]] 문단에 상술한다.
==조종==
 
Tello 및 Tello EDU 드론을 조종하기 위한 '''TELLO''' 앱은 [https://apps.apple.com/us/app/tello/id1330559633 앱스토어]와 [https://play.google.com/store/apps/details?id=com.ryzerobotics.tello&hl=ko 플레이스토어]를 통해 다운로드 가능하다. 자세한 연결 및 조종 방법 추가예정.
==스마트폰 조종==
Tello 및 Tello EDU 드론을 조종하기 위한 '''TELLO''' 앱은 [https://apps.apple.com/us/app/tello/id1330559633 앱스토어]와 [https://play.google.com/store/apps/details?id=com.ryzerobotics.tello&hl=ko 플레이스토어]를 통해 내려받을 수 있다. 앱을 실행하면 드론에 연결하라는 메시지와 함께 연결하는 방법이 나온다. 이 방법에 따라서 드론을 켜고, 스마트폰 와이파이를 드론에 연결하면 드론의 카메라 화면이 나온다. 아직 드론을 비행해보기 전이라면 활성화(activation)를 하라는 메시지가 나오는데, 이때 "Activate" 버튼을 누르면 조종 또는 코딩으로 그 드론을 비행시킬 수 있게 된다.
 
자세한 조종방법 추가예정.


==스크래치 코딩==
==코딩==


*''본 문단에서는 Windows 운영체제에서 Tello 및 Tello EDU 드론의 기본적인 비행동작(이륙, 착륙, 이동, 뒤집기 등)을 스크래치로 프로그래밍하는 방법을 설명합니다.''
* ''본 문단에서는 Windows 운영체제에서 Tello 및 Tello EDU 드론의 기본적인 비행동작(이륙, 착륙, 이동, 뒤집기 등)을 스크래치로 프로그래밍하는 방법을 설명합니다.''
*''Ryze에서 제공하는 최신 버전의 설명서는 [https://www.ryzerobotics.com/kr/tello-edu/downloads Tello EDU 다운로드 페이지]의 '''Scratch README''' 문서를 참조하십시오.''
* ''Ryze에서 제공하는 최신 버전의 설명서는 [https://www.ryzerobotics.com/kr/tello-edu/downloads Tello EDU 다운로드 페이지]의 '''Scratch README''' 문서를 참조하십시오.''
*''[[스콜라/드론 매뉴얼#군집비행 코딩|군집비행]], [[스콜라/드론 매뉴얼#미션패드|미션패드]] 등을 활용한 코딩은 해당 문단을 참조하십시오.''
* ''[[스콜라/드론 매뉴얼#군집비행|군집비행]], [[스콜라/드론 매뉴얼#미션패드|미션패드]] 등을 활용한 코딩은 해당 문단을 참조하십시오.''
*''Python 등 다른 언어로 프로그래밍하는 방법은 [[스콜라/드론 매뉴얼#Tello SDK|Tello SDK]] 문단을 참조하십시오.''
* ''Python 등 다른 언어로 프로그래밍하는 방법은 [[스콜라/드론 매뉴얼#SDK|SDK]] 문단을 참조하십시오.''


===설치===
=== 설치 ===
Tello 및 Tello EDU 드론의 비행 동작을 스크래치로 코딩하려면 스크래치와 Node.js, Tello 스크래치 확장기능을 설치해야 한다. 이를 위해 다음 항목들을 내려받는다.
Tello 및 Tello EDU 드론의 비행 동작을 스크래치로 코딩하려면 스크래치와 Node.js, Tello 스크래치 확장기능을 설치해야 한다. 이를 위해 다음 항목들을 내려받는다.


*[https://scratch.mit.edu/download/scratch2 스크래치 2.0 오프라인 에디터]: 블록 코딩 기반의 교육용 프로그래밍 언어 '스크래치'를 사용하기 위한 프로그램이다.
* [https://scratch.mit.edu/download/scratch2 스크래치 2.0 오프라인 에디터]: 블록 코딩 기반의 교육용 프로그래밍 언어 '스크래치'를 사용하기 위한 프로그램이다.
*[https://get.adobe.com/kr/air/ 어도비 에어]: 스크래치를 실행하기 위해 필요한 프로그램이다.
* [https://get.adobe.com/kr/air/ 어도비 에어]: 스크래치를 실행하기 위해 필요한 프로그램이다.
*[https://nodejs.org/en/ Node.js]: 스크래치 추가기능을 사용하기 위해 필요한 프로그램이다. 다운로드 버튼이 2개가 나타나는데, 그중 LTS 버전 설치를 권장한다.
* [https://nodejs.org/en/ Node.js]: 스크래치 추가기능을 사용하기 위해 필요한 프로그램이다. 다운로드 버튼이 2개가 나타나는데, 그중 LTS 버전 설치를 권장한다.
*Tello 스크래치 추가기능 압축파일: 최신 버전을 [https://www.ryzerobotics.com/kr/tello/downloads Tello 다운로드 페이지] 또는 [https://www.ryzerobotics.com/kr/tello-edu/downloads Tello EDU 다운로드 페이지]의 '''Scratch README''' 문서의 링크에서 받을 수 있다. 사용하는 기종에 따라 적절한 압축파일을 받도록 한다.
* Tello 스크래치 추가기능 압축파일: 최신 버전을 [https://www.ryzerobotics.com/kr/tello-edu/downloads Tello EDU 다운로드 페이지]의 '''Scratch README''' 문서의 링크에서 받을 수 있다.


어도비 에어, 스크래치, Node.js를 순서대로 설치하고 추가기능 압축파일을 압축해제한다. 압축해제한 폴더에는 Tello.js, Tello.s2e, TelloChs.s2e, run_Tellojs.bat 파일이 들어있다.
어도비 에어, 스크래치, Node.js를 순서대로 설치하고 추가기능 압축파일을 압축해제한다. 압축해제한 폴더에는 Tello.js, Tello.s2e, TelloChs.s2e,ㅊrun_Tellojs.bat 파일이 들어있다.


run_Tellojs.bat과 TelloChs.s2e 파일은 본 매뉴얼에서는 사용하지 않는다. 참고로 run_Tellojs.bat은 콘솔을 여는 과정 없이 바로 명령어를 실행하기 위한 배치 스크립트이지만 돌발상황에 대처할 때에는 사용이 불편하다. TelloChs.s2e는 Tello.s2e와 같이 스크래치 확장기능 파일이지만 중국어로 되어있다는 차이점이 있다.
run_Tellojs.bat과 TelloChs.s2e 파일은 본 매뉴얼에서는 사용하지 않는다. 참고로 run_Tellojs.bat은 콘솔을 여는 과정 없이 바로 명령어를 실행하기 위한 배치 스크립트이지만 돌발상황에 대처할 때에는 사용이 불편하다. TelloChs.s2e는 Tello.s2e와 같이 스크래치 확장기능 파일이지만 중국어로 되어있다는 차이점이 있다.


===준비===
=== 코딩 준비 ===
다음 사항들을 서술된 순서대로 준비한다.
다음 사항들을 서술된 순서대로 준비한다.


*노트북 와이파이를 코딩하려는 드론에 연결한다.
* [[스콜라/드론 매뉴얼#조종|조종]]할 때와 마찬가지로 노트북 와이파이를 코딩하려는 드론에 연결한다.


#전원 버튼을 눌러 드론을 켠다. 드론이 무지개빛으로 반짝이다가 노란불이 빠르게 깜빡이는 상태가 되면 와이파이를 연결할 수 있다.
# 전원 버튼을 눌러 드론을 켠다.
#노트북 와이파이를 드론에 연결한다. 와이파이 이름은 드론의 배터리 넣는 칸 안에 적혀있다. 현재 과학실의 모든 Tello 드론은 기체 상단에 와이파이 이름이 라벨링되어있다.
# 노트북 와이파이를 드론에 연결한다. 와이파이 이름은  


*Tello.js를 실행한다. 가장 간단한 방법은 다음과 같다.
* Tello.js를 실행한다. 가장 간단한 방법은 다음과 같다.


#Tello.js 파일이 저장된 폴더(일반적으로 압축해제된 폴더)를 열고 shift 키를 누른 채로 마우스 오른쪽 버튼을 누른다.
# Tello.js 파일이 저장된 폴더(일반적으로 압축해제된 폴더)를 열고 shift 키를 누른 채로 마우스 오른쪽 버튼을 누른다.
#메뉴에서 "여기서 명령 창 열기" 또는 "여기서 PowerShell 창 열기"를 누르면 콘솔 창이 뜬다.
# 메뉴에서 "여기서 명령 창 열기" 또는 "여기서 PowerShell 창 열기"를 누르면 콘솔 창이 뜬다.
#콘솔에서 다음 명령어를 입력하고 엔터를 누르면 Tello 확장기능 서버가 실행된다.<syntaxhighlight lang="bat">
# 콘솔에서 "node Tello.js"를 입력하고 엔터를 누르면 Tello 확장기능 서버가 실행된다.
node Tello.js
# 이 콘솔 창을 그대로 켜놔야 스크래치에서 확장기능을 사용할 수 있다. Tello.js를 종료할 때에는 콘솔 창을 닫거나 콘솔에서 Ctrl+C를 누른다.
</syntaxhighlight>
#이 콘솔 창을 그대로 켜놔야 스크래치에서 확장기능을 사용할 수 있다. Tello.js를 종료할 때에는 콘솔 창을 닫거나 콘솔에서 Ctrl+C를 누른다.


*스크래치(Scratch 2.0)를 실행해 확장기능을 불러온다.
* 스크래치(Scratch 2.0)를 실행해 확장기능을 불러온다.


#shift 키를 누른 채로 메뉴에서 "파일"(또는 "File")을 누르고 "Import Experimental HTTP Extension" 메뉴를 누른다.
# shift 키를 누른 채로 메뉴에서 "파일"(또는 "File")을 누르고 "Import Experimental HTTP Extension" 메뉴를 누른다.
#Tello.s2e 파일을 열어 확장기능을 불러온다.
# Tello.s2e 파일을 열어 확장기능을 불러온다.
#성공적으로 불러왔다면 "추가 블록" 탭에 Tello Control이라는 메뉴와 그 아래 여러 블록들이 추가된다.
# 성공적으로 불러왔다면 "추가 블록" 탭에 Tello Control이라는 메뉴와 그 아래 여러 블록들이 추가된다.
#앞서 실행된 Tello.js가 문제없이 돌아가고 있다면 Tello Control이라는 글씨 옆에 초록불이 들어올 것이다. 빨간불이 들어온다면 Tello.js를 다시 실행해야 한다.
# 앞서 실행된 Tello.js가 문제없이 돌아가고 있다면 Tello Control이라는 글씨 옆에 초록불이 들어올 것이다. 빨간불이 들어온다면 Tello.js를 다시 실행해야 한다.


===코딩 가이드===
=== 코딩 가이드 ===
스크래치 드론 코딩을 시작하기 위한 몇 가지 안내 사항이다.
스크래치 드론 코딩을 시작하기 위한 몇 가지 안내 사항이다.


*코딩에 사용되는 명령 블록들은 다음과 같다:
* 코딩에 사용되는 명령 블록들은 다음과 같다:


{| class="wikitable mw-collapsible mw-collapsed"
{| class="wikitable mw-collapsible mw-collapsed"
110번째 줄: 100번째 줄:
|-
|-
|stop and hover
|stop and hover
|즉시 이동을 중단하고 제자리에 떠있는다. Tello EDU에서만 사용가능
|제자리에 떠있는다. Tello EDU에서만 사용가능
|stop
|stop
|-
|-
124번째 줄: 114번째 줄:
|}
|}


*코딩에 사용되는 읽기 전용 블록들은 다음과 같다:
* 코딩에 사용되는 읽기 전용 블록들은 다음과 같다:


{| class="wikitable mw-collapsible mw-collapsed"
{| class="wikitable mw-collapsible mw-collapsed"
148번째 줄: 138번째 줄:
|-
|-
|attitude pitch/roll/yaw
|attitude pitch/roll/yaw
|드론 방향
|드론 방향
|pitch/roll/yaw
|pitch/roll/yaw
|-
|-
171번째 줄: 161번째 줄:
|-
|-
|command response
|command response
|드론 응답 메시지. ok 또는 오류메시지 등이 저장된다.
|드론 응답 메시지. ok 또는 오류 메시지 등이 저장된다.
Tello EDU에서만 사용 가능
Tello EDU에서만 사용 가능
|없음
|없음
|}
|}


*코드 시작점은 "Events" 또는 "이벤트" 탭의 한 블록을 사용한다.
* 코드 시작점은 "Events" 또는 "이벤트" 탭의 한 블록을 사용한다.
*드론 비행 코드는 "takeoff"로 시작해서 "land"로 끝내는 것을 권장한다.
* 드론 비행 코드는 "takeoff"로 시작해서 "land"로 끝내는 것을 권장한다.
*비상시를 대비해 특정 키를 눌렀을 때 "emergency stop"이 실행되도록 코딩해놓는 것이 좋다.
* 비상시를 대비해 특정 키를 눌렀을 때 "emergency stop"이 실행되도록 코딩해놓는 것이 좋다.
*미션패드 관련 명령어와 "stop and hover", "command response" 명령어는 Tello 드론에서는 사용할 수 없으며 Tello EDU에서만 사용할 수 있으니 유의한다.
* 미션패드 관련 명령어와 "stop and hover", "command response" 명령어는 Tello 드론에서는 사용할 수 없으며 Tello EDU에서만 사용할 수 있으니 유의한다.
*(x, y, z) 좌표와 이동거리는 모두 ±20~500cm로 제한된다. 특정 축만 이동하지 않는 경우 (50,0,0)과 같이 좌표에 0을 사용할 수 있지만, (0, 0, 0)은 사용할 수 없다.
* (x, y, z) 좌표와 이동거리는 모두 ±20~500cm로 제한된다. 특정 축만 이동하지 않는 경우 (50,0,0)과 같이 좌표에 0을 사용할 수 있지만, (0, 0, 0)은 사용할 수 없다.
*속도는 10~100cm/s로 제한된다.
* 속도는 10~100cm/s로 제한된다.
*각도는 1~360°로 제한된다.
* 각도는 1~360°로 제한된다.
*fly a curve ~ 명령어에서 호의 반지름은 0.5~10m로 제한된다.
* fly a curve ~ 명령어에서 호의 반지름은 0.5~10m로 제한된다.
*명령어 간에 시간 간격을 두지 않아도 비행 자체에는 문제가 없지만, 명령어 전송과 명령어 실행 간에 시간차가 생기게 된다. 실제 명령 실행하는 데 걸리는 예상 시간 정도의 시간 간격을 두는 것을 권장한다. "제어" 탭의 "~초 기다리기" 또는 "Control" 탭의 "wait ~ seconds" 명령어를 통해 시간 간격을 둘 수 있다.
* 명령어 간에 시간 간격을 두지 않아도 비행 자체에는 문제가 없지만, 명령어 전송과 명령어 실행 간에 시간차가 생기게 된다. 실제 명령 실행하는 데 걸리는 예상 시간 정도의 시간 간격을 두는 것을 권장한다. "제어" 탭의 "~초 기다리기" 또는 "Control" 탭의 "wait ~ seconds" 명령어를 통해 시간 간격을 둘 수 있다.
 
===기타===
아래 사항들은 Tello 스크래치 확장기능의 구조를 분석한 것으로, 확장기능 코드에 오류가 발생해 원인을 분석해야 하거나 확장기능 블록을 번역/추가하려고 할 때 활용할 수 있을 것이다. 아마 볼 사람은 없을 것 같지만 그냥 [[안중원|내]]가 궁금해서 분석해봤다....
 
*'''Tello.js''': Tello 확장기능 스크립트인 Tello.js는 스크래치가 연결가능한 HTTP 서버와 드론과 통신하는 UDP 소켓을 개설해 스크래치와 드론을 중계한다.
**'''order 변수''': 명령어 큐를 저장하는 배열. 명령어 큐에서 명령어가 사라지는 순간 명령어가 실행된다.
**'''lock 변수''': 명령어 연쇄가 실행중임을 나타내는 부울 변수.
**'''osdData 변수''': 드론 상태와 response 등 스크래치에 전송할 읽기전용 데이터를 저장한다.
**'''sendMethod 함수''': 직접 UDP 통신을 통해 메시지를 보낸다. 패킷 손실을 막기 위해 같은 메시지를 여러번 보낸다.
**'''carryCMD 함수''': order[0]에 해당하는 메시지를 sendMethod를 통해 전송한다.
**'''sendCMD 함수''': order에 명령어를 추가한 후, 명령어 연쇄가 실행중이지 않다면(즉 !lock이면) 명령어 연쇄를 시작한다. 단, 스크래치에서 멈춤 버튼을 눌렀을 때 전송되는 reset_all 명령어는 무시하고, emergency, rc, stop 명령어는 즉시 실행하고 명령어 큐(order)를 비운다.
**'''client on "message"''': 드론으로부터 명령에 대한 응답을 받았을 때 실행된다. 실행된 명령을 큐(order)에서 지우고 carryCMD로 다음 명령을 실행한다.
**'''server on "message"''': 드론으로부터 드론 상태 데이터를 받았을 때 실행된다. osdData에 데이터를 저장한다.
**'''http''': 스크래치에서 오는 요청을 처리한다.
***poll: osdData에 저장된 데이터를 전송한다.
***reset: 큐(order)를 비운다.
***takeoff: command, mon, takeoff 명령어를 sendCMD를 통해 차례로 보내 드론을 초기화한다.
***그 외에는 sendCMD로 명령어를 그대로 보낸다.
**'''process on 'SIGINT'''': Ctrl+C로 프로그램을 종료할 때 실행된다. 소켓을 닫고 안전하게 종료한다.
*'''Tello.s2e''': Tello 확장기능의 명령어 블록을 정의하는 JSON 형식 파일이다. 각 명령어가 [" "/"r", "블록 명령어", "서버에 전송할 명령어", "기본 인수"] 형식으로 정리되어 있다. 예를 들어 <code>[" ", "fly to x %n cm y %n cm z %n cm with speed %n cm/s", "go", 50, 50, 0, 50]</code>이라는 코드가 나타내는 것을 다음과 같이 정리할 수 있다.
**'''<code>" "</code>''': 실행 블록이다. "r"은 읽기전용 변수 블록.
**'''<code>"fly to x %n cm y %n cm z %n cm with speed %n cm/s"</code>''': 스크래치에서 "fly to x [ 50 ] cm y [ 50 ] cm z [ 0 ] cm with speed [ 50 ] cm/s" 형태의 블록을 정의한다. [ ] 안에 직접 숫자를 입력할 수 있다. 특히 이 부분을 다음과 같이 한국어로 번역해 저장할 수 있는데, 이때 빈칸의 순서를 유지해야 한다: '''"(%n cm, %n cm, %n cm)까지 %n cm/s 속도로 이동"'''
**'''<code>"go"</code>''': 이 블록이 실행되면 Tello.js http 서버에 "go/50/50/0/50"과 같은 형태로 전송된다.
**'''<code>50, 50, 0, 50</code>''': 빈칸에 기본적으로 들어가는 숫자들이다.


==미션패드==
==미션패드==
추가예정
추가예정


==군집비행 코딩==
==군집비행==
 
추가예정
*''본 문단에서는 [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]를 통해 확인할 수 있습니다.''
 
===설치===
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://aka.ms/vcpython27 vcpython27]: Python2.7에서 일부 패키지를 내려받을 때 필요하다.
*[https://github.com/TelloSDK/Multi-Tello-Formation/archive/master.zip Multi-Tello-Formation]: 코드 전체를 압축파일로 내려받는다. 내려받은 압축파일은 원하는 위치에 압축을 풀어놓는다.
 
모든 항목을 내려받았다면 다음 순서에 따라 설치한다.
 
#Multi-Tello-Formation 폴더에서 Shift를 누른 채 마우스 오른쪽 버튼을 눌러서 나온 메뉴에서 "여기서 명령 창 열기" 또는 "여기서 PowerShell 창 열기"를 눌러 콘솔창을 실행한다.
#다음 명령어로 pip와 netifaces, netaddr 패키지를 설치한다.<syntaxhighlight lang="bat">
C:\Python27\python get-pip.py
C:\Python27\python -m pip install netifaces netaddr
</syntaxhighlight>
 
===준비===
다음 순서에 따라 드론을 군집비행에 맞게 준비한다. Multi-Tello-Formation 폴더에 콘솔은 미리 켜 놓는다.
 
#Multi-Tello-Formation 폴더의 formation_setup.py의 26번째 줄을 다음과 같이 수정한다. 이때 와이파이의 이름(SSID)과 비밀번호에는 공백문자(' ')나 언더바('_')가 있으면 안 된다. 과학실 및 학교 와이파이 이름에는 대부분 언더바가 들어가므로, 스마트폰 핫스팟을 켜고 핫스팟의 이름과 비밀번호를 입력하는 것이 좋다. 핫스팟은 군집 비행을 준비하고 실행하는 동안 계속 켜놓는다.<syntaxhighlight lang="python2" line="1" start="26">
set_ap('Wifi이름', 'Wifi비밀번호')
</syntaxhighlight>
#노트북 와이파이를 코딩하려는 드론에 연결한다.
##전원 버튼을 눌러 드론을 켠다. 드론이 무지개빛으로 반짝이다가 노란불이 빠르게 깜빡이는 상태가 되면 와이파이를 연결할 수 있다.
##노트북 와이파이를 드론에 연결한다. 와이파이 이름은 드론의 배터리 넣는 칸 안에 적혀있다. 현재 과학실의 Tello EDU 드론은 와이파이 이름(SSID)과 시리얼 ID가 라벨링되어있지 않은데, 라벨링하여 사용하길 추천한다.
#다음 명령어를 통해 formation_setup.py를 실행한다.<syntaxhighlight lang="bat">
C:\Python27\python formation_setup.py
</syntaxhighlight>성공적으로 실행됐다면 콘솔에 다음 메시지가 뜬다. 동시에 드론 3초 뒤 재부팅돼서 처음 켤 때처럼 노란불이 깜빡이는 상태가 된다.<syntaxhighlight lang="text">
sending command command
from ('192.168.10.1', 8889): ok
sending command ap [wifi이름] [wifi비밀번호]
from ('192.168.10.1', 8889): OK,drone will reboot in 3s
</syntaxhighlight>
#2~3번 과정을 모든 군집비행 드론에 대해 반복한다.
#드론들을 연결시킨 와이파이(또는 스마트폰 핫스팟)에 노트북도 연결한다.
#ip.txt의 내용을 다음과 같이 변경한다.<syntaxhighlight lang="text">
scan [드론 개수]
</syntaxhighlight>
#다음 명령어로 준비한 드론이 모두 연결되었는지 확인한다.<syntaxhighlight lang="bat">
C:\Python27\python multi_tello_test.py ip.txt
</syntaxhighlight>
 
===실행===
메모장으로 코딩을 완료한 뒤 Multi-Tello-Formation 폴더에 저장했다면 다음 명령어로 군집비행을 실행할 수 있다.<syntaxhighlight lang="bat">
C:\Python27\python multi_tello_test.py [코드파일이름]
</syntaxhighlight>
 
===코딩 가이드===
군집비행 코드는 일반적으로 다음의 구조를 이룬다:
{| class="wikitable"
!
!코드
!동작
!예제
|-
|1
|<code>scan [N]</code>
|드론을 [N]개 찾는다.
|<code>scan 2</code>
|-
|2
|<code>battery_check [N]</code>
|배터리가 [N]% 미만이면 종료한다.
|<code>battery_check 20</code>
|-
|3
|<code>correct_ip</code>
<code>[N1]=[SN1]</code>
 
<code>[N2]=[SN2]</code>
 
<code>…</code>
|시리얼 번호가 [SN]인 드론의 번호를 [N]으로 정한다.
|<code>correct_ip</code>
<code>1=ABCD1234ABCD12</code>
 
<code>2=EFGH5678EFGH56</code>
|-
|4
|<code>[비행 명령어]</code>
|군집 비행 동작을 지정한다.
|<code>*>takeoff</code>
<code>sync 10</code>
 
<code>1>cw 360</code>
 
<code>2>ccw 360</code>
 
<code>sync 10</code>
 
<code>*>land</code>
|}
비행 명령어의 종류는 다음과 같다:
{| class="wikitable"
!코드
!동작
!예제
|-
|<code>[N]>[명령어]</code>
|[N]번 드론에 [명령어]를 보낸다. [N] 자리에 <code>*</code>이 들어가면 모든 드론에 [명령어]를 보낸다.
|<code>1>forward 100</code>
<code>*>land</code>
|-
|<code>[N]>Re [명령어]</code>
|<code>[N]>[명령어]</code>와 동작은 같지만 패킷 손실을 방지하기 위한 내부 처리가 추가로 이루어진다.
|<code>2>cw 180</code>
|-
|<code>sync [SEC]</code>
|모든 드론의 이전 명령이 완료될 때까지 [SEC]초 동안 기다린다.
|<code>sync 20</code>
|-
|<code>delay [SEC]</code>
|[SEC]초 동안 아무 동작 없이 기다린다.
|<code>delay 10</code>
|}
[명령어]에 들어가는 자세한 비행 명령은 [[스콜라/드론 매뉴얼#Tello SDK|Tello SDK]] 문단 참조.
 
==Tello SDK==
본 문단의 SDK 명령어 목록은 [https://www.ryzerobotics.com/kr/tello-edu/downloads Tello EDU 다운로드] 페이지의 '''SDK 2.0 User Guide'''를 참고했다. 아래의 일부 명령어는 Tello 드론에는 실행할 수 없다.
{| class="wikitable mw-collapsible mw-collapsed"
!SDK 명령어
!동작
!비고
|-
|takeoff
|이륙
|
|-
|land
|착륙
|
|-
|streamon
|영상 스트리밍 활성화
| rowspan="2" |[[스콜라/드론 매뉴얼#영상 스트리밍|영상 스트리밍]] 문단에서 상술.
|-
|streamoff
|영상 스트리밍 비활성화
|-
|emergency
|프로펠러를 즉시 멈춘다.
|
|-
|up/down/left/right/forward/backward [x]
|상/하/좌/우/앞/뒤로 [x]cm만큼 이동.
|20 ≤ [x] ≤ 100
|-
|cw/ccw [x]
|[x]°만큼 시계방향/반시계방향 회전.
|1 ≤ [x] ≤ 360
|-
|flip l/r/f/b
|좌/우/앞/뒤로 뒤집기
|
|-
|go [x] [y] [z] [speed]
|현재 위치로부터 ([x] cm, [y] cm, [z] cm)만큼
[speed]cm/s로 이동.
| -500 ≤ [x]~[z] ≤ 500
10 ≤ [speed] ≤ 100
 
[x]~[z]가 동시에 -20~20일 수 없다.
|-
|stop
|즉시 이동을 중단하고 제자리에 떠있는다.
Tello EDU에서만 사용가능
|
|-
|curve [x1] [y1] [z1] [x2] [y2] [z2] [speed]
|현위치에서 ([x1]cm, [y1]cm, [z1]cm)를 지나
([x2]cm, [y2]cm, [z2]cm)까지
 
호(arc) 궤도로 [speed]cm/s로 이동.
| -500 ≤ [x1]~[z2] ≤ 500
10 ≤ [speed] ≤ 100
 
x~z가 동시에 -20~20일 수 없다.
|-
|go [x] [y] [z] [speed] [mid]
| colspan="2" rowspan="3" |[[스콜라/드론 매뉴얼#%EB%AF%B8%EC%85%98%ED%8C%A8%EB%93%9C|미션패드]] 문단에서 상술. Tello EDU에서만 사용가능
|-
|curve [x1] [y1] [z1] [x2] [y2] [z2] [speed] [mid]
|-
|jump [x] [y] [z] [yaw] [speed] [mid1] [mid2]
|-
|speed [x]
|속도를 [x]cm/s로 설정.
|10 ≤ [x] ≤ 100
|-
|rc [a] [b] [c] [d]
|게임패드 입력을 재현.
[a]=좌우, [b]=앞뒤, [c]=상하, [d]=각도(yaw)
| -100 ≤ [a]~[d] ≤ 100
|-
|wifi [ssid] [pass]
|드론의 와이파이 이름을 [ssid], 비밀번호를 [pass]로 설정.
|
|-
|mon
|미션패드 감지 활성화
|
|-
|moff
|미션패드 감지 비활성화
|
|-
|mdirection 0/1/2
|미션패드 감지 모드 설정. 0=아래, 1=앞, 2=아래+앞
|
|-
|ap [ssid] [pass]
|[[스콜라/드론 매뉴얼#군집비행|군집비행]]에서 연결할 와이파이 이름을 [ssid],
비밀번호를 [pass]로 설정.
|
|-
|speed?
|현재 속도(cm/s) 출력
|
|-
|battery?
|현재 배터리 잔량(%) 출력
|
|-
|time?
|비행 시간 출력
|
|-
|wifi?
|와이파이 SNR(전송속도의 척도) 출력
|
|-
|sdk?
|SDK 버전 출력
|
|-
|sn?
|드론 시리얼 번호 출력
|
|}
 
==Tello 와이파이 초기화==
드론의 전원을 켠 뒤, 전원 버튼을 5초간 누른다. 지시등이 꺼졌다가 다시 켜져 노란불이 깜빡이면 초기화된 것이다. 이때 드론의 와이파이와 비밀번호가 초기화되는 것은 물론, 군집비행이나 ap 명령어로 설정한 핫스팟 연결도 해제된다.
 
==Tello 지시등==
Tello 지시등의 색깔은 Tello의 다양한 상태를 나타낸다.
 
*알록달록하게 깜빡임: 전원을 켜고 자가진단 실행 중.
*녹색으로 두번씩 깜빡임: [[스콜라/드론 매뉴얼#VPS|VPS]] 작동중.
*노란색으로 천천히 깜빡임: VPS 사용 불가.
*노란색으로 빨리 깜빡임: 와이파이 연결 신호 끊어짐.
*빨간색으로 천천히 깜빡임: 배터리 부족.
*빨간색으로 빨리 깜빡임: 배터리 매우 부족.
*일정한 빨간색: 심각한 오류.
 
==VPS==
Vision Positioning System의 약자로, 카메라에 찍힌 영상을 통해 기체의 위치를 조정하는 모드이다. VPS 모드가 비활성화되는 조건 추가예정.

통진고위키에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다(자세한 사항은 통진고위키:저작권 문서를 보세요). 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 편집 도움말 (새 창에서 열림)