직접 드론을 조립해 본 사람이라면 부품 장바구니에 담기는 숫자가 늘 똑같다는 걸 안다. 모터 네 개, 모터를 돌려 주는 전자 변속기(ESC) 네 개, 프로펠러 네 개다. 흔히 보는 쿼드콥터는 이 네 모터의 회전 속도를 미세하게 다르게 조절해서 몸체를 기울이고 방향을 튼다. 넷 중 하나만 고장 나도 그 자리에서 균형을 잃고 뒤집힌다. 그래서 모터 개수를 줄인다는 건 보통 설계 선택지에조차 들어가지 않는다.

그런데 이 당연한 숫자를 기어코 1까지 줄여 버린 사람이 나타났다. 엔지니어 조슈아 버드(Joshua Bird)는 “모터 하나로만 드론을 만들었다(I Built a Drone With Only One Motor)”는 영상에서 모터 딱 하나와 프로펠러 하나로 허공에 뜨고 원하는 방향으로 날아가는 드론을 시연했다. 날개 각도를 물리적으로 꺾어 주는 서보 모터조차 쓰지 않았다. 기계 구조는 극단적으로 단순하게 비워 두고 나머지 빈자리를 전부 제어 소프트웨어로 메운 것이다.

물론 물리적인 부품을 뺐다고 해서 비행에 필요한 일 자체가 증발한 건 아니다. 사라진 모터 세 개가 하던 일은 고스란히 다른 어딘가로 옮겨 갔다. 그 책임이 어디로 넘어갔고 그 대가로 무엇이 얼마나 까다로워졌는지 하나씩 뜯어본다.

모터 하나로는 왜 방향을 틀 수 없을까

쿼드콥터는 모터 네 개, 스와시플레이트 동축 헬리콥터는 모터 두 개와 서보 두 개, 단일 모터 드론은 모터 하나와 힌지 하나를 쓴다는 비교 그림
구동기가 줄어든 만큼 남은 하나가 더 많은 일을 맡는다.

공중에 떠 있는 기체를 원하는 대로 조종하려면 최소한 세 가지를 각자 따로 조절할 수 있어야 한다. 위로 뜨는 전체 양력, 앞뒤로 숙이는 기울기(pitch), 좌우로 갸우뚱하는 기울기(roll)다. 쿼드콥터는 앞뒤좌우 모터 네 개의 속도 조합으로 이 세 가지를 간단히 해결한다. 일반 헬리콥터는 메인 프로펠러가 하나뿐이지만 대신 ‘스와시플레이트’라는 복잡한 기계 장치를 쓴다. 회전하는 날개가 어느 위치를 지나가느냐에 따라 날개 각도를 실시간으로 비틀어 주는 관절 장치다. 펜실베이니아대 ModLab 연구실에 따르면 이런 방식의 소형 동축 헬리콥터도 결국 로터 모터 두 개와 서보 모터 두 개를 합쳐 최소 네 개의 구동기가 들어간다.

반면 아무 장치 없는 모터 하나만 달랑 있으면 조종자가 쥔 손잡이도 딱 하나뿐이다. 모터를 세게 돌리면 위로 솟구치고 약하게 돌리면 가라앉는다. 그게 전부다. 날개가 한 바퀴를 도는 내내 똑같은 각도로 바람을 가르니 기체의 한쪽만 더 세게 밀어 올려 기울일 방법이 도무지 없어 보인다.

여기에 골치 아픈 물리 법칙이 하나 더 끼어든다. 프로펠러가 한쪽 방향으로 세차게 돌면 작용·반작용 법칙 때문에 아래에 매달린 드론 몸체는 반대 방향으로 빙글빙글 돈다. 일반 헬리콥터가 꼬리에 작은 프로펠러를 하나 더 다는 이유다. 버드는 꼬리 모터 대신 몸체 아래에 공기 저항용 날개(핀)를 달아 이 회전 속도를 늦췄다. 그래도 몸체가 천천히 도는 것 자체를 막지는 못했는데 이게 뒤에서 또 한 번 큰 숙제를 던져 준다.

모터 속도를 순간적으로 흔들어 날개를 비튼다

한 바퀴 중 특정 구간에서 모터를 가속하면 날개가 뒤처지고 기울어진 힌지가 이를 날개 각도 변화로 바꿔 한쪽 양력이 커지는 과정을 보여주는 그림
언제 가속하느냐가 어느 쪽으로 기우느냐를 정한다.

마법 같은 해법은 프로펠러 한가운데의 연결부(허브)에 숨어 있다. 모터 축과 프로펠러 날개를 나사로 단단히 고정하는 대신 비스듬하게 기울어진 경첩(힌지) 하나로 느슨하게 이어 놓은 것이다. 이 상태에서 모터가 갑자기 확 빨라지면 날개는 자기 관성 때문에 모터 축보다 아주 살짝 뒤처지며 따라온다. 이때 경첩이 비스듬하게 깎여 있기 때문에 날개가 뒤로 젖혀지는 움직임이 자연스럽게 날개 각도(피치)를 세우는 움직임으로 바뀐다. 한쪽 날개의 각도가 가팔라지면 반대편 날개는 그만큼 누그러진다.

바람을 가르는 각도가 커진 날개는 당연히 그 순간 더 큰 양력을 만들어 낸다. 즉 날개가 한 바퀴를 도는 동안 어느 지점을 지날 때 모터를 순간적으로 가속하느냐에 따라 드론의 어느 쪽 귀퉁이가 위로 들릴지가 결정된다. 매 바퀴 정확히 같은 각도를 지날 때마다 가속과 감속을 반복해 주면 드론은 그 방향으로 부드럽게 기울어지며 날아간다. 모터 속도라는 손잡이 딱 하나로 위아래 높낮이와 사방 기울기를 동시에 조종하는 원리다.

사실 이 기발한 구조를 버드가 세상에 처음 내놓은 건 아니다. 2013년 IROS 로봇 학회에서 펜실베이니아대의 제임스 폴로스와 마크 임 연구팀이 이미 똑같은 원리를 논문으로 발표했다.

The hinge geometry couples blade lead-and-lag oscillations to a change in blade pitch.

당시 연구팀은 모터를 돌리는 기본 전압 신호 위에 프로펠러 회전 주기와 박자가 딱 맞아떨어지는 사인파 신호를 얹었다. 이 사인파의 진폭을 키우면 드론이 더 많이 기울고 파형의 시작 타이밍(위상)을 늦추거나 당기면 기우는 방향이 바뀐다. 버드의 프로젝트가 돋보이는 건 10여 년 전 학회 논문에 머물렀던 이 까다로운 구조를 방 안에서 실제로 안정적으로 날아다니는 소형 드론 한 대로 깔끔하게 구현해 내고 3D 프린팅 설계도와 펌웨어 코드까지 전부 오픈소스로 풀었다는 데 있다.

1초에 300번 가감속하는 극한의 타이밍 싸움

역기전력으로 속도를 추정하는 일반 ESC는 초당 약 50번에서 한계가 오고 자기식 인코더로 위치를 읽는 moteus는 초당 300번 가감속했으며 중간 마이크로컨트롤러를 없애 제어 경로를 줄였다는 비교 그림
추정 대신 직접 읽고 중간 단계를 없애서 시간을 벌었다.

이 비행 방식에서 가장 혹사당하는 부품은 다름 아닌 모터 제어기다. 버드가 만든 드론의 프로펠러 지름은 약 15cm인데 비행 중에는 분당 약 2만 바퀴(20,000 RPM)를 돈다. 1초에 무려 333바퀴를 도는 셈이다. 이 무서운 속도 속에서 매 바퀴 정확히 같은 방향을 지날 때마다 모터를 채찍질하려면 지금 이 순간 날개가 몇 도 위치에 있는지 실시간으로 꿰고 있어야 한다.

시중에서 파는 일반 드론용 변속기(ESC)로는 어림도 없는 일이다. 일반 ESC는 별도의 위치 센서 없이 모터가 돌 때 코일에 유도되는 미세한 전압(역기전력)을 읽어서 회전 속도를 어림잡는다. 눈으로 직접 보고 재는 게 아니라 간접 추정하는 방식이라 반응이 한 박자 늦을 수밖에 없다. TechEBlog 보도에 따르면 일반 ESC는 1초에 50번 이상 속도를 급격히 바꾸려 들면 박자를 놓치고 모터가 헛돌아 버린다. 그래서 버드는 로봇 관절에 주로 쓰는 ‘moteus’ 제어기를 가져다 붙였다. 자석 센서(자기식 인코더)로 모터 축의 절대 위치를 직접 읽어 내는 제어기인데, 덕분에 1초에 300번 넘게 모터를 가속하고 감속하는 묘기를 부릴 수 있었다.

처음 프로토타입을 만들 때는 비행 제어 보드와 모터 제어기 사이에 통역을 맡는 별도의 마이크로컨트롤러를 하나 더 끼워 넣었다. 그러다 나중에 양쪽 오픈소스 펌웨어(ArduPilot과 moteus)를 직접 뜯어고쳐서 두 보드가 중간 다리 없이 곧바로 고속 통신을 주고받게 만들었다. 통역 단계를 없애자 신호 지연이 확 줄어든 것은 물론이고 기체 무게와 제작비까지 한꺼번에 아낄 수 있었다.

초고속으로 도는 기계 특유의 진동 문제도 만만치 않았다. 초기 모델은 약 160Hz 대역에서 생기는 심한 공진 때문에 허구한 날 바닥으로 곤두박질쳤다. 원인을 찾으려고 버드는 프로펠러 회전 주기에 딱 맞춰 카메라 플래시를 터뜨리는 스트로보스코프 기법을 썼다. 초당 300번 도는 날개를 정지 화면처럼 찍어 놓고 보니 날개 재질이 물러서 휘청거리는 게 범인이었다. 훨씬 단단한 소재로 날개를 다시 뽑아 끼우자 거짓말처럼 진동이 잡혔다. 결국 모터 세 개를 덜어 낸 대가는 남은 부품 하나를 마이크로초 단위의 오차도 없이 정밀하게 다뤄야 한다는 가혹한 조건이었다.

아직은 방 안 벽에 붙은 등대를 보고 난다

지금은 벽에 단 적외선 신호원을 기준점으로 삼아 방향을 알고 다음 단계에서는 카메라로 주변 사물을 기준점으로 삼아 실외 비행을 노린다는 비교 그림
몸체가 도는 드론에게는 "앞"을 알려 줄 고정된 기준이 필요하다.

하지만 칼 같은 모터 타이밍만으로는 문제가 다 풀리지 않았다. 앞서 말했듯 이 드론은 비행 내내 몸체가 프로펠러 반대 방향으로 천천히 돈다. 몸체가 계속 도니 드론 입장에서는 지금 자기가 방 안의 어느 쪽을 바라보고 있는지 방향 감각을 잃어버리기 일쑤였다. 조종기에서 “앞으로 가라”는 명령을 내려도 지금 어디가 ‘앞’인지 모르니 엉뚱한 방향으로 날개를 기울이다 추락하곤 했다.

이 문제를 풀려고 버드는 방 벽면에 적외선 신호기(비콘)를 하나 붙여 두고 드론 몸체에는 적외선 수신 센서를 달았다. 등대 불빛을 보고 배가 자기 방향을 잡듯, 회전하는 드론이 벽에 고정된 적외선 불빛을 기준으로 삼아 매 순간 ‘앞쪽’이 어디인지 계산하게 한 것이다. 지금 공개된 버전은 이 적외선 등대가 있는 실내에서만 이륙하고 자세를 유지할 수 있다. 버드의 다음 목표는 이 적외선 센서 자리에 작은 카메라를 달아 주변 사물의 움직임을 보고 스스로 방향을 잡게 만드는 것이다. 그 단계까지 가야 비로소 방 밖으로 나가 하늘을 날 수 있다.

영상을 본 Hacker News 댓글창의 반응은 두 갈래로 나뉘었다. 기체 몸체가 팽이처럼 계속 도는 한계 때문에 실용성은 떨어진다는 지적이 먼저 나왔다. 차라리 꼬리에 작은 방향타 모터를 하나 더 달아 2모터로 가는 게 훨씬 현실적이지 않느냐는 의견이다. 반대로 어차피 몸체가 360도로 계속 돈다면 라이다(LiDAR)나 카메라를 하나만 달아도 사방을 다 훑을 수 있으니 3D 공간 스캔이나 파노라마 촬영 용도로는 오히려 딱 맞겠다는 기발한 반론도 뒤따랐다.

RC 모형 비행기 마니아들은 옛날부터 있던 기술들과의 연결 고리를 짚어 주기도 했다. 날개 각도를 바꾸는 가변 피치 프로펠러로 공중제비를 도는 RC 곡예 비행기나, 회전 속도를 흔들어 기울기를 만든 초기 ‘가상 스와시플레이트’ 실험들과 뿌리가 닿아 있다는 것이다. 다만 이번 프로젝트는 요즘의 빠른 마이크로컨트롤러와 정밀 센서 덕분에 그 원리를 손바닥만 한 기체에서 실제로 날아다니는 수준까지 끌어올렸다는 점에서 높은 점수를 받았다.

덜어 낸 부품의 책임은 사라지지 않는다

이 작은 드론에서 물리적으로 빠져나간 부품은 모터 세 개와 서보 장치다. 하지만 그 부품들이 맡고 있던 일은 허공으로 사라지지 않았다. 비스듬하게 깎은 경첩 하나, 초당 300번 몰아치는 모터 가감속, 축의 위치를 실시간으로 읽어 내는 자기식 인코더, 그리고 벽면에 붙여 둔 적외선 등대로 고스란히 쪼개져 옮겨 갔을 뿐이다. 하드웨어가 단출해진 만큼 그 빈자리를 채우는 센서와 제어 코드는 비교할 수 없을 만큼 바빠졌다.

사실 소프트웨어를 설계할 때도 이와 똑같은 풍경을 매일 마주한다. 아키텍처를 단순하게 만들겠다며 외부 라이브러리 하나나 마이크로서비스 하나를 걷어 내면 그 컴포넌트가 조용히 처리해 주던 예외 처리와 상태 관리 책임은 남아 있는 코드 어딘가로 반드시 흘러들어 간다. 그 책임이 어디로 옮겨 가는지 정확히 알고 덜어 내면 전체 시스템이 깔끔해지지만 모르고 무작정 빼 버리면 똑같은 복잡도가 훨씬 디버깅하기 까다로운 구석으로 숨어 버린다.

조슈아 버드의 단일 모터 드론이 유독 매력적인 이유는 그 복잡도가 어디에서 어디로 이사했는지가 손에 잡힐 듯 투명하게 보이기 때문이다. 기계 부품에서 뺀 무게가 펌웨어의 타이밍 루프와 벽면의 적외선 센서로 어떻게 옮겨 갔는지 영상과 코드 저장소에 고스란히 드러나 있다. 이제 남은 마지막 외부 의존성은 방 벽에 붙은 적외선 신호기 하나다. 언젠가 그 등대마저 기체 안의 카메라와 비전 알고리즘으로 끌어들인다면 이 외발 프로펠러 드론은 마침내 방 창문을 넘어 밖으로 날아오를 수 있을 것이다.

출처: Joshua Bird — I Built a Drone With Only One Motor, GitHub — jyjblrd/single-propeller-drone, Hackaday — Building A Flying Drone With A Single Propeller, TechEBlog — One Motor Single Propeller Drone, ModLab — Underactuated Rotor for Simple Micro Air Vehicles, GeekNews — 모터 하나만으로 드론을 만들었다