로켓 및 드론을 위한 아두이노 기반 에비오닉스 펌웨어 프레임워크 및 하드웨어

작성자 이종원
학과 또는 소속(회사명) 컴퓨터공학과
조회수 6
평가(좋아요)수 1
댓글수 0
✅프로젝트 소개✅

에비오닉스는 무인기, 로켓, 미사일등의 비행 물체에 비행을 제어하고 관리하는 컴퓨터 소프트웨어 및 하드웨어를 이야기 한다. 에비오닉스 즉, flight computer 중 신뢰도 높은 제품으로는 픽스호크를 예로 들 수 있다. 픽스호크는 신뢰성이 높으며 소프트웨어의 경우 오픈소스이기 때문에 사용자들이 자신의 용도에 맞게 수정하거나 센서 및 임무를 커스터마이징 해서 사용할 수 있는 등 자유도가 높은 프레임워크이다. 하지만 픽스호크 하드웨어의 경우 가격이 꽤 높다는 단점이 있다. 이에 아두이노 기반의 에비오닉스 프레임워크 및 하드웨어를 제작하게 되었다. 특히 해당 에비오닉스를 로켓에 적용하여 실제 발사를 진행해보았다.

회로는 빵판을 기반으로 만들어졌으며 모든 부분이 정상 작동했지만 많은 전선들의 복잡성으로 선이 자꾸 빠지고 관리가 잘 안되는 등의 문제가 있었다.

✅주요 설계 특징✅

에비오닉스의 주요 역할은 비행 중인 물체(이하 로켓)의 센서로 부터 다양한 데이터를 수집하고 분석하여 비행을 제어하고 지상국으로 데이터를 송신 및 명령을 수신하는 것이다. 사용자에 따라 필요한 센서와 미션이 다를 수 있다. 본 프로젝트에서는 재사용성과 유지보수성을 최고 우선순위로 두고 설계를 진행하였다.



1. 빠르고 편리한 센서 추가 및 관리
2. 맞춤형 출시 단계 및 임무 제어
3. 지상국과의 효율적인 원격 측정 송수신을 위한 통신 패킷 제공
4. 높은 재사용성과 유지관리성
5. 하드웨어 회로 설계 제공
6. 카나드 핀 PID 제어 지원



✅소프트웨어 아키텍처✅

재사용성과 유지보수성이 높은 프레임워크를 지향하기에 객체지향의 철학을 철저히 고수하였다.



각종 센서들의 초기화와 통신을 관리하는 센서 클래스를 정의하고 센서 클래스를 상속 받은 각종 센서 클래스들을 정의해 사용할 수 있다. 센서 클래스는 센서 연결 및 초기화, 센서 값 읽기, 쓰기, 읽은 데이터 관리 등의 함수를 오버라이딩 하여 사용할 수 있도록 구성하였다.



로켓 등의 특수 목적 항공기는 다양한 비행 단계에 따라 수행하는 미션이 다르다. 본 프레임워크에서는 사용자가 직접 다양한 발사 stage를 정의할 수 있으며 추후 설명할 task 클래스의 자식 클래스인 stagechecker에 의해 관리된다.



task 클래스를 상속 받은 다양한 미션 클래스를 제공한다. 사용자가 여러개의 다양한 미션을 task manager에 등록할 수 있으며 기본적으로 지상국과의 통신에 필요한 transmit, recieve task, 등록된 센서들로부터 데이터를 측정하고 업데이트 하는 updatesensor task, 안정적인 로켓 비행을 위한 canard fin 제어를 담당하는 canard task를 제공하고 있다.



지상국과 에비오닉스간의 원활하고 신뢰성있는 통신 역시 중요한 요소이다. 본 프로젝트에서는 통신과정에서 불필요한 비트가 송수신 되는 것을 줄이고 효율적인 통신 환경을 만들기 위하여 패킷을 직접 설계하고 이를 클래스화 하여 제공한다. 패킷에 대해서는 아래에서 더 자세히 다루겠다.


✅패킷 아키텍처✅



패킷의 구조는 아래와 같다. 패킷의 요소 중 datatype은 송수신하는 데이터의 유형으로 데이터 유형에 따라 처리하는 프로토콜을 다르게 하였다. 지상국에서 보내는 명령이나 에비오닉스의 상태 변화를 알리는 패킷은 반드시 통신에 성공하여야 하므로 tcp 프로토콜과 유사하게 ack 신호를 주고 받음으로써 신뢰성을 확보하였다. 반면 실시간성이 중요한 텔레메트리 데이터는 단방향으로 데이터를 송신하기만 하도록 설계 하였다.

+---------------------------------------------------+
|STX|DATATYPE|D_LEN|DATA|....|CHECKSUM|ETX|
+---------------------------------------------------+

✅하드웨어 아키텍쳐✅

본 프로젝트에서는 에비오닉스의 역할 수행에 대한 최소한의 하드웨어에 대하여 아키텍쳐를 공유하고 있다. 아두이노 메가를 사용하였으며 다른 센서의 종류는 아래와 같다. 센서들의 경우 다양한 모델의 데이터시트를 비교하여 최적의 모델로 선정하였다.

메인보드 Arduino Mega
IMU BNO 055
고도 및 기압계 bmp 280
GPS BN 220
SD reader SZH-EKBZ-055
카나드 모터 MG996R
통신 모듈 XBEE

회로는 빵판을 기반으로 만들어졌으며 모든 부분이 정상 작동했지만 많은 전선들의 복잡성으로 선이 자꾸 빠지고 관리가 잘 안되는 등의 문제가 있었다.
위의 문제를 해결하기 위해 pcb 설계를 진행하였으며 그 결과 안정적이고 깔끔한 구성의 하드웨어를 만들 수 있었다.

✅실제 로켓 발사✅

제작한 에비오닉스 펌웨어 프레임워크를 기반으로 작성한 소프트웨어와 하드웨어가 탑재된 모델 로켓을 실제로 제작하였으며 발사를 진행하였다. 이번 발사에서 에비오닉스의 주요 역할은 로켓이 올바른 방향으로 비행할 수 있도록 자세를 제어하는 것이었다. 에비오닉스의 센서 데이터들을 종합적으로 분석하여 카나드 핀을 PID 제어기를 통해 제어하는 알고리즘을 탑재하여 발사하였으며 그 결과 Pitch축으로 5도 기울리고 발사한 로켓이 목표각인 0도(지면과 수직)로 자세를 수정하여 상승하는 것을 확인하였다. Yaw축의 경우 당일 바람이 많이 불어 한쪽으로 기울었으나 이는 적절한 PID 계수를 찾지 못하였음으로 추측한다. 사실 이 문제를 해결하기 위해 포트폴리오 사이트에서도 언급했던 로켓 비행 시뮬레이터가 필요한 것이다. 발사 당시 시뮬레이터는 70% 정도 완성 단계에 있었기에 100% 활용하지 못한 것이 아쉬우나 그래도 발사에 사용한 PID 계수 역시 시뮬레이터 튜닝 기반으로 추출한 계수였다.



실제 발사에서 지상국과 에비오닉스 간의 통신도 원활히 이루어졌는데 그 덕에 로켓이 갈대 밭 한 가운데로 낙하하였으나 gps신호를 통해 단 시간에 찾아낼 수 있었다.


발사에 사용한 stage 설정은 아래와 같다.

INIT
에비오닉스 센서를 초기화 하고 텔레메트리 데이터를 지상국으로 전송한다. STAGE CHECKER가 지상국으로 부터 명령이 왔는지 체크 하다 상태 변환 명령을 수신하면 READY로 상태를 변경한다.

READY
발사 대기 상태이다. 만약 기압계, IMU 데이터를 통해 로켓이 빠르게 상승하기 시작하기 시작했다는 것을 인식하면 STAGE CHECKER가 상태를 ASCENDING으로 바꾼다.

ASCENDING
ASCENDING 상태에서는 STAGE MANAGER가 PID 자세제어 TASK를 수행시킨다. 만약 로켓이 심각하게 기울었거나 시뮬레이션 예측을 통한(여기에서도 개발했던 시뮬레이터가 사용되었다.) 최고점 도달 시간이 지나면 STAGE CHECKER가 APOGGE로 상태를 바꾼다.

APOGGE 에비오닉스가 안전한 착지를 위해 낙하산 사출 신호를 모터에 전달하고 낙하산 사출이 확인되면 STAGE CHECKER가 상태를 DESCENDING으로 바꾼다.

DESCENDING 로켓이 하강하는 상태로 지속적으로 텔레메트리 값을 지상국으로 송신한다.

✅사용성 및 확장성✅
본 프레임워크는 로켓 개발을 위해 제작 되었으나 드론과 같은 항공기에도 사용될 수 있으며 아두이노 기반이기에 확장성이 뛰어나다는 장점이 있다.

로켓 및 드론을 위한 아두이노 기반 에비오닉스 펌웨어 프레임워크 및 하드웨어

조회수 6
평가(좋아요)수 1
댓글수 0
게시 : 2024년 11월 20일
이종원 컴퓨터공학과

로켓 및 드론을 위한 아두이노 기반 에비오닉스 펌웨어 프레임워크 및 하드웨어

조회수 6
평가(좋아요)수 1
댓글수 0
게시 : 2024-11-20

Member

이종원, 김병규

Keyword

로켓, 미사일, 아두이노, 자세제어, PID, PCB 설계, 에비오닉스

  • 모바일/IoT
  • 기타