우주탐사와 세계일주의 꿈

이야기하기2018.03.06 11:35파이팅건맨

뜬금없이 제목이 우주까지 가 버렸습니다.

왜 글을 이리도 거창하게 시작하나 싶은 분들이 계실까 봐 두렵네요^^




(언젠가는 그러겠지만) 우주는 아니더라도 드론을 세계일주 시키는 것이 DronePlay의 목표입니다.

그를 위해서 존재하거나 생겨날 문제점들을 계속해서 파악하고 대안들을 생각하고 있습니다.

지금은 사회나 법적인 문제들보다는 기술적인 것들을 생각하는 게 가장 쉬운 단계이기에 드론 기술의 현 수준과 한계점들을 계속해서 읽으며 나열하고 있습니다.

물론 당면해있는 기술적인 문제들의 해결도 쉽지 않습니다. 하지만 끊임없이 고민하고 해결을 위해 노력하고 있습니다.

그리고 그 수많은 문제들 중 하나를 아래와 같은 얘기로 풀어 보고자 합니다.


비행 중인 드론의 현재 위치를 실시간으로 파악하거나 제어하기 위한 통신 방법을 어떻게 구축할 것인가?


(DJI Mavic Pro 기준의) 드론에는 드론의 위치를 파악하기 위해서 GPS가 탑재되어 있습니다.

드론을 제어하는 조종기는 이 정보를 드론으로부터 수신해 사용자에게 보여 줍니다.




하지만, 전용 조종기는 (이론상) 드론을 7Km 범위까지만 제어할 수 있습니다. 전용 조종기가 아닌 스마트폰으로 드론을 조종할 경우는 WiFi 범위(약 80m)까지만 제어가 가능합니다.

이에, 드론은 조종기의 조종 범위를 벗어날 조짐이 보이면 행동을 멈추도록 프로그램되어 있습니다.

즉, 드론의 현재 위치를 수신받거나 조종하려면 드론이 전용 조종기나 스마트폰의 WiFi범위 안에 있어야 가능합니다.


아시다시피 저희는 드론을 독자적으로 세계일주 시키고 싶은데 조종기를 들고 드론을 따라다녀야 할 판입니다. T.T


열심히 쫓아 다녀야 겠지요... .




그래서 생각해 낸 방법이 아래와 같습니다.


0. 드론을 제어할 수 있는 DronePlay앱[각주:1]을 스마트폰에 설치한다

1. 그 스마트폰을 드론에 탑재한다

2. 집안의 PC에서 DronePlay앱을 LTE로 연결하여 제어한다


네, 그렇습니다. 이론상으로는 LTE 신호가 잡히는 모든 곳에서 드론이 비행할 수 있습니다.


DronePlay 앱



하지만 이 방법에는 문제가 있습니다. (WiFi에 연결이 되어 있는 상태가 아니라면 통신사의 문제로 인해[각주:2](?))스마트폰은 '서버'가 될 수 없습니다.

무슨 말인고 하니, 예를 들어 우리는 웹브라우저(클라이언트)를 이용해서 웹사이트(서버)에 접속합니다. 즉, 웹사이트는 아무런 행동을 하지 않고 있다가 웹브라우저가 접속을 해서 정보를 달라는 요청을 하면 응답으로 웹페이지를 내려보내 줍니다.

그리고 웹브라우저는 내려받은 웹페이지를 화면에 표시합니다. 이 같은 방식을 서버-클라이언트 간 통신이라고 칭합니다. 


클라이언트가 서버에 접속하기 전까지 서버는 클라이언트로 부터 정보를 받거나 전달할 방법이 없습니다



이런 이유로 서버에 새로운 정보가 업데이트되어 있어도 클라이언트가 서버에게 접속하기 전까지는 서버가 클라이언트에게 아무런 정보를 전달하거나 받을 수 없습니다.

'드론아 지금 어디에 있냐?', '드론아 지금부터 고도 100m로 비행해'라고 필요한 때에 즉시즉시 집안의 PC(이제부터는 그냥 PC)가 DronePlay앱에 접속해서 명령을 전달해야 하는데 스마트폰의 DronePlay앱이 서버가 될 수 없으니 이것 참 난감합니다. 

그렇다면, PC가 서버가 되면 문제의 해결이 가능할까요?


0. 드론의 DronePlay(클라이언트) 앱은 0.1초 간격으로 PC(서버)에 접속해서 현재의 위치 정보를 알리고 새로운 명령이 있는지 묻는다

1. PC가 보관하고 있는 명령이 없다고 답하면 그냥 연결을 끊는다

2. 만약, PC가 사용자로부터 새로운 명령을 받았을 경우 그 명령을 보관한다

3. 0.1초 후, PC에 DronePlay앱이 접속하면 PC는 보관하고 있던 명령들을 DronePlay앱에게 내려 보낸다

4. DronePlay앱은 PC와의 연결을 끊는다


이렇게 되면 드론 위치의 변화가 없거나 사용자로부터 새로운 명령이 없더라도 DronePlay앱은 0.1초마다 무조건 PC에 연결을 하고 끊는 작업을 반복해야 합니다.

(물론, 정확하게 0.1초가 아닌 네트워크 상황에 따라 수초 이상까지도 지연이 발생할 겁니다)

이러면 어떤 문제가 생겨날까요? 네, 배터리가 심하게 소모될 겁니다.ㅠㅠ

그렇다면 그냥 집안의 PC와 DronePlay앱이 연결을 끊지 않고 있으면 문제가 해결되지 않을까요?
마찬가지입니다. 연결이 유지된다는 것은 스마트폰이 배터리의 소모를 줄이기 위한 '대기 모드'로 진입을 할 수 없다는 말과 같습니다. 즉, 배터리의 소모가 많아진다[각주:3] 말입니다. ㅠㅠ




그런데 말입니다. 우리는 페이스북에 새로운 포스트나 메시지가 도착했다는 사실을 페이스북 사이트에 접속하지 않아도 알 수 있습니다.

스마트폰에 설치되어 있는 페이스북(클라이언트앱)의 노티 메시지가 그 사실을 가르쳐 주니까요. 그렇다면 이 노티 메시지는 어떻게 우리에게 그 정보를 표시해 주는 걸까요?

조금 변태(?)스런 방식으로 이를 위해서 서버가 먼저 클라이언트에게 '업데이트된 정보가 있으니 내게 접속을 해서 정보를 받아가라'라는 신호를 보낼 수 있는 방법이 있습니다.

구글과 애플, 삼성 등에서 이 같은 방법을 사용할 수 있도록 Push Message Platform이라는 것을 제공합니다. 즉, 이 신호에 많은 양의 정보를 담아서 보내기는 부담스러우나 약간의 정보 - 클라이언트에게 서버의 변화를 알리기 위한 만큼 - 만을 전달하기에는 안성맞춤인 거죠.




심지어 스마트폰이 대기모드로 빠져 있는 상태에서도 이 신호는 받을 수 있습니다. 정리하자면 아래와 같습니다.


0. PC는 사용자로부터 (드론의 현재 위치 파악 혹은, 고도 변경 등의) 새로운 명령을 받았을 경우 DronePlay앱에게 Push Message를 보낸다

1. Push Message를 받은 DronePlay앱은 PC에 접속하여 현재 위치를 전달하거나 새로운 명령을 내려받아 드론의 비행을 제어한다

2. DronePlay앱은 PC와의 연결을 끊는다


오~ 무척 깔끔해 보입니다.

(또 한 번) 그런데 말입니다.ㅠㅠ 

안타깝게도 이 Push Message는 실시간성이 아닙니다[각주:4]. 무슨 말이냐고요?

PC가 'DronePlay앱에게 Push Message를 보내줘!'라는 명령을 Push Message Platform에게 보냈다고 해서 Platform이 명령을 받자마자 Push Message를 보낸다는 보장이 없습니다.

심하면 DronePlay앱은 수십 초 후에 Push Message를 받을 수도 있습니다ㅠㅠ

하지만, 현재까지는 이 방법이 배터리 소모량을 줄이면서 효율적으로 드론을 제어할 수 있는 통신 방식처럼 느껴집니다.

자... 여기까지 읽으셨다면, '우주탐사'라는 말이 왜 이글의 제목에 포함되어 있는지 감이 오시는 분들도 계실 겁니다^^

드론은 분명히 우주가 아닌 지구 위를 떠 다닐 것임에도 불구하고 지상에 있는 '제어센터'와의 통신에 큰 시간차를 가지게 됩니다.

그러다 보니, '예측'과 '시간'을 근간으로 드론에게 명령을 내릴 수밖에 없습니다.

이를테면, '11시 05분 12초 10밀리 초쯤에는 위도 x, 경도 y쯤에 위치할 테니 여기서 고도와 방향을 이렇게 저렇게 변경하도록 명령을 미리 전송해 놓자'라는 식으로 말입니다.


출처: https://www.jpl.nasa.gov/news/news.php?feature=6559


마치, 화성 탐사를 위해 발사된 '큐리오시티[각주:5]'에게 명령을 보내면 15분 후에 그 결과를 알 수 있는 것과 비슷해 보입니다.

(명령 하나하나에 엄청난 공을 들여야 할 것 같습니다^^)

물론, 배터리 하나로 드론을 세계 일주시키는 것은 현재로서는 불가능합니다. 하지만 각 나라마다, 동네마다 조력자가 있다면 드론을 그들에게 착륙시켜 배터리의 교환을 받거나 충전을 받을 수 있을 겁니다.

그렇다 하더라도 긴 비행시간과 안정적인 통신은 필수가 될 것입니다. 그래서 더욱, 배터리의 소모를 최소화 화면서 비행을 길 게 할 수 있는 아이디어가 필요합니다.

DronePlay의 꿈은 언제나 많은 분들의 도움이 필요하다는 얘기입니다.

그래서 다시 한번 여러분들의 도움을 기다리고 있다고,

DronePlay는 여전히 꿈을 실현하기 위해 오늘도 고민하고 있다고 맺음말을 완성해 봅니다^^



* 덧붙임.

LTE로 제어할 수 있는 드론을 파는 곳이 있습니다. 물론, 그런 제품을 가져다가 그냥 날릴 수도 있겠지요. 하지만, 위와 같이 문제를 해결해 가는 것이 더 큰 의미를 가진다고 생각합니다. 돈으로 해낸다면 드론을 '세계일주'시키는 것이 무슨 의미가 있을까요?







 

  1. http://code.droneplay.io [본문으로]
  2. http://d2.naver.com/helloworld/111111 [본문으로]
  3. https://stackoverflow.com/questions/11789407/socket-connections-and-polling-which-is-a-better-solution-in-terms-of-battery-l [본문으로]
  4. https://eladnava.com/google-cloud-messaging-extremely-unreliable/ [본문으로]
  5. http://www.bloter.net/archives/122784 [본문으로]
블로그 주인 사진AuthorDronePlay
드론을 세계일주 시키는 꿈을 꾸는 곳!