개요
옛날에 학과 동아리 활동을 하면서 아두이노로 드론을 몇 번 만들어보긴 했는데, 그냥 아두이노에 점퍼선으로 이것저것 덕지덕지 붙여서 만들었더니 멋이 없는 건 둘째치고 하드웨어 신뢰성 문제가 컸습니다. 상자 안에 담아놨더니 운반하다 센서 선이 다 빠지는 경우가 많더라고요. 그리고 코딩도 직접 한 게 아니라 기체에 맞게 제어 파라미터만 바꾼 수준이라(이것도 드론 제어 지식이 있어야 할 수 있는 일이겠지만) 프로그래밍 지식이 쌓이진 않았습니다.
그러다 이번에 임베디드 프로그래밍 일을 하면서 동아리 활동을 도와주게 된지라 다시 드론을 꺼내들게 되었습니다. 앞에서 아두이노 드론에 실망한 점이 있다보니 제어기 하드웨어와 소프트웨어를 모두 자작하겠다는 목표를 세우긴 했는데, 이걸로 야외 비행할 자신까진 없어서 일단은 실내용 드론으로 계획했습니다.
참고) 비행기 vs. 드론
항공 동아리에서 항공기를 만들어 날린다고 하면 대다수가 비행기나 드론입니다. 헬기도 가끔 보이긴 한데 둘에 비하면 너무 어려워서 잘 안 하더라고요. 비행기와 드론의 장단점이 상당히 나뉘다보니 성향에 따라 한 쪽만 하는 경우가 많은데(애초에 주로 쓰는 조종기 모드도 다르고) 개인적으로 동아리 수준에서는 드론이 더 낫다고 생각합니다.
- 비행기를 날리려면 굉장히 넓은 장소가 필요합니다. 당연히 비행 금지 구역이면 안 되고 주변에 사람이나 나무, 기타 물건 없는 평지여야 하니까 도심에서 비행하기란 사실상 불가능입니다. 반면에 드론은 정지 비행이 가능하고 좁은 실내에서도 비행할 수 있습니다. 물론 작은 실내용 비행기가 없는 건 아니지만...
- 비행기 설계는 구조와 공력 설계의 비중이 높습니다. 사실 거의 모두가 제어기를 아예 안 넣습니다. 대신 드론 설계는 제어기 프로그래밍의 비중이 더 높습니다. 그런데 구조, 공력 설계는 상당한 공학적 지식과 경험이 필요한지라 동아리 수준에서는 관련 자료를 많이 찾아볼 수 있는 제어기 프로그래밍이 더 쉽습니다.
이 문서에서는 실내용 드론의 운영개념을 정리해보겠습니다.
임무
개발할 드론의 임무는 간단합니다. 이륙한 뒤 공중에서 명령에 따라 비행하고 다시 착륙하는 겁니다. 이륙 전과 착륙 후 절차를 포함한 임무 프로파일(mission profile)은 다음과 같습니다.

- 전원 공급
- 기능 점검
- 캘리브레이션
- 아밍 및 이륙
- 비행
- 착륙 및 디스아밍
- 전원 차단
비행 컴퓨터, 변속기, 모터 등 전원이 필요한 부품에 배터리 전원을 공급합니다.
유선 통신으로 명령을 보내고 데이터를 읽어 부품의 정상 작동 여부를 점검합니다.
유선 통신으로 센서 측정값을 받거나 변속기에 신호를 주어 해당 부품의 캘리브레이션을 진행합니다. (캘리브레이션이 필요하지 않으면 생략 가능)
무선 통신을 활성화하고 조종기에서 스로틀을 올려 이륙합니다.
조종기 명령에 따라 공중에서 비행합니다.
스로틀을 내려 지면에 착륙하고 무선 통신을 비활성화합니다.
배터리 전원을 차단합니다.
운영 모드
위 임무 프로파일로부터 운영 시 필요한 모드들을 정리할 수 있습니다.

- 초기화(Init)
- 대기(Standby)
- 비행(Flight)
- 비상(Emer)
전원 인가 후 최초로 실행되는 모드입니다. 전자 장비들의 초기화가 이루어집니다.
초기화가 끝난 후 비행을 대기하는 모드입니다. 유선 통신으로 명령을 주고 스트리밍을 받아 기능 점검과 센서 및 변속기 캘리브레이션을 진행할 수 있습니다.
대기 모드에서 무선 통신을 활성화하면 비행 모드로 전환됩니다. 조종기로 드론을 제어하여 비행합니다. 착륙 후 비행 모드에서 무선 통신을 비활성화하면 대기 모드로 전환됩니다.
비행 중 비상 상황이 발생한 상태입니다. 비상 모드로 전환하면 즉시 비행을 중단합니다. 무선 통신을 통해 비상 모드로 전환하는 명령을 내릴 수도 있고, 비행 컴퓨터가 자체적으로 비상 상황을 판단할 수도 있습니다.
통신
비행 컴퓨터는 유선과 무선 두 가지 통신 경로를 갖습니다. 먼저 무선 통신은 조종기에서 수신기로 드론 조종 명령을 전달하는 단방향 통신입니다. 무선 통신은 기본적으로 전원 공급 시에는 활성화되어 있지 않으며, 아밍으로 활성화할 수 있습니다. 무선 통신으로 송신할 수 있는 조종 명령은 다음과 같습니다.
- 스로틀(throttle)
- 롤(roll) 각도
- 피치(pitch) 각도
- 요(yaw) 각속도
- 비상 정지
유선 통신은 지상에서만 사용하며, 기능 점검, 센서 캘리브레이션, 기타 기체 설정 등에 필요한 명령과 데이터를 주고받는 양방향 통신입니다. 유선 통신은 항상 활성화 상태이고 전용 프로토콜에 따라 다음과 같이 작동합니다.
- 비행 컴퓨터가 명령을 수신하면 올바른 명령인지를 판단한 뒤, 올바르면 정상 수신했다고, 아니라면 어떤 오류가 있는지를 응답합니다.
- 모든 데이터는 비행 컴퓨터의 제어 주기에 맞추어 스트리밍됩니다. 어떤 데이터를 스트리밍할 것인지는 명령으로 선택할 수 있습니다.
운영환경 및 위협
개발할 드론은 실내용이므로 바람이 불지 않는 공간에서 운영합니다. 공간의 크기는 최소 50 cm × 50 cm × 50 cm이고 바닥은 평평하다고 가정합니다. 운영자는 운영 공간 외부에서 드론과 최대 5 m 떨어져 드론을 조종합니다.
해당 운영환경에서 발생할 수 있는 위협은 다음과 같습니다.
- 조종기와 수신기 사이의 무선 통신 실패
- 운영 공간 이탈
- 다른 물체와 충돌