본문 바로가기
파이썬

파이썬으로 드론 조종하기 (미세조정과 이동)

by ㈜㎹Ω∞ 2022. 7. 29.
728x90

sendTakeOff()로 이륙 명령을, sendLanding()으로 착륙 명령을, sendControlWhile로 드론 이동방향을 정할 수 있습니다. 일단 드론을 공중에 띄운 다음 제대로 호버링을 하는지 테스트 후 문제가 없다면 앞, 뒤로 움직이는 코드를 작성합니다. 만약 호버링을 하는데 한쪽으로 기운다면 sendTrim으로 미세 조종합니다.

 

미세조정

 

from time import sleep
from e_drone.drone import *
from e_drone.protocol import *

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(0.1)
    drone.sendRequest(DeviceType.Drone, DataType.Trim)
    sleep(2)
    print("TakeOff")
    drone.sendTakeOff()
    sleep(2)
    print("Hovering")
    drone.sendControlWhile(0, 0, 0, 0, 10000)
    print("Go Stop")
    drone.sendControlWhile(0, 0, 0, 0, 1000)
    print("Landing")
    drone.sendLanding()
    sleep(0.01)
    drone.sendLanding()
    sleep(0.01)
    drone.close()

 

미세 조정은 sendTrim(0,0,0,0) 부분의 롤과 피치 값을 변경합니다. 순서대로 sendTrim(R, P, Y, T) R, P부분만 수정합니다.

 

 

이동, 회전

 

from time import sleep
from e_drone.drone import *
from e_drone.protocol import *

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(-13, 1, 0, 0)
    sleep(0.1)
    drone.sendRequest(DeviceType.Drone, DataType.Trim)
    sleep(2)
    print("TakeOff")
    drone.sendTakeOff()
    sleep(2)
    print("제자리")
    drone.sendControlWhile(0, 0, 0, 0, 5000)
    print("이동")   #앞으로
    drone.sendControlWhile(0, 15, 0, 0, 1500)
    print("멈춤") 
    drone.sendControlWhile(0, 0, 0, 0, 1000)
    print("이동")   #뒤로
    drone.sendControlWhile(0, -15, 0, 0, 1500)
    print("멈춤")
    drone.sendControlWhile(0, 0, 0, 0, 1000)
    print("이동")   #오른쪽
    drone.sendControlWhile(10, 0, 0, 0, 1500)
    print("멈춤")
    drone.sendControlWhile(0, 0, 0, 0, 1000)
    print("이동")   #왼쪽
    drone.sendControlWhile(-10, 0, 0, 0, 2000)
    print("멈춤")
    drone.sendControlWhile(0, 0, 0, 0, 1000)
    print("이동")   #왼쪽으로회전
    drone.sendControlWhile(0, 0, 30, 0, 1500)
    print("멈춤") 
    drone.sendControlWhile(0, 0, 0, 0, 1000)
    print("이동")   #오른쪽으로회전
    drone.sendControlWhile(0, 0, -30, 0, 1500)
    print("멈춤")
    drone.sendControlWhile(0, 0, 0, 0, 1000)
    print("이동")   #위로
    drone.sendControlWhile(0, 0, 0, 15, 1500)
    print("멈춤")
    drone.sendControlWhile(0, 0, 0, 0, 1000)
    print("이동")   #아래로
    drone.sendControlWhile(0, 0, 0, -15, 1500)
    print("멈춤")
    drone.sendControlWhile(0, 0, 0, 0, 1000)
    print("착륙")
    drone.sendLanding()
    sleep(0.01)
    drone.sendLanding()
    sleep(0.01)
    drone.close()

 

드론이 오른쪽과 뒤로 기울어서 롤과 피치를 -13과 1로 미세 조정했습니다. 또한 드론이 오른쪽, 왼쪽, 앞, 뒤로 왔다 갔다 하고 오른쪽 왼쪽으로 회전하고 위아래로 왔다 갔다 하는 코드를 작성했습니다. 어느 한 방향으로 이동했다면 1초 정도 멈췄다가 다시 이동해야 합니다. 마지막으로 안전하게 착륙하기 위해서 sendLanding() 명령은 두 번 사용했습니다.

728x90

댓글