박봉달의 개발생활

<드론 프로그래밍>#3 DJI TELLO 라이브러리 기본 기능 구현 본문

Projects/Drone

<드론 프로그래밍>#3 DJI TELLO 라이브러리 기본 기능 구현

박봉달 2021. 8. 23. 20:56
728x90

안녕하세요, 저번 시간에 새로운 프로젝트를 만들어 dji tello 라이브러리 임포트를 진행하였고, 개발자의 깃헙에 들어가 간단한 소개까지 진행했었습니다. 오늘은 Dji Tello 라이브러리에 존재하는 여러 기능을 소개하고 직접 드론을 노트북과 연결하여 파이썬으로 조작해보도록 하겠습니다.

그럼 함께 보시죠!


시작에 앞서 저번 포스팅 복습

우선 저번 시간에 개발자의 깃헙 사이트를 들어가서 어떤 것들이 가능한지 확인해보셨던 것, 기억하시나요? 저번 포스팅의 일부를 잠깐 발췌하여 다시 보여드리자면, 아래와 같습니다.

- connect : 드론을 연결

- takeoff : 이륙하기

- move_left : 왼쪽으로 이동

- rotate_counter_clockwise : 반시계 방향으로 회전

- move_forward : 앞으로 이동

- land : 착륙하기

오늘은 직접 파이썬 파일을 만들어서 드론을 연결하고, 직접 코드를 작성하여 간단한 기능을 구현해보도록 하겠습니다. 그럼 시작하시죠!


1. 드론을 노트북과 연결하기

1) 라이브러리 임포트하기

우선 dji 라이브러리를 사용하기 위해서는 코드 맨 윗줄에 임포트 해주는 과정이 필요합니다. 한마디로 이 라이브러리를 작업하고 있는 파일에서 사용하겠다 라는 말입니다.

from djitellopy import tello 라고 작성하여 지난 포스팅에서 설치했던 라이브러리를 불러왔고,

from time import sleep 이라 작성하여 시간 관련한 라이브러리도 불러왔습니다.

2) 드론을 노트북과 연결하기

그럼 이제 기본 기능들을 소개해보도록 하겠습니다. 먼저는 파이썬에서 드론 객체를 생성해야합니다.

저는 제 드론 객체 이름을 drone 이라고 해주었고, tello.Tello() 를 사용하여 드론 객체를 생성해주었습니다.

드론 객체를 연결하는 connect() 메서드를 작성하여, 드론과 노트북이 통신하여 연결할 수 있도록 지시해주었습니다.

(- connect : 드론을 연결)

여기서 드론연결이 잘 되었는지 확인하기 위해 현재 드론의 배터리를 출력해보도록 하겠습니다. 드론의 배터리를 출력해주는 메서드는 .get_battery() 입니다.

이제 실제로 드론을 켜서 노트북과 연결하는 과정이 필요합니다. 드론을 작동시키면 아래와 같이 와이파이가 잡히게 되고, 노트북과 연결할 수 있습니다. 와이파이로 연결하면, 드론과 노트북이 통신할 수 있게되며, 파이썬 코드로 드론을 프로그래밍 할 수 있습니다.

 

드론이 연결되었다면, 작성한 코드에서 마우스 오른쪽 클릭하여 Run을 시켜봅시다. 동작시키게 되면 통신을 하면서 여러 출력이 진행되고, 마지막으로는 우리가 작성했던 코드인 드론의 현재 배터리량 61을 출력하게 됩니다. 현재 61%라는 의미겠죠. 이렇게 드론과의 연결을 성공하였습니다.


2. 기본 기능 구현하기

1) 드론 이착륙시키기

드론을 움직이려면 우선을 연결하고 이륙을 시켜야 합니다. 드론이 연결된 것을 확인한 후에는 takeoff() 메서드를 사용하여 드론을 이륙시킵시다. 반대로 드론을 착륙시키기 위해서는 land() 라는 메서드를 이용하여 착륙 가능합니다.

2) 드론 이동시키기

다음으로는 연결된 드론을 이동시켜보도록 하겠습니다. 드론을 움직일 때는 단순히 비행기처럼 앞으로만 나아가는 물체라 생각하면 안되고, 헬리콥터라고 생각해야합니다. 상하, 좌우, 앞뒤, 시계/반시계로 회전할 수 있는 비행체로 말이죠.

그렇게 동작시키기위해서 우리는 send_rc_control() 이라는 메서드를 사용하여 작동시켜보려고 합니다. 이 메서드는 여러 수치를 입력할 수 있습니다. 쉽게 생각하면 벡터를 생각하면 됩니다. 기체가 0이라는 원점에 있다고 생각하고 움직이는 것이죠

차례로 알려드리자면, 아래와 같습니다.

- left_right_velocity : (-50)은 왼쪽으로 50, (50)은 오른쪽으로 50

- forward_backward_velocity : (50)은 앞으로 50, (-50)은 뒤로 50

- up_down_velocity : (50)은 위로 50, (-50)은 아래로 50

- yaw_velocity : 시계/반시계 방향으로 기체 회전

간단히 짧은 코드를 작성해보았습니다. 여기서 send_rc_control(0,50,0,0)이 의미하는 것은 무엇일까요? 이륙한 뒤에 상하좌우로 움직이지 않고 앞으로만 50 이동한 후에 대기했다가 착륙하겠다는 의미입니다. sleep(2)는 2만큼 잠시 대기하겠다는 코드입니다. 한번 실행시켜보세요, 실제로 이륙하고 앞으로 움직였다가 멈춰서 착륙하는 것을 볼 수 있습니다.

여기서 다른 방향으로 움직이는 코드를 추가하면 어떨까요?

앞으로 움직이는 send_rc_control(0,50,0,0) 이후에 send_rc_control(-30,0,0,0)을 추가로 작성해주었습니다. 이는 왼쪽으로 30만큼 이동하라는 코드입니다. 한번 실행시켜볼까요?

앞뒤 좌우로 움직이는 코드를 작성해보았으니 이젠 회전시켜보도록 하겠습니다. yaw_velocity를 30으로 만들어주면 어떻게 될까요? 실행시켜보세요. 시계방향으로 30정도만큼 움직이는 것을 알 수 있습니다. 이젠 기본적인 기능 구현이 완료되었습니다. 드론을 상하, 좌우, 앞뒤, 시계/반시계로 원하는 만큼 움직이게 프로그래밍 할 수 있게 되었습니다. 신기하지 않나요? 더욱더 신기한 기능들을 다음 시간에 알아보도록 하겠습니다.


3. 마무리

혹시나 여러분들께서 이 메서드가 어떻게 동작하는지 궁금하시다면, 메서드()에 ctrl+마우스 왼쪽 클릭을 클릭하시면 아래와 같이 실제 작성된 메서드들을 볼 수 있습니다. 단순 이 라이브러리에서 뿐 아니라, 모든 라이브러리에서도 가능하니, 한번 궁금하시면 해보시면 되겠습니다 :)

다음 시간에는 카메라와 키보드를 활용하여 드론 프로그래밍을 진행해보도록 하겠습니다.

 

728x90
반응형