본문 바로가기
파이썬

파이썬으로 드론 조종하기 (키보드)

by ㈜㎹Ω∞ 2022. 8. 3.
728x90

키보드의 키를 활용해서 드론을 조종해보겠습니다. keyboard모듈을 이용합니다. pip install keyboard를 해서 keyboard를 설치합니다.

 

기본 사용

 

from time import sleep
import keyboard

while True:
    print(keyboard.read_key())	# 어떤키를 눌렀는지 확인
    sleep(0.01)
    if keyboard.is_pressed('esc'):	# "키" 누르면 
        break	# 반복문 빠져나옴
    sleep(0.01)

print("esc키를 눌렀습니다.")	# 출력문

 

  • keyboard.read_key() : 어떤 키를 눌렀는지 확인합니다.
  • keyboard.is_pressed('esc'): : 키를 눌렀다면 True와 False를 사용합니다.
  • break : 반복문을 빠져나옵니다.

 

키보드 조종

 

from time import sleep
from e_drone.drone import *
from e_drone.protocol import *
import keyboard
    
while True:
    if keyboard.is_pressed("1"):
        print("이륙")
        sleep(1)
        drone.sendTakeOff()
        sleep(1)
        drone.sendControlWhile(0, 0, 0, 0, 2000) 
    elif keyboard.is_pressed("0"):
        print("착륙")
        drone.sendLanding()
        sleep(1)
        drone.sendLanding()
        sleep(1)
        break
    elif keyboard.is_pressed("5"):
        print("제자리")
        drone.sendControl(0, 0, 0, 0)
    elif keyboard.is_pressed("w"):
        print("위로")
        drone.sendControl(0, 0, 0, 30)
    elif keyboard.is_pressed("s"):
        print("아래로")
        drone.sendControl(0, 0, 0, -30)
    elif keyboard.is_pressed("a"):
        print("왼쪽회전")
        drone.sendControl(0, 0, 30, 0)
    elif keyboard.is_pressed("d"):
        print("오른쪽회전")
        drone.sendControl(0, 0, -30, 0)
    elif keyboard.is_pressed("up"):
        print("직진")
        drone.sendControl(0, 30, 0, 0)
    elif keyboard.is_pressed("down"):
        print("뒤로")
        drone.sendControl(0, -30, 0, 0)
    elif keyboard.is_pressed("Right"):
        print("오른쪽")
        drone.sendControl(30, 0, 0, 0)
    elif keyboard.is_pressed("Left"):
        print("왼쪽")
        drone.sendControl(-30, 0, 0, 0)

 

  • 1을 누르면 이륙 (drone.sendTakeOff())
  • 0을 누르면 착륙 (drone.sendLanding())
  • w를 누르면 위로 이동 (Throttle값 +)
  • s를 누르면 아래로 이동 (Throttle값 -)
  • a를 누르면 왼쪽으로 회전 (Yaw값 +)
  • d를 누르면 오른쪽으로 회전 (Yaw값 -)
  • 키보드 위를 누르면 앞으로 이동 (Pitch값 +)
  • 키보드 밑으로 누르면 뒤로 이동 (Pitchr값 -)
  • 키보드 오른쪽을 누르면 오른쪽으로 이동 (Roll값 +)
  • 키보드 왼쪽을 누르면 왼쪽으로 이동 (Roll값 -)

 

def eventTrim(trim):
    print("{0}, {1}, {2}, {3}".format(trim.roll, trim.pitch, trim.yaw, trim.throttle))


if __name__ == '__main__':
    drone = Drone()
    drone.open("com5")
    drone.setEventHandler(DataType.Trim, eventTrim)
    drone.sendTrim(0, 0, 0, 0)
    sleep(1)
    drone.sendRequest(DeviceType.Drone, DataType.Trim)

 

while문 위에 Trim 코드를 추가해서 미세조정도 가능합니다.

728x90

댓글