본문 바로가기

Robot/Robot Module

Python으로 조작하는 드론 CoDroneII - 드론 비행해보기 편~

로보링크의 CoDroneII(이하 코드론)를 소개한 하고, Python에서 드론의 센서 값을 읽는 코드를 설명했었습니다. 이제 남은 것은 날리는거죠^^. 코드론은 조종기를 PC와 연결하고 Python 모듈로 접근합니다.

이번에 파이썬으로 날릴 아이입니다. 이 각도가 얼짱각도^^ 코드론의 파이썬 API중 실제 이번에 사용할 명령의 매뉴얼도 읽어야 합니다.

파이썬의 코드론 모듈을 설치했다면, 위와 같이 필요 모듈을 import하고, drone과 통신을 엽니다.

이 명령만으로도 드론이 대략 1미터 높이로 부상을 합니다. 이 명령만으로도 호버링 상태를 유지합니다.

그리고, 이 sendControlPosition 명령은 공간상에서 x, y, z축 거리, 혹은 yaw 각도에 대한 명령을 인가할 수 있습니다. 위 명령은 우측으로 1미터를 이동하라는 명령입니다.

여기서 보이듯이 거리 혹은 각도 명령과 이동하는데 필요한 속도를 명령으로 주면 됩니다.

그리고 이 명령은 최초의 위치로 돌아와서 착륙하게 됩니다.

그리고, 드론과의 연결을 종료하면 됩니다. Python을 실행해서 위 코드를 입력해보면 아주 잘 명령을 수행하는 것을 알 수 있습니다. 여기까지 하나하나 입력하면서 드론의 움직임을 관찰하면 됩니다. 해당 동영상은 

입니다~~~ 괜찮죠 ㅎㅎㅎ

다음 단계는 동영상부터 보고 시작할까요?^^

넵.. 이 동작은 1m 부상하고, yaw 방향으로 각도를 틀었다가 다시 돌아오고, 착륙하는 코드입니다.^^

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

def eventAttitude(attitude):
    print("Yaw : ", str(attitude.yaw))

def count_down(count):
    for i in range(count, 0, -1):
        print("{0}".format(i))
        time.sleep(1)

drone = Drone()
drone.open()

current_time = 0.
start_time = time.time() 

drone.setEventHandler(DataType.Attitude, eventAttitude)

print("TakeOff")
drone.sendTakeOff()
count_down(3)

while True:
    if current_time < 5:
        command = 0
    elif current_time < 10:
        command = 15
    elif current_time < 15:
        command = 0
    else:
        print("-- Break!")
        break

    current_time = time.time() - start_time
    print(current_time, command)

    drone.sendControlPosition(0, 0, 0, 0, command, 5)
    time.sleep(0.1)

    drone.sendRequest(DeviceType.Drone, DataType.Attitude)
    time.sleep(0.1)

print("Return Home")
drone.sendFlightEvent(FlightEvent.Return)
count_down(3)

drone.close()

코드는 위와 같습니다. while 문에서 시간별로 0도, 15도, 다시 0도로 돌리게 했고, 이를 컨트롤 명령인 sendControlPosition으로 인가했습니다. 드론의 현 상태를 받아오기 위해 지난번에 소개한 sendRequest 명령을 이용했습니다. 어떤가요. 이정도면 드론 날리기 참 좋은 환경이죠?^^ 사실 이건 아주 중요한 부분입니다. 코드론은 바닥 상태에 따라 조금씩 차이가 있지만, 제가 꽤 근처에서 카메라로 촬영했음을 감안하면 정말 안정적으로 구동되고 있다는 것입니다. 이 덕분에 위 코드처럼 절차만 입력해도 구동이 되는 거죠..^^

아직 다음번 글을 정하진 않았지만, 다음 글은 아마도,

저 라즈베리파이 보드와 카메라가 장착된 아이를 이용해서 뭔가 재미난 것을  해보고 그걸 또 소개하는 글을 작성할 것 같네요.. ~^^ 다들 즐거운 주말 보내세용

반응형