1. Multiwii, 멀티위란 무엇인가?
Multiwii, 멀티위를 한마디로 얘기하자면 "아두이노 드론에 필요한 유일한 소프트웨어"이다.
드론에 부가적인 장치나 조작을 할 경우에는 추가적인 코딩이 필요할 수도 있지만,
일반적인 경우에는 거의 대부분이 멀티위만으로도 소프트웨어 코딩이 더 이상 필요 없다.
이렇게 높은 완성도를 자랑하는 멀티위 코드는 그만큼 개발 과정도 길고, 들어가는 코드들도 일반인이 쉽게 이해하기에 복잡하다. 이렇게 블로그 글 하나로 멀티위에 대한 궁금증을 모두 해소할 수는 없지만, 우리가 꼭 알아야 될 정보에 대해서 간단하게만 작성하겠다.
2. Multiwii, 멀티위는 오픈소스이다
오픈소스란, 모두에게 코드가 공개되어서 누구든지 자신의 상황에 맞게 가져다가 변형할 수 있는 프로젝트를 의미한다.
멀티위는 아두이노 IDE용으로 만들어진 오픈소스 프로젝트이기 때문에 우리 프로젝트에 최적의 조건을 갖추었다고 볼 수 있다.
오픈소스인 멀티위는 multiwii.com 에 접속하면 쉽게 코드를 다운받을 수 있지만, 들어가서 이것저것 찾아보려면 귀찮다.
drive.google.com/drive/folders/1Zht4y8iCGGsiIYOx-VcEPUVLXtGTMSAN?usp=sharing 이 링크에 접속하면 내운연 주식회사의 구글 드라이브에 들어가서 다운받을 수 있다. (바이러스같은건 없으니 안심해도 된다)
위 링크로 들어가서 다운받을 수 있는 파일의 경우에는 우리가 내운연 드론의 상황에 맞게 조금씩 커스터마이징 한 파일이기 때문에, 우리의 프로젝트 글을 그대로 따라간다면 별도의 수정 없이 바로 적용해도 된다.
추가로, 멀티위는 이름에서도 확인할 수 있듯이 wii, 닌텐도 위를 사용해서 만든 프로그램이다. 닌텐도 위에는 자이로 센서가 들어있어서 사용자가 흔드는 가속도를 인식할 수 있고, 이를 드론에 적용하면 평형을 유지하는 기술로 쓸 수 있지 않을까? 라는 생각에서 시작된 프로젝트가 멀티위 프로젝트이다.
3. Multiwii, 멀티위 없이 드론 만들기
결론부터 말하자면, 이런 생각은 포기하는 것이 좋다.
물론, 멀티위 없이도 멀티위의 역할을 대신하는 여러 오픈소스 프로그램들이 있기는 하다. KK 2.1이나 드론코드, 큐그라운드컨트롤 등도 존재하지만, 이들에 대한 사용법은 자료를 찾아도 잘 나오지 않고 복잡하기 때문에, 멀티위를 사용하는 것을 추천한다.
우리는 <드론도전기>에서 작성했듯, 그 어떤 오픈소스 프로젝트도 사용하지 않고 직접 pid코딩을 해서 드론을 만들겠다고 시도했지만 엄청난 벽을 느끼고 결국 실패했다. 직접 코딩을 이용해서 멀티위와 비슷한 코드를 작성하는 것은 학부생 수준으로는 굉장히 힘든 작업인 것 같다.
만약, pid가 무엇인지와 pid코딩에 대해서 알고 싶다면, 아래 게시글을 확인하면 된다.
2020/02/28 - [드론도전기/software] - 드론도전기 #10_20.02.15
4. Multiwii, 멀티위 코드 건드리기
멀티위 코드를 커스터마이징해서 지금 만드는 드론에 맞게 바꾸고 싶다면, 크게 아래 내용들을 손볼 수 있다.
문서가 길어지는 관계로, 여기에 index를 표시하겠다.
ㄱ. 멀티위 IDE 켜기
ㄴ. config.h 헤더 파일
ㄷ. 내 드론의 종류 설정
ㄹ. 내 자이로 센서 설정
ㅁ. mpu-6050
ㅂ. arm을 위한 최소, 최대값 설정
ㅅ. pid 컨트롤 값 설정
ㅇ. 라디오 통신 주소값 설정
ㄱ. 멀티위 IDE 켜기
ㄴ. config.h 파일
config.h 헤더파일에는 사실상 드론 설정과 관련된 정보들이 거의 대부분 들어있다. 설명도 직관적으로 잘 되어있기 때문에, 변경할 부분이 있으면 그때그때 바꿀 수 있다.
ㄷ. 내 드론의 종류 설정
여기는 드론의 종류를 config해주는 영역이다. 거의 대부분의 쿼드콥터 드론은 QUADX를 define 해주면 된다. 만약 QUADX가 아닌 다른 종류의 드론을 만들고자 한다면, #define QUADX 앞에 //를 넣어서 주석처리 해주고 만드려는 종류에 맞는 드론의 표시에 //를 지워서 주석처리를 해제하면 된다.
ㄹ. 내 자이로 센서 설정
우리가 이번에 제작한 드론은 GY-521이라는 6축 자이로 센서를 사용했다. 이중에서 여러분이 사용하는 종류의 자이로 센서가 있다면 마찬가지로 주석처리만 해주면 된다.
만약 여기 있는 그 어느 종류도 사용하지 않는다면, 밑에 내려서 mpu-6050 항목만 잘 켜져있는지를 확인하면 된다.
마찬가지로, 자이로 코딩은 아래 글을 확인하면 된다.
2020/02/28 - [드론도전기/software] - 드론도전기 #9_20.02.11
ㅁ. MPU-6050
mpu-6050 센서를 define 해주는 코드이다. 사실 mpu-6050의 중국산 버전이 gy-521이고, 둘 모두 생긴게 똑같기는 하지만 두 센서가 각기 다른 카테고리에 들어있기 때문에 둘 모두 define을 해줬다.
ㅂ. arm을 위한 최소, 최대값 설정
드론과 컨트롤러의 통신을 확인한 뒤에, 바로 조이스틱을 올린다고 바로 드론이 나는것은 아니다. 그 전에 드론의 시동을 걸어주는 작업이 필요한데, 이를 arm 이라고 부른다. 이 arm 과정은 나중에도 정말 속을 많이 썩히는데, 이 내용은 이후에 더 자세하게 나온다.
Multiwii.h 헤더파일에 있는 mincheck와 maxcheck는 이 arm 과정의 수치를 알려주는 값들이다. 컨트롤러에 있는 각 2개의 조이스틱을 움직이면 throttle, pitch, yaw, roll이라는 4가지의 값들이 변하는데, 나중에 드론을 앞뒤양옆으로 움직이게 한다.
드론의 시동을 거는 arm을 하기 위해서는 multiwii의 throttle 값을 최소로 낮추고, yaw 값을 최대로 키워야 된다. 이때 어느 값 이하면 최소고 어느 값 이상이면 최대인지를 표시해주는 것이 mincheck와 maxcheck이다. 만약 조이스틱의 감도가 낮거나, 최소로 내렸는데도 충분히 값이 떨어지지 않으면 위의 mincheck를 1200, maxcheck를 1800으로 조정하는것도 방법일 수 있다.
ㅅ. pid 컨트롤 값 설정
마찬가지로 Multiwii.h 헤더파일에 있는 pid 컨트롤에 관한 값들을 설정하는 카테고리이다.
초보자는 p, i, d 값들을 모두 낮게 설정하는 편이 조작하기에 편하다고 한다.
pid 제어에 관한 설명은 아래 글을 확인하면 자세히 설명되어 있다.
2020/02/28 - [드론도전기/software] - 드론도전기 #10_20.02.15
ㅇ. 라디오 통신 주소값 설정
드론은 컨트롤러와 2.4GHz라디오 주파수를 이용해서 통신을 한다. 그런데, 거의 모든 드론과 컨트롤러는 2.4GHz 주파수를 사용하기 때문에 혼선이 생길 수 있다.
그래서 필요한 것이 이 라디오 통신 주소값이다. pipe 뒤에 있는 14자리 문자열이 고유 통신 주소값을 나타내는데, 컨트롤러의 코드에 있는 주소값과 일치시켜주면 된다.
이상으로 멀티위에 대한 대략적인 설명을 마친다.
굉장히 긴 글이었는데, 읽어주신 여러분께 감사의 말씀을 드린다.
publisher, 환
how to, 아두이노 드론 #16 : 문제는 PID야, 바보야! It's the PID control, stupid! (5) | 2020.09.08 |
---|---|
how to, 아두이노 드론 #6 : MOSFET 해결 (0) | 2020.08.31 |
how to, 아두이노 드론 #5. Multiwii setting (1) | 2020.08.31 |
댓글 영역