1. WCRC(자율 비행 드론코딩 종목)
1. WCRC(자율 비행 드론코딩 종목)
2. 대회 참여 가능 드론
** 이미지 클릭 시 해당 제품 페이지로 이동합니다.
1. 코딩 라이더 (ALC - 95)
2. 토리 드론(ITPLE)
3. 대회 규정
4. 파이썬 코딩 환경 구현하기
** 환경 설정 구현을 쉽게 하실 수 있도록 가이드 영상이 각 항목 상단에 첨부되어 있습니다
01. 파이썬 설치
** 파이썬 설치 영상 가이드
1-1. 파이썬 다운로드 페이지 접속 (좌측 이미지 클릭 시 해당 페이지로 이동합니다.)
1-2. 다운로드를 진행합니다.
✅ Add python.exe to PATH를 반드시 체크 하신 후, Install Now를 눌러요!
02. 코드 에디터 설치(Visual Studio)
** Visual Studio Code 설치 영상 가이드 (설치 완료 후 PC 재부팅 )
2-1. Visual Studio Code 다운로드 페이지 (좌측 이미지 클릭 시 해당 페이지로 이동해요.)
2-2. 설치를 진행합니다.
2-3. 추가 작업 선택 체크 후 다음 버튼을 눌러요. ( PATH에 추가 항목은 체크 필수 )
2-4. 설정을 확인한 후에 설치 버튼 클릭을 클릭해요.
2-5. 설치 완료 후 PC 재부팅
(PATH 값을 설정하려면 재부팅이 필요합니다)
2-6. Visual Studio Code 프로그램을 실행합니다.
Choose your theme을 클릭해서 체크한 후에 Mark Done을 클릭합니다.
03. Python Extension / workspace 설정
** VS Code Python Extension 설치 영상 가이드
Python Extension 설치
Visual Studio Code 왼쪽에 있는 Extensions 항목을 클릭 후 파이썬을 설치해요.
파이썬 프로젝트 Workspace(작업 공간) 지정
workspace(작업공간)을 지정해요.
파이썬 파일을 만들어요. (파이썬 파일의 이름은 반드시 .py로 끝나야 합니다 )
04. pip 드론 파이썬 라이브러리 다운로드
** 드론 파이썬 라이브러리 설치 영상 가이드
4-1. 프로그램 위쪽에 있는 Terminal 항목을 클릭한 후, New Terminal 항목을 클릭해요.
4-2. 터미널에 가지고 있는 드론에 맞는 명령어를 입력한 후에 엔터 키를 눌러요.
pip install CodingRider
4-3. Successfully installed 문구가 출력 된다면, 정상적으로 설치가 완료되었어요!
(Visual Studio Code 다운로드 후 PC를 다시 시작하지 않으면 터미널에서 오류 발생)
5. 파이썬 드론 코딩 준비
** 코딩라이더 페어링 방법 **
** 코딩라이더 페어링 영상 가이드 **
** 조종기 PC 연결 영상 가이드 **
드론을 조종하려면 특정 기능(라이브러리) 을 가져와야 해요.
우리가 요리할 때 재료를 준비하는 것처럼, 프로그램도 필요한 기능을 불러와야 해요!
1️⃣ sleep → 프로그램을 잠깐 멈추는 기능
예) 카운트다운을 만들 때
sleep(1) → 1초 동안 멈춤
2️⃣ 드론 조종 기능
CodingRider 패키지를 사용해야 해요.
코딩 라이더
from CodingRider.drone import *
👉 내 드론에 맞게 코드 수정하기!
from time import sleep # 프로그램을 잠깐 멈추는 기능
from CodingRider.drone import * # 드론을 조종하는 기능
from CodingRider.protocol import * # 드론과 컴퓨터가 대화하는 기능
if __name__ == "__main__":
drone = Drone() # 드론을 준비해요!
drone.open() # 드론과 컴퓨터 연결
🚀 이제 드론을 조종할 준비 완료!
드론을 조종하려면 컴퓨터와 연결해야 해요!
드론이 어느 포트에 연결되었는지 찾아서 프로그램에 입력하면 됩니다.
** 포트 찾기 가이드 영상
1️⃣ 윈도우 키를 누르거나, 제어판 → 장치 관리자로 들어가요.
2️⃣ 드론과 연결된 조종기의 포트를 확인해요.
3️⃣ 확인한 포트를 drone.open('여기에 포트 입력') 부분에 넣어요.
💡 예시 코드:
drone.open('컴퓨터에 연결된 드론 포트')
👉 '컴퓨터에 연결된 드론 포트' 부분을 꼭 바꿔주세요!
코딩 라이더 → USB-SERIAL CH340
👉 장치 관리자에서 위와 같은 이름을 찾아보세요!
👉 이름 옆에 적힌 COM 번호(예: COM3, COM14)를 코드에 입력하면 돼요.
🔹 포트 찾기 → 장치 관리자에서 드론이 연결된 포트 확인하기
🔹 코드 입력 → drone.open('찾은 포트 번호') 로 변경
🔹 연결 완료! 🚀
6. 파이썬 드론 코딩 시작하기
01. 반드시 작성해야 하는 코드
** 해당 코드는 드론 코딩을 시작하실 때 항상 기입해주셔야 합니다 **
from time import sleep
from CodingRider.drone import *
from CodingRider.protocol import *
if __name__ == '__main__':
drone = Drone()
drone.open('COM3')
** 드론 프로그램 코드 설명
"필요한 도구들을 가져오기"
우리가 요리할 때 재료가 필요하듯, 프로그램도 특정 기능을 사용하려면 필요한 도구(패키지)를 가져와야 해요.
from time import sleep → 프로그램이 잠깐 멈추도록 하는 기능이에요.
from CodingRider.drone import * → 드론을 조종할 수 있는 기능들을 가져와요.
from CodingRider.protocol import * → 드론과 컴퓨터가 정보를 주고받는 방법을 가져와요.
"프로그램을 시작하는 부분"
if __name__ == "__main__":
이 부분은 "자, 이제 프로그램을 시작하자!" 라는 뜻이에요. 이 코드가 있어야 컴퓨터가 프로그램을 실행해요.
"드론을 준비하기"
drone = Drone()
드론을 조종하려면 드론을 프로그램에 불러와야 해요.
이제 drone이라는 이름을 사용해서 드론을 조종할 수 있어요!
예) drone.sendClearBias() → 드론이 방향을 바로잡도록 도와줘요.
"드론과 컴퓨터 연결하기"
drone.open('COM3')
드론이 컴퓨터와 대화하려면 특정 연결 포트를 사용해야 해요.
여기서 'COM3'은 예시이므로 컴퓨터에 맞는 포트로 바꿔야 해요!
📌 어떻게 찾나요?
포트를 찾으려면 장치 관리자를 열고 드론이 연결된 곳을 확인하면 돼요.
💡 정리하면?
1️⃣ 필요한 도구(기능) 가져오기
2️⃣ 프로그램 시작하기
3️⃣ 드론 준비하기
4️⃣ 드론과 컴퓨터 연결하기
이제 드론을 조종할 준비 완료! 🚀
02. 작성한 코드 실행하는 방법
** 코드를 모두 작성했다면, 우측 상단의 삼각형(Run Python File) 버튼을 눌러 프로그램을 실행해요.
03. 파이썬으로 드론 조종하기 🚀
** 드론 비행 코딩 전 유의 사항
** 현재 드론을 코딩하고 있는 환경에 따라, 드론이 명령을 인식하지 못하는 경우가 존재합니다.
해당 이슈를 최소화 하기 위해, 명령을 순간적으로 여러 번 보낼 수 있는 반복문 사용을 권장합니다.
너무 많은 반복 횟수를 시행할 시, 드론에 오차가 발생할 수 있습니다.
추천 반복 횟수는 5회입니다.
예시) for i in range(5) :
drone.sendTakeOff()
** sleep() 명령으로 어느 정도의 대기 시간을 줄 지는 코드를 직접 작성하는 학생이 정합니다.
sleep() 시간을 줄이는 것은 대회 기록을 줄이기 위해서 좋은 방법이 될 수 있지만,
너무 적은 대기시간을 주면 드론이 안정화 되기 전에 다음 명령을 받게 되어서, 드론의 위치가 틀어질 수 있습니다.
따라서 적절한 대기시간 sleep()을 주는 것이 중요합니다.
드론을 프로그래밍으로 조종하는 방법을 배워볼까요?
이제부터 파이썬(Python)을 사용해 드론을 움직여 보겠습니다!
드론이 안정적으로 비행하려면 센서를 초기화하는 것이 중요해요.
센서를 초기화하면 드론이 기울어지지 않고 똑바로 날 수 있어요.
⚠️ 꼭! 평평한 바닥에서 초기화해야 해요!
기울어진 곳에서 초기화하면 드론이 정상적으로 비행할 수 없어요.
💡 drone.sendClearBias() → 드론의 방향 감지 센서를 초기화해요!
** 드론 센서 초기화 (sendClearBias) 사용 예제 코드
#sleep 함수 가져오기
from time import sleep
#코딩라이더 패키지 가져오기
from CodingRider.drone import *
from CodingRider.protocol import *
#메인 실행 부분
if __name__ == '__main__':
drone = Drone() # 드론 객체 생성
drone.open("드론과 연결되어있는 컴포트") # 드론과 연결된 컴포트를 열어주기
print("센서 초기화") # 콘솔에 센서 초기화라는 문구를 출력
drone.sendClearBias() # 드론의 자이로센서, 가속도 센서를 초기화
sleep(1) # 1초 대기
drone.close() # 드론과 연결했던 컴포트 다시 닫기
✅ 예제 코드 사용 영상
드론을 띄우고, 내리는 방법을 배워봐요!
drone.sendTakeOff() → 이륙
drone.sendLanding() → 착륙
** 드론 이착륙 (sendTakeOff / sendLanding) 사용 예제 코드
from time import sleep # sleep 함수 가져오기
# 코딩라이더 패키지 가져오기
from CodingRider.drone import *
from CodingRider.protocol import *
# 메인 실행 부분
if __name__ == '__main__':
drone = Drone() # 드론 객체 생성 후 drone 변수에 저장
drone.open("드론과 연결되어 있는 컴포트") # 시리얼 포트 연결
sleep(1)
print("이륙하기") # 이륙하기 메세지 출력
for i in range(5) :
drone.sendTakeOff() # 드론 이륙
sleep(5) # 5초 대기
print("착륙하기") # 착륙하기 메세지 출력
for i in range(5) :
drone.sendLanding() # 드론 착륙
sleep(5) # 5초 대기
# drone 포트 닫기
drone.close()
✅ 예제 코드 사용 영상
드론을 앞으로, 옆으로 이동하고 방향을 회전시킬 수도 있어요!
drone.sendControlPosition(X, Y, Z, 속도, 회전각, 회전속도) → 이동
각 값의 입력 범위는 다음과 같습니다.
-5 <= X, Y, Z <= 5 (단위 : m)
-1 <= 속도 <= 1 (단위 : m/s) **단, 하강의 경우 0.8m/s 이하 권장**
-360 <= 회전각 <= 360 (회전 각도)
0 <= 회전 속도 <= 180 (초당 회전 각)
** 드론 이동 (sendControlPositon) 사용 예제 코드
✅ 예제 코드: 전진, 우측 이동 후 착륙
from time import sleep # sleep 함수 불러오기
from CodingRider.drone import * # 코딩라이더 패키지 불러오기
from CodingRider.protocol import *
if __name__ == '__main__':
drone = Drone() # 드론 객체 생성
drone.open("드론과 연결된 포트") # 드론과 연결된 포트 열기
print("이륙!") # 이륙! 메시지 출력
for i in range(5) :
drone.sendTakeOff() # 이륙하기
sleep(5) # 5초 기다리기
print("앞으로 1미터 이동")
for i in range(5) :
drone.sendControlPosition(1.0, 0, 0, 0.5, 0, 0) # 전방으로 1m 이동
sleep(5)
print("오른쪽으로 1미터 이동")
for i in range(5) :
drone.sendControlPosition(0, -1.0, 0, 0.5, 0, 0) # 오른쪽으로 1m 이동
sleep(5)
print("90도 회전")
for i in range(5) :
drone.sendControlPosition(0, 0, 0, 0, -90, 90) # 시계방향 90도 회전
sleep(5)
print("착륙!")
for i in range(5) :
drone.sendLanding() # 착륙하기
sleep(5)
drone.close() # 열었던 드론 포트 닫기
✅ 예제 코드 사용 영상
드론에 불빛(LED)을 켜고 색깔을 바꿀 수 있어요! 🎨
drone.sendLightModeColor(모드, 밝기, 빨강, 초록, 파랑) → LED 변경!
각 값의 입력 범위는 다음과 같습니다.
0 <= 밝기, 빨강, 초록, 파랑 <= 255
** 드론 LED 변경 (sendLightModeColor) 사용 예제 코드
✅ 예제 코드: 색깔 바꾸기
from time import sleep # sleep 함수 불러오기
from CodingRider.drone import * # 코딩라이더 패키지 불러오기
from CodingRider.protocol import *
#메인 실행 부분
if __name__ == '__main__':
drone = Drone() # 드론 객체 생성
drone.open("드론과 연결된 포트") # 드론과 연결된 포트 열기
print("약한 빨간색 불빛") # 메시지 출력하기
# 밝기 30, 빨강 255, 초록 0, 파랑 0으로 LED를 변경
for i in range(5) :
drone.sendLightModeColor(LightModeDrone.BodyHold, 30, 255, 0, 0)
sleep(3) # 3초 대기하기
print("약한 파란색 불빛")
# 밝기 30, 빨강 0, 초록 0, 파랑 255로 LED를 변경
for i in range(5) :
drone.sendLightModeColor(LightModeDrone.BodyHold, 30, 0, 0, 255)
sleep(3)
print("강한 빨간색 불빛")
# 밝기 255, 빨강 255, 초록 0, 파랑 0으로 LED를 변경
for i in range(5) :
drone.sendLightModeColor(LightModeDrone.BodyHold, 255, 255, 0, 0)
sleep(3)
print("강한 파란색 불빛")
# 밝기 255, 빨강 0, 초록 0, 파랑 255로 LED를 변경
for i in range(5) :
drone.sendLightModeColor(LightModeDrone.BodyHold, 255, 0, 0, 255)
sleep(3)
drone.close()
✅ 예제 코드 사용 영상
04. 파이썬 드론 조종 응용하기! 🚀
파이썬(Python)을 사용해 드론을 움직여 보았습니다.
배운 함수들을 활용하여 조금 더 난이도 있는 동작을 해봐요!
앞으로 이동하면서 옆으로 같이 이동하거나,
앞으로 이동하면서 위로 이동하면 대각선으로도 움직일 수 있겠죠!
drone.sendControlPosition(X, Y, Z, 속도, 회전각, 회전속도)
X, Y, Z에서 본인이 움직일 축으로 2개 이상의 값을 넣기
from time import sleep # sleep 함수 불러오기
from CodingRider.drone import * # 코딩라이더 패키지 불러오기
from CodingRider.protocol import *
#메인 실행 부분
if __name__ == '__main__':
drone = Drone() # 드론 객체 생성
drone.open("드론과 연결된 포트") # 드론과 연결된 포트 열기
print("이륙!") # 이륙! 메시지 출력
for i in range(5) :
drone.sendTakeOff() # 이륙하기
sleep(5) # 5초 기다리기
print("오른쪽 앞으로 이동 좌표 : (1, -1, 0)")
for i in range(5) :
drone.sendControlPosition(1, -1, 0, 0.5, 0, 0) # 오른쪽 앞으로 이동
sleep(5)
print("왼쪽 위로 이동 좌표 : (0, 1, 1)")
for i in range(5) :
drone.sendControlPosition(0, 1, 1, 0.5, 0, 0) # 왼쪽 위로 이동
sleep(5)
print("착륙!")
for i in range(5) :
drone.sendLanding() # 착륙하기
sleep(5)
drone.close() # 열었던 드론 포트 닫기
✅ 예제 코드 사용 영상
드론이 일정 고도를 유지하면서, 일정 속도로 원을 그리는 비행을 원주비행이라고 해요.
일정한 회전속도로 회전하면서, 직선운동을 동시에 진행하면, 원주비행을 할 수 있어요!
drone.sendControlPosition(X, Y, Z, 속도, 회전각, 회전속도)
X, Y축 중 한개와 회전각, 회전속도에 필요한 값 넣기
from time import sleep # sleep 함수 불러오기
from CodingRider.drone import * # 코딩라이더 패키지 불러오기
from CodingRider.protocol import *
#메인 실행 부분
if __name__ == '__main__':
drone = Drone() # 드론 객체 생성
drone.open("드론과 연결된 포트") # 드론과 연결된 포트 열기
print("이륙!") # 이륙! 메시지 출력
for i in range(5) :
drone.sendTakeOff() # 이륙하기
sleep(4) # 5초 기다리기
print("원주가 4미터인 시계방향 원주 비행")
for i in range(5) :
drone.sendControlPosition(4.0, 0, 0, 1, -360, 90) # 시계방향 원주 비행
sleep(6)
print("원주가 4미터인 반시계방향 원주 비행")
for i in range(5) :
drone.sendControlPosition(4.0, 0, 0, 1, 360, 90) # 반시계방향 원주 비행
sleep(6)
print("반원의 둘레가 2미터인 시계방향 반원 비행")
for i in range(5) :
drone.sendControlPosition(2.0, 0, 0, 1, -180, 90) # 시계방향 반원 비행
sleep(6)
print("반원의 둘레가 2미터인 반시계방향 반원 비행")
for i in range(5) :
drone.sendControlPosition(2.0, 0, 0, 1, 180, 90) # 반시계방향 반원 비행
sleep(6)
print("착륙!")
for i in range(5) :
drone.sendLanding() # 착륙하기
sleep(5)
drone.close() # 열었던 드론 포트 닫기
✅ 원주비행 영상
드론에 불빛(LED)을 켜고 색깔을 바꿀 수 있어요! 🎨
이번에는 불빛이 일정한 밝기로 켜져있는게 아닌, 불빛이 밝아졌다 어두워졌다를 반복하는 명령을 배워보아요.
기존에는 밝기였던 값이, 주기로 변경되었어요!
주기가 짧을수록, 불빛의 강도가 빠르게 변해요
drone.sendLightModeColor(모드, 주기, 빨강, 초록, 파랑)
기존 모드(LightModeDrone.BodyHold를 LightModeDrone.BodyDimming으로 변경하기)
from time import sleep # sleep 함수 불러오기
from CodingRider.drone import * # 코딩라이더 패키지 불러오기
from CodingRider.protocol import *
#메인 실행 부분
if __name__ == '__main__':
drone = Drone() # 드론 객체 생성
drone.open("드론과 연결된 포트") # 드론과 연결된 포트 열기
print("느린 빨간색 불빛") # 메시지 출력하기
# 주기 5, 빨강 255, 초록 0, 파랑 0으로 LED를 변경
for i in range(5) :
drone.sendLightModeColor(LightModeDrone.BodyDimming, 5, 255, 0, 0)
sleep(5) # 3초 대기하기
print("느린 파란색 불빛")
# 주기 5, 빨강 0, 초록 0, 파랑 255로 LED를 변경
for i in range(5) :
drone.sendLightModeColor(LightModeDrone.BodyDimming, 5, 0, 0, 255)
sleep(5)
print("빠른 빨간색 불빛")
# 주기 1, 빨강 255, 초록 0, 파랑 0으로 LED를 변경
for i in range(5) :
drone.sendLightModeColor(LightModeDrone.BodyDimming, 1, 255, 0, 0)
sleep(5)
print("빠른 파란색 불빛")
# 주기 1, 빨강 0, 초록 0, 파랑 255로 LED를 변경
for i in range(5) :
drone.sendLightModeColor(LightModeDrone.BodyDimming, 1, 0, 0, 255)
sleep(5)
drone.close()
✅ 예제 코드 사용 영상
✅ 드론을 움직이려면?
1️⃣ 센서 초기화 → drone.sendClearBias()
2️⃣ 이륙 → drone.sendTakeOff()
3️⃣ 이동 → drone.sendControlPosition(X, Y, Z, 속도, 각도, 회전속도)
4️⃣ 착륙 → drone.sendLanding()
5️⃣ LED 색상 변경 → drone.sendLightModeColor(모드, 밝기, R, G, B)
이제 파이썬 코드로 드론을 자유롭게 조종해 보세요! 🚀✨
7. WCRC 자율주행 코스
** 주의사항 **
1. 실제 대회에서는 해당 코스들을 합쳐서 하나의 경기장으로 배치합니다.
2. 합쳐진 코스는, 대회 당일 경기장에서 공개될 예정입니다.
3. 지그재그 코스, 탐사비행 코스의 통과 형식은 자유입니다.
7-1 장애물 코스
원형 장애물 – 장애물 크기 : 지름 45cm / 높이 : 약 1.5m ~ 2.0m
사각형 장애물(상단) – 장애물 크기 : 1m * 0.5m / 높이 : 약 1m ~ 1.5m
사각형 장애물(하단) – 장애물 크기 : 1m * 1m / 높이 : 0m ~ 1m
원형 장애물 통과 시 15점 부여(부딪히며 통과해도 인정)
사각형 장애물(상단) 통과 시 10점 부여(부딪히며 통과해도 인정)
사각형 장애물(하단) 통과 시 5점 부여(부딪히며 통과해도 인정)
미통과 및 실패 - 기본점수 3점 부여
✅ 장애물 코스 이미지
✅ 원형 장애물 통과 예시 영상
✅ 사각형 장애물 통과 예시 영상
7-2 지그재그 코스(기둥 3개 - 최대 15점)
정상적으로 기둥 통과 시 기둥 당 5점 부여
기둥과 부딪힐 시 기둥 당 3점 부여
기둥을 통과하지 못할 시 기본점수 1점 부여
기둥 세 개를 하나의 직선으로 생각했을 때, 드론이 그 직선을 지나가면서 통과해야 점수로 인정된다.
기둥 당 한번의 방향(기둥 3개 - 총 3회)이 바뀌어야 한다.
✅ 지그재그 코스 이미지
✅ 지그재그 코스 통과 예시 영상
7-3 탐사비행 코스
기둥을 중심으로 비행 시 10점 부여
기둥과 부딪힐 시 5점 부여
미실행 및 실패 시 기본점수 2점 부여
✅ 탐사비행 코스 이미지
✅ 탐사비행 코스 통과 예시 영상