6. 파이썬 드론 코딩 시작하기
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("이륙하기") # TakeOff 메세지 출력
for i in range(5) :
drone.sendTakeOff() # 드론 이륙
sleep(5) # 5초 대기
print("착륙하기") # Landing 메세지 출력
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)
-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("반원의 둘레가 4미터인 시계방향 반원 비행")
for i in range(5) :
drone.sendControlPosition(2.0, 0, 0, 1, -180, 90) # 시계방향 반원 비행
sleep(6)
print("반원의 둘레가 4미터인 반시계방향 반원 비행")
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)
이제 파이썬 코드로 드론을 자유롭게 조종해 보세요! 🚀✨