HanDrone - 손의 기울기로 드론을 조종하는 아두이노 프로젝트

lgun202·2021년 8월 8일
1
post-thumbnail

벌써 4년 전, 고등학교 2학년 때 했던 오래 된 프로젝트가 되었다. 대학교 입시를 마치면 그동안 진행했던 프로젝트, 연구 활동들을 정리할 줄 알았다.

그러나 새롭고 재밌는 과 생활, 여러 동아리 활동 등으로 바쁘게 대학생활을 하다보니 기록을 못했다. 결국 군대에 들어와서 회고 겸 정리하게 되었다😅


💿 HanDrone(Hand+Drone)??

- 소개

복잡한 드론 조종기를 대신해서 한 손으로 드론을 조종할 수 있도록 해주는 웨어러블 장갑 장치다. 사용자가 별다른 지식을 사전에 습득할 필요없이 직관적으로 바로 드론을 조종할 수 있다.

-> 유튜브 영상으로 바로가기

- 드론 상승 방법

드론의 상승(Throttle 조정)은 엄지 손가락으로 바로 오른쪽 검지에 있는 버튼을 누르면 된다.

- 드론 전/후/좌/우 이동 방법

아래는 고등학교 교실에서 시연해보는 영상이다. 손의 기울기에 따라 드론이 움직이는 것을 볼 수 있다.
분명 이때는 잘되었는데... 과제연구 수행평가 발표시간에는 책상으로 가득차있어서 그런지 제대로 작동이 되지 않았다. 그래서 낮은 점수를 받았던..😅


💡 아이디어를 떠올린 과정

고등학교에서 드론 조종 교육을 받는 시간이 있었다. 그런데 생각보다 처음에 드론 조종이 어려웠다. 복잡한 조종기 인터페이스, 처음배우는 지식들로 인해 그런 것 같다.

- 멍 때리기

그래서 음음!!!

어떻게 하면 전문, 세부적인 조종은 포기하더라도 쉽게 기본적인 조종을 할 수 있을까?? 라는 의문과 함께 드론 조종 UX 개선 방법을 자습시간에 멍때리며 생각해봤다. 그때도 사용자 경험에 관심이 많았어서 이런 의문이 있으면 몇 시간 멍때리면서 자습시간을 많이 날려먹었다😁

- 퍼시픽림!!?

그러다가 내 손을 하나의 드론으로 생각해서 조종할 수 있으면 직관적이지 않을까 생각을 했다. 마치 퍼시픽림 영화처럼 말이다. 영화를 보면 로봇 안의 조종수들이 움직이는 대로 로봇이 움직인다.

- 아이디어 결론

장갑장치를 만들어 손에 착용한다음 손이 오른쪽으로 기울어지면 드론도 오른쪽으로 기울어져서 오른쪽으로 움직이고 손이 위로 상승하면 드론도 위로 상승하게 하면 되겠다..!

그렇게 바로 실현에 옮겨 여러 시행착오를 겪으며 완성을 했다 :)

시간 부족으로 손의 상승/하강에 따른 드론의 상승하강은 구현하지 못했지만 본래 핵심 기능이었던 손의 기울기에 따른 드론의 앞뒤좌우 비행은 구현을 완료했다.


⚙️ 어떤 원리로 작동하는 건지

원리는 매우 간단하다. 손이 기울어지면 기울어지는 방향으로 드론도 기울어지게 해서 움직이게 하면 된다. 그럼 어떻게 손의 기울기를 측정하고 드론을 기울이게 하는지를 알아야겠다.

- 손의 기울기

첫 번째로 손의 기울기는 'MPU6050' 이라는 자이로 가속도 센서를 이용하면 측정할 수 있다.
센서로부터 얻은 RAW한 값에 '칼만필터'를 적용시키면 각도의 변화량을 얻을 수 있다.

- 드론 모션

그럼 이제 위의 센서를 아두이노로 연결해서 전/후/좌/우로 얼만큼 기울어졌는지를 알고 전/후/좌/우로 케이스를 나누어 드론에게 명령을 내릴 수 있다. 그럼 드론에게 어떤 명령을 내려야할까?

드론은 조종 요소 값들의 상태 값에 따라 제어된다. 조종 요소는 다음과 같이 4가지다. (출처) 이렇게 크게 Throttle(상승/하강), Pitch(전진/후진), Roll(좌/우 이동), Yaw(좌/우 회전) 값에 의해 상태가 업데이트되어 작동된다. 상승/하강을 조절하고 싶으면 Throttle 값을 변화시키면 되고 전진/후진을 하고 싶으면 Pitch, 좌/우 이동은 Roll, 좌/우 회전은 Yaw 값을 업데이트 해주면 된다.

- 이 두가지만 구현하면 끝

장갑에 부착된 MPU6050 센서를 통해 손의 기울기 변화를 측정한다. 측정된 변화에 따라 작동되어야하는 드론의 모션을 구분한다. 드론의 모션에 따라 필요한 값을 조정하여 드론에게 값을 업데이트하는 명령을 통신을 통해 보낸다.


💻 만드려면 어떻게 해야하나요?

- 그때 Github을 알았더라면..

프로젝트 기록을 남기고 싶어서 아카이브 용으로 유튜브에 영상을 업로드 했었다.
그런데 생각보다 많은 분들이 관심을 가지고 코딩 자료를 요청했다.
생각하지 못한 코드 요청에 다시 내 고등학교 USB에서 파일을 찾아봤다. 다행히 파일이 있었다. 그래서 해당 파일을 설명과 함께 보냈다.

그러나..!!! 제대로 작동되는 최신 코드 파일이 아니였다.. 그당시 수행평가 제출에 급급해서 일주일만에 제작을 완료했다. 그러느라 정상적인 코드 파일이 다른 곳에 저장했나보다.. 학교 노트북에 있는지.. 또 그때는 Github이라는 것 자체도 몰랐기에 코드를 정리할 생각도 못했다. 아쉽다.

그때 Github을 알았다면 이 코드가 오픈소스로 공개되고 지금쯤 더 좋은 코드로 발전되어있지 않았을까 라는.. 아쉬움과 앞으로는 남이 볼 수 있게 코드를 짜고 Github에 공유해야겠다는 생각을 한다.

그래서 그 이후로는 죄송하지만 메일로 코드를 보내드리지 않는다.. 그리고 유튜브 댓글 알람도 잘 안떠서 instagram 아이디로 DM 주면 원리 설명이나 도움을 드리겠다고 코멘트 해놓았다.

- 본격적으로 어떻게 만드나!!?

📋 교육용 아두이노 드론 키트

아쉬운 마음에 필요없는 말이 길어졌다. 이제 제작에 필요한 정보를 써야겠다.
드론 기체는 펌테크 회사의 교육용 아두이노 드론을 사용했다. 아래 링크에서 구매할 수 있다.
https://robotscience.kr/goods/view?no=15613 드론의 성능은 솔직하게 좋지는 않다. 호버링이 제대로 되지는 않는 것 같다. 하지만 아두이노로 제어가 가능하고 관련 자료들을 제공해주는 면에서 교육, 입문용으로는 이보다 좋은 키트가 없는 것 같다. 내가 할 때만 해도 가이드 자료가 별로 없었던거로 기억하는데 지금은 이것저것 많은 것 같다.

📋 제공되는 코드를 분석하자!

위의 링크에서 자료들을 다운 받을 수 있는데 그중에 드론 제어용 전체 소스코드를 다운 받으면 된다. 주석이 있는지 모르겠지만 위의 4가지 요소 Throttle(상승/하강), Pitch(전진/후진), Roll(좌/우 이동), Yaw(좌/우 회전)가 있는 코드 부분을 찾아 분석하면 된다.

📋 웨어러블 장갑장치 제작

그럼 이제 드론의 Throttle, Pitch, Roll, Yaw를 이용해 드론을 제어할 수 있는 단계까지 왔다. 이제는 드론을 조종하는 웨어러블 장갑장치를 만들 차례이다.

웨어러블 장갑에 쓸 장갑은 기억상으로 대충 네이버쇼핑에 '자전거 반장갑'이라고 검색해서 샀던거 같다.

⚙️ 그런데 여기부터 문제다.

펌테크의 아두이노 조종키트는 조이스틱 쉴드를 아두이노 우노 위에 올려 완성되는 형태이다.
그런데!! 이렇게 되면 추가로 사용할 수 있는 핀이 없어서 MPU6050 센서를 연결할 수 없다.

⚙️ 해결법1

그럼 어떻게 MPU6050을 연결할 수 있을까? 쉴드를 때고 아두이노에 해당 조종기 소스코드를 업로드하면 되지않을까? 라는 의문을 가졌다. 그러면 드론과 통신하는 블루투스 모듈만 조이스틱 쉴드에서 빼서 아두이노에 연결하면 해결된다.

그러나 펌테크 드론과 통신할 수 있는 BLE Module FBL780BC_serial 모듈을 장착할 수 있는 기판이 펌테크의 조이스틱 쉴드에 있는 것이 문제였다.

⚙️ 해결법2

그럼 해당 모듈말고 다른 기종의 블루투스 모듈을 사용하면 가능하지 않을까? 라는 두 번째 의문을 가졌다.

그래서 나는 HC-06, HM-10 등의 여러 블루투스 모듈을 구매해서 테스트를 해보았다. 하지만 실패했다. 결국 다른 방법을 생각해야만 했다.

⚙️ 해결법3

그럼 조이스틱 쉴드가 아두이노의 모든 핀을 필요로 하지 않을테니 소스코드를 참고해서 안쓰이는 핀을 제외한 조이스틱 쉴드와 아두이노 우노 보드의 핀들을 선으로 연결하고 남은 핀에 MPU6050을 연결하면 되지 않을까? 라는 생각을 했다.

그러나 정확히 기억이 안나지만 남는 핀으로는 MPU6050 연결이 불가능했다. MPU6050은 아날로그핀이 필요한데 디지털핀만 4개 남고 아날로그 핀 사용이 불가능했던거로 기억한다.

⚙️ 해결완료!

그러면 아두이노 우노 보드를 한 개 더 사용해서 아두이노 우노 A에서는 MPU6050 등의 센서 값들을 불러오고 처리하는 역할을 하고 조이스틱 쉴드와 연결된 아두이노 우노 B에서 드론으로 명령을 보내는 통신 역할을 수행하면 가능하지 않을까 생각했다.

나이스다. 이렇게 하니 해결이 됐다!!
디지털 핀 4개로는 총 16개의 구분된 신호를 아두이노A에서 아두이노B로 보낼 수 있다. '드론의 상승', '조금 기울어진 전/후/좌/우 이동', '많이 기울어진 전/후/좌/우 이동' 이렇게 총 9개의 신호만 보내면 되니 4개의 핀이면 아두이노 A, B간의 통신으로 충분하다.

📋 HW / SW 구조 정리

하드웨어 구성
아두이노A에는 상승버튼, MPU6050을 연결하고 아두이노B에는 블루투스 모듈을 위한 조이스틱 쉴드를 연결한다.

소프트웨어 구성
아두이노A에서는 MPU6050이 전/후/좌/우로 조금 기울어졌으면 '0~3'의 신호를, 전/후/좌/우로 많이 기울어졌으면 '4~7'의 신호를 아두이노B로 보내도록 코딩한다. 그리고 상승버튼이 눌리면 '8'의 신호를 보낸다.

아두이노B에서는 들어온 신호에 따라 '0~3'이면 드론에게 전/후/좌/우로 적당한 속도로 이동하라. '4~7'이면 전/후/좌/우로 좀더 빠른 속도로 이동하라 라는 명령어를 위에서 언급한 조종 요소 값을 업데이트해서 보내면 된다. 그리고 '8' 값이 들어오면은 드론이 상승하도록 코딩하면 된다.

📋 이렇게 하면 끝!

-> 유튜브 영상으로 바로가기
그래도 회로도, 코드가 없이 말로만 원리를 설명해서 이해가 되지 않거나 궁금하신 점이 있는 분들은 Velog 댓글, 또는 인스타그램 @2m_7un으로 DM보내주시면 아는 선에서 답변드리겠습니다!


📗 어땠나요. 프로젝트 만들고서

- 사용자 인터페이스 개선

어떤 제품에서 사용자의 경험을 결정하는 부분은 HW/SW 사이의 인터페이스가 크다. HanDrone기존 조종기 인터페이스를 좀더 직관화 시킬 수 없을까 라는 생각으로 해본 뜻깊은 경험이었고, 내 얄팍한 아두이노 지식과 드론 교육 체험 경험연결지어 생각하고 만들어낸, 클론코딩이 아닌 프로젝트여서 맘에 든다. 이후 사용자평가 방법론에 대해서도 공부하고 친구들에게 진행해보고 싶었는데 입시때문에 시간이 부족해 못한 점이 아쉽다.

- 정보적 약자를 위한 UX

그리고 이때 나는 '충북정보화요원' 봉사활동으로 한쪽 팔만 사용할 수 있는 어르신께서 IT 기기, 컴퓨터 사용을 배울 수 있도록 하는 일을 했었다. 그래서 이때 생각이 든게 나중에는 이런 신체로인한 정보적 약자분들도 이런 작은 UX 개선으로 드론도 조종하고 일반 사람들과 같이 기술을 누릴 수 있지 않을까 하는 희망적인 생각도 했다. 나중에 이 봉사활동에 대해서도 포스팅해야겠다!

profile
얼른 전역할래

0개의 댓글