아두이노를 이용한 쿼드콥터 자세제어
작품 제작 목적
멀티콥터는 대표적인 회전익기의 한 종류로 최근 신식 비행체로 각광받으며 다양한 분야에서 연구되고 있습니다. 전통적인 고정익기와 대비해 공기역학 적인 고려사항이 매우 적고 제어 방식이 직관적이라 DIY 제작하기에 적합하다는 특성을 가지고 있습니다. 본 작품에서는 아두이노를 이용해 현대 제어 이론의 근간이 되는 칼만 필터와 PID 제어를 이해 및 경험하고 비행 제어를 위한 통신과 액추에이터 제어에 대해 경험해보고자 하였습니다.
작품 설명
사용 부품
센서 : MPU9250 9자유도 IMU 센서 (본 작품에서 3축 가속도, 3축 각속도만 사용) 제어기 : Arduino Due 개발 보드 (Cortex-M3, 84MHz) 액추에이터 : RC용 3상 30A 변속기, RC용 3상 DC 브러시리스 모터
- I2C 통신을 이용하여 레지스터 구조에 맞게 MPU9250를 제어하여 가속도, 각속도 정보를 읽어온다.
- 읽어온 값들을 삼각 함수를 이용해 기초적인 벡터로 만든다.
- 상보 필터와 선형 칼만 필터를 이용하여 응답 특성을 개선하고 잡음을 제거한다.
- PID 제어기를 통해 수평 자세에 대한 오차 값과 이를 보상하기 위한 제어값을 도출한다.
- 제어기의 타이머 PWM을 이용해 변속기를 제어하여 수평 비행을 실현한다.
작품 동작 결과
- 드론을 고무줄로 매달아 놓은 후 작동 시키면 기울어진 드론이 수평상태가 되는 것을 목표로 하였습니다.
- 코드 작성을 마치고 드론 구동을 테스트 하였으나 파워서플라이가 드론을 위한 출력을 내지 못하여 적절한 배터리를 찾는데 어려움을 겪었습니다.
- 드론 구동에 있어서 센서 자체의 값의 치우침과 오차 보정에 미흡함이 있어 드론 작동시 요동침이 있었습니다.
- 이로 인해 작품 전시회에는 드론의 하드웨어를 전시하였으며 동작을 선보이지는 못하였습니다.
결론 및 기대효과
- 상용 드론 수준의 빠른 수렴 속도나, 진동, 오버 슛 제어 성능을 달성하진 못하였고, 오차를 제어하기 위한 목표 자세를 정적인 수평 상태로 설정하여 완벽한 쿼드콥터를 구현했다고 할 순 없지만 기초적인 원리 습득 및 이해라는 동기를 달성하였습니다.
- 배터리 문제를 해결 후 더 많은 테스트를 통해 제어 계수를 조정하였으면 더욱 원활한 수평 제어가 가능했을 것이라 생각됩니다.
- MPU-9250 센서와 RC모터의 제어, PID 제어를 이용하였다는 점에서 많은 경험을 쌓을 수 있었습니다.
- 기초적인 자세 제어에 이어서 동적인 목표 자세 설정, 다목적 쿼드콥터 구현 등 무궁무진한 후속연구 가능성이 기대됩니다.
코드
https://github.com/sehoon120/sehoon/tree/main/my_own_project/drone