제가 작년에 작성하고 한국항공우주학회에 투고한 소논문입니다.
모델 위성을 통한 비행체 식별 및
이동경로 분석에 관한 연구
- 딥러닝 기반 이미지인식과 도플러 효과 -
171037 이호은
171072 양승은
171058 이민형
충남삼성고등학교
■ 요 약 ■
본 연구는 말레이시아 항공가 실종사고에서 영국의 정지궤도 위성인 인마르셋 위성이 도플러 효과를 이용해 수색범위룰 단축하였다는 과학적 사실으로부터 착안하여 고안하였음. 위 기술을 바탕으로 오늘날 빈번히 발생하고 있는 드론실종사고와 연계하여 이를 해결할 수 있는 기술개발을 목표로 연구가 진행되었음. 이미지분석(openCV)기술을 이용하여 항공체를 식별하고(Processing) 항공체의 이동경로를 분석하여 실종된 비행체의 위치를 찾아 이를 시각화하는 과정을 캔 위성을 직접 제작 및 관련 전문가 및 관련 연구소의 협력을 통해 발사하였음. 캔 위성 및 이미지 분석 처리를 통해 얻은 데이터 값을 분석하여 계산함으로써 비행체의 이동경로를 파악하여 본 연구의 목적을 달성 할 수 있었음. 이를 바탕으로 캔 위성을 통해 항공체의 이동경로를 분석하여 이를 시각화하는 새로운 형태의 기체 식별 및 이동경로 분석기술을 제시함으로써 최근 발생하고 있는 소형기 항공사고의 대안을 제안하였으며 이를 확장하여 대형기 항공사고에도 접목할 수 있다는 가능성을 확인할 수 있었음.
목 차
■ 요 약 ■
Ⅰ. 서론
1. 연구 배경 및 목차
2. 선행 연구 조사 4
Ⅱ. 이론적 배경 5
Ⅲ. 연구 내용 및 결과 7
1. 캔위성 기본 키트
가. 하드웨어
나. 소프트웨어 및 프로토콜
2. Open CV
3. 도플러 효과 기반 센서 모듈
4. 이미지 분석 처리
IV. 연구 목적
Ⅴ. 예상 결과 및 기대 효과 22
1. 기대 효과
2. 예상 결과
Ⅵ. 결론 및 제언 22
1. 데이터 분석
가. GPS 데이터
나. ATLM 데이터
2. 도플러 데이터 및 이미지 분석처리(이동경로 분석)
가. 이동거리 측정 방법
나. 최종 결론
3. 제언 28
참고문헌 28
Ⅰ. 서론
1. 연구 배경 및 목적
최근 드론과 같은 무인항공기가 주목을 받음에 따라 관련된 연구가 이루어지고 있다. 선례로 미국 아마존 닷컴은 프라임에어(Prime Air) 라는 기술을 도입하여 실제로 무인 물품 배달에 성공하였다. 이처럼 기존 군과 관련된 특수목적으로만 사용되던 드론이 4차 산업혁명의 영향으로 일상생활에도 보급되었다. 그러나 드론사용과 관련된 실종사고, 추락사고 등과 같은 안전사고가 발생할 수 있다는 견해를 가지고 되었고, 실제로 드론사용이 상용화된 미국에서는 크고 작은 사고가 끊임없이 일어나고 있다. 또한 최근 드론의 물질적인 특성과 물리적인 특성, 해당 장치가 가지고 있는 정보적 특성 등을 고려해 보았을 때, 드론이 공중에서 전파혼선과 같은 불특정한 원인으로 오류가 발생하여 분실 혹은 추락하게 큰 피해를 유발한다. 평소 항공에 관하여 관심이 많아 이와 관련된 정보탐색을 하던 중, 무인항공기의 기술적 발전이 있었으나, 정작 관련된 사고처리와, 문제점이 발생하면 대응할 방법 및 제도가 미흡하다는 점을 주목 하였다. 이를 개선하고자 관련된 선행연구를 조사하였는데 주로 역사적 항공기 실종 및 항공사고, 최근 드론상용화 국가에서의 사고 발생사례 등을 찾아보았다. 선례를 분석하는 과정에서 최근 항공기 실종사건 (MH370편(777-200ER) 에 주목하였다. 실종 항공기(MH370편)를 추적할 때 기후 및 지리적 특성으로 인해 수색하는데 난관을 겪었으나, 영국 통신위성인 인마르셋(Imarsat) 위성이 송출한 전자기파가 특정지역에서의 파장변화가 있음을 감지하였고 이를 통해 항공기 실종 수색범위를 획기적으로 축소할 수 있었다. 이에 착안하여 전자기파가 특정 물체와 상호작용을 하게 되어 파장이 길어지는 효과(도플러 효과, Doppler Effect)를 바탕으로 동일한 항공체인 드론(무인항공기)에 접목하고자 하였다. 항공기체의 위치 파악 및 이동경로를 분석함으로서 기존의 항공안전시스템을 혁신하여 보다 안정화된 시스템 무인항공기 제어인프라 시설을 구축하고자 하였다.
2. 선행 연구 조사
가. 3축 자세제어와 짐벌 구조 카메라를 사용한 목표물 추적 및 영상획득을 위한 캔위성 개발 및 운용에 관한 연구 - 한국항공우주학회 2014년도 추계학술대회(2014.11.)
본 연구의 주 임무는 캔위성(OWLSAT)이 목표물을 추적하고 영상을 획득하는 것이었다. 본 팀은 주 임무를 수행하기 위해서 반작용 휠을 사용하여3축 자세제어 시스템을 제작하였고, 2개의 서보모터를 이용하여 짐벌 시스템의 카메라를 제작하였다. OWLSAT을 모델링하여 비선형 시스템을 획득하였고, 제어법칙을 결정하기 위해Lyapuonov Stability Theorem을 이용하였다. OWLSAT은 로켓에 탑재되어 발사 후 지상500m에서 분리되어350m부터3축 자세제어를 구현하며 지상국으로 데이터를 송수신하였다. 낙하고도200m지점부터는 짐벌 시스템이 좌표 변환 알고리즘에 따라 목표물을 추적하며 짐벌 시스템에 부착된 카메라가 영상을 획득하여 임무를 수행하였다. 본 논문은OWLSAT을 소개하고 주 임무 분석내용과 운용결과를 설명하였다.
나. 소형 무인항공기 시간영역 시스템 식별(2012.4.)
무인항공기 시스템을 정확히 식별하는 작업은 모델기반 제어기를 설계하고 성능을 검증하는HILS 와 같은 시뮬레이션을 수행함에 있어 매우 중요하다. 시스템을 식별하기 위해서는 풍동실험, 3 차원 설계, 공력해석을 통한 모델링 등 많은 노력이 요구된다. 본 연구에서는 비행시험을 통한 입출력 자료만을 이용하여 소형 무인기의 종/횡방향 선형 모델을 추정하는 최적화 방법을 연구하였다. 선형모델의 행렬성분을 최적화 변수로 설정하여 선형모델 시뮬레이션 결과와 비행시험 결과의 오차를 최소로 하는 행렬을 선택하였다. 선형모델의 초기값은 연립 선형방정식을 구성한 후 의사역행렬을 사용하여 결정하였다. 시스템 식별에 사용되지 않은 데이터를 활용하여 추정한 선형모델의 정확도를 검증하였다.
다. 단말 근접성 분석과 협력 GPS 위치 측정기법(2014.3.)
모바일 단말의 위치측정은 최근 위치측정의 정확성과 전력효율성 두 가지 관점에서 널리 연구되었다. 이 연구들의 궁극적인 목표는 위치측정의 정확성을 보장하면서 전력을 될 수 있는 한 적게 사용하는 것이었다. 게다가, 최근 단말의 연속적인 위치를 요구하는 애플리케이션들이 등장함에 따라, 위치측정의 전력효율성은 더욱 더 중요하게 되었다. 본 논문에서는 인접한 단말과의 협력을 통해 전력을 적게 사용하면서 높은 정확성으로 위치를 측정할 수 있다는 것을KAIST와NCSU 두 캠퍼스의 단말의 이동 데이터로부터 근접성을 분석하고, 분산화된 전력 효율적인 위치측정 알고리즘을 제안하였다. KAIST 트레이스 기반의 시뮬레이션을 통해, 제안한 알고리즘이 전력 효율성 측면에서 단말간 협력을 하지 않는 경우 대비 최대62%의 전력절감 효과가 있는 것을 보이었다.
II. 이론적 배경
캔위성 제작을 위해서는 첫 번째로 이미지 분석을 위한 라즈베리파이 코딩. 두 번째로 지상 통신국과 서버 통신. 세 번째로 하드웨어 배치 및 전기전력 설계. 다음으로는 도플러 레이더를 이용하여 거리와 방향, 경로를 측정할 알고리즘을 작성. 여섯 번째로는 전체적인 알고리즘과 여러 개의 마이크로프로세서들 사이에서 데이터 전송을 할 수식과 코드 작성. 마지막으로 메인보드 코딩으로 총 7가지 단계로 나누어진다.
하드웨어 : 하드웨어는 전자회로의 효율적 배치를 필요로 한다. 또한 낙하산 사출기 제작은 캔 인공위성이 하락하고 있는 상황에서 낙하 시간을 최소화 하여 낙하할 수 있도록 한다. 이로써 도플러 레이더로 물체를 인식하고 OpenCV를 통하여 물체를 분석할 수 있도록 함을 목표로 하고 있다. OpenCV 제작에 있어 카메라의 배치, 공중에서 위성의 물리적 제어, 도플러 레이더 전자기파 송출범위 등을 고려한 하드웨어 제작이 필요하다. 도플러 레이더는 부품과 보드를 연결하여 추적 대상 비행체의 방향과 속도, 고도 등을 추적할 수 있도록 알고리즘을 작성하고 도플러 효과를 이용한 물리적 현상을 이용하여 효율적인 계산을 진행할 수 있도록 한다.
소프트웨어 : 소프트웨어는 상공에서도 원활한 통신이 이루어지도록 설계되어야 한다. 개별적으로 지상국을 제작하여 블루투스를 이용하여 통신하려 하였으나 인공위성연구소 측에서 무료로 배포 중인 지상국을 사용하는 것이 안정적일 것이라 판단되어 대회측에서 제공한 것을 사용하되 이미지 인식과 레이더를 시각적으로 보여줄 수 있는 프로그램을 제작하여 나타낼 수 있도록 한다.
가. 캔위성 내부 소프트웨어(아두이노, 라즈베리 파이)
- 캔 위성 다음으로 중요한 지상 기지국 제작과 아두이노를 이용해 서버를 구축하고 데이터를 송수신하는 것, 도플러 레이더 코드 작성, 라즈베리파이와 openCV 라이브러리를 활용하여 딥러닝 기반 이미지 분석 알고리즘 코딩하는 것으로 나뉘어 진다. 캔위성에 이용되는 소프트웨어의 전체적인 알고리즘을 작성하여 일련의 데이터들의 전송 방향과 과정, 전송 데이터를 암호화 및 일련의 문자열로 바꾸어 송수신하는 수식과 코드를 작성하는 것을 목표로 한다.
나. 지상국
- 고도에 따른 캔위성 자세정보(회전각 정보), 위치정보(GpS정보) 및 최소한 1개 이상의 탑재체 데이터를 ( (예) 지상관측영상) 지상국에서 수신하여야 한다. 주로 위성의 통신부와 긴밀한 관계를 지니며 도플러 센서 (HB-100) 를 비롯한 아날로그 값 및 디지털 값을 입력받아 이를 지상국 자체 컴퓨터로 입력받는다.
Ⅲ. 연구 내용 및 결과
가. 캔위성이란?
- 캔위성(Cansat)은, 1998년 스탠퍼드대학의 로버트 트윅(Robert Twiggs) 교수에 의해 제안된 교육용 위성모사 프로그램에서 사용한 위성으로, 위성의 역할을 모사하는 구조계, 전력계, 데이터처리계, 통신계, 탑재체 등의 기능을 작은 캔내에 구현한 데서 Can+satellite의 유래를 찾을 수 있다. 캔위성을 발사하여 고공에서 낙하하면서 짧은 시간동안 임무를 수행하는 것이 특징이다.
나. python과 openCV 프로그래밍 언어
- python은 컴퓨터 프로그래밍 언어로 수많은 라이브러리와 모듈을 지원하여 웬만한 작업은 처리할 수 있는 만능 프로그래밍 언어로 불린다. 또한 문법이 간결하여 처음 배우는 사람도 빠르게 익힐 수 있으며 쉽게 다양한 기능을 구현할 수 있다.
openCV 라이브러리는 python과 C++ 기반의 라이브러리이다. 다양한 수식들을 함수로 지원하며 이미지인식에 쓰이는 인공신경망인 CNN(Convolution Neural Network)을 구현하기 쉽다. 즉 python 코드를 통해 openCV 라이브러리의 함수를 적절히 이용한다면 이미지인식에 특화된 프로그램을 제작할 수 있다.
다 . 도플러 효과 기반 도플러 센서 모듈 (HB100- Breakout Board)
다-1 도플러 효과
도플러 효과란 어떤 파동의 파원과 관찰자의 상대 속도에 따라 진동수와 파장이 바뀌는 현상을 가르킨다.
다-2 도플러 센서
위 센서는 도플러 효과를 기반으로 하는 모듈이다. 도플러 효과를 기반으로 하는 센서는 크게 전자기파 발생부, 전자기파 수신부, 송신 및 수신시 시간 간격을 측정하는 프로세서, 그 외로 구성되어있다. HB100 BreakoutBoard 이외에도 많은 모듈이 존재하지만 전자기파 특성상 많은 방해를 받기 때문에 전파 송신 및 수신 거리가 비교적 짧은 편으로 약 10m 내외이다. 연구에 사용하는 도플러 센서는 기존의 HB100 도플러 모듈을 업그레이드 한 것으로 약 5m가량 거리가 늘어났다.
void loop(){
pp = FreqPeriod::getPeriod();
if(pp){
Serial.print("frequency : ");
lfrq = 16000400.0 / pp;
Serial.print(lfrq);
Serial.print("Hz");
Serial.print(lfrq/31.36*1.60934);
Serial.prinln("km/h");
delay(200);
도플러 센서의 작동원리는 도플러 모듈에서 VOUT을 통해 송신한 전자기파가 측정하고자 하는 물체에 방해받은 뒤 다시 되돌아와 수신부까지 돌아올 때 발생하는 시간차이를 이용하여 얻은 값을 바탕으로 진동수 값을 계산, 계산한 진동수를 바탕으로 센서 제조사에서 제공한 공식에 대입하여 속도 값을 측정한다.
도플러 센서의 코드 구조는 아래와 같다. 도플러 센서는 기본적으로 아두이노와 연계되어 작동된다. 본 캔위성 4층에 아두이노 미니 (Arduino MINI) 와 FTDI모듈을 사용하여 통신을 진행하였음. 캔 위성의 MSG를 통해 아두이노 미니로 부터 얻은 도플러 센서 값을 전송하였으며 값을 만일에 대비하여 저장하기 위해 SD모듈을 구비하였다. 저장되는 값의 형태는 <표 1>과 같다.
라. 이미지 시각화 기술
프로세싱은 컴퓨터 프로그래밍의 일종으로써, 데이터 값을 시각적 개념으로 나타내기 위함에 목적이있다. 오늘날 각 분야간의 융합이 일어남에 따라 프로그래머가 아닌 일반인 혹은 예술가에게 프로그램과 관련된 지식교류가 이루어지고 있으며 프로세싱이 아두이노와 함께 대표적으로 사용되고 있다. 이는 뉴미디어 아트, 시각 디자인 공동체에서 주로 사용되고 있다.
프로세싱은 MIT(Massachusetts Institute of Technology) Open Lab 에서 개발한 JAVA언어의 개발 툴으로써 현재 무료배포에 진행되고 있다. 프로세싱의 코딩은 크게 두 가지 파트로 이루어져 있으며 void setup, void draw 가 있다. Void draw는 프로세싱 고유의 특징으로서 위 파트에서 코딩한 값을 바탕으로 이미지 시각화 기술이 이루어진다. 프로세싱은 다양한 함수로 구성되어 있는데 Structure 계열의 함수, Environment 관련 함수, Data 관련함수, Composite 관련 함수, Conversion 계열 함수, String function 및 Array function 계열의 함수등이 있다. 관련된 함수는 Processing Reference에서 학습할 수 있다.
마. 하드웨어
- 캔위성은 크게 본체부, 탑제부, 고공 낙하를 위한 낙하부, 지상과의 통신을 위한 지상부로 구성되어 있다. 본체부는 세부적으로 구조부, 전력부, 통신부, 데이터처리부, 기본 센서부로 구성되며, 탑재부는 카메라부와 확장센서부로 구성되었다.
마–1. 구조부
- 구조부는 캔위성의 개발, 발사, 낙하와 착지 등의 환경에서 캔위성을 구조적으로 보호하는 역할을 담당한다. 캔위성는 음료수 캔 정도의 아크릴 케이스와 4개의 지지대를 이용하여 발사, 낙하, 착지 등에 따른 하중지지 기능을 수행하도록 한다. 또한, 낙하산을 이용하여 낙하, 착지 등에 있어 구조적 파손을 막는 기능을 수행하도록
마-2. 전력부
- 전력부는 캔 위성의 임무 수행에 필요한 전력을 공급하는 역할을 수행한다. 캔위성 기본키트의 주요 전자부품들은 5V 와 3.3V 전원을 사용하고 있으며, 배터리를 이용하여 5V와 3.3V를 생성하여 공급하도록 한다.
마-3. 통신부
- 통신부는 캔위성과 지상국간의 무선 데이터를 전송하는 역할을 수행한다. 캔위성 기본 키트에서는 블루투스를 이용하여, 수백미터 거리에서 영상데이터를 원활하게 송신하는 기능을 수행하도록 한다.
마-4. 데이터처리부
- 데이터처리부는 캔위성의 임무 수행에 따른 각종 데이터를 처리하는 역할을 수행한다. 캔위성 제작있어서 카메라 등의 여러 센서들과 통신부의 전자적인 기능을 구현하였으며, 마이크로프로세서를 이용하여 영상 및 각종 센서로부터 제공받는 데이터를 수집하여 통신부를 통해 지상 전송 역할을 수행하도록 한다.
마-5. 기본센서부
- 기본센서부는 캔위성의 기본적인 데이터 센싱 역할을 수행한다. 캔위성에서 자세정보 획득하기 위한 IMU 센서, 캔위성의 위도, 경도, 고도 등의 위치 정보를 획득하기 위한 GpS 센서, 캔위성의 기본 센서 동작을 체험하기 위한 2개의 조도 센서를, 기본센서로 구성하여 센싱 역할을 수행하도록 한다.
마-6. 카메라부
- 카메라부는 위성에 장착되어 있는 카메라를 통해 사진데이터를 전송하는 것을 목적으로 한다. 사진 데이터는 문자열로 나열하여 시리얼 통신을 통해 디지털 텔레메트리로 전송하되 각 사진은 ‘,’를 이용하여 구분하도록 한다.
마-7 낙하산부
캔위성 낙하 시 신속한 낙하산 전개를 위해 다양한 방안을 고안하였다. 낙하산 전개하는 방안을 선정할 때 고려한 조건은 아래와 같다.
1. 신속한 전개
2. 흔들림의 정도
3. 보유하고 있는 낙하산으로 구현 가능 여부
연구 목적 특성상 이미지 분석 처리과정이 있기 때문에 보다 흔들림 없는 영상 혹은 사진이 필요하다. 그러나 캔 위성 낙하 시 항력이 발생하기 때문에 흔들림이 심하다. 이를 해결하기 위해 학교 내의 높이가 있는 공간에서 낙하산은 여러차례 낙하하면서 안전성을 강화하는 테스트를 진행하였다.
낙하 시 불안정안정 요소는 아래와 같다
1. 줄 꼬임 현상
2. 바람으로 인한 위성의 흔들리고 회전하는 현상
안전성을 강화하기 위해 아래와 같은 장치를 고안하였다.
그림-가와 같은 장치를 3D프린터로 제작하여 낙하산 줄을 고정시켰다. 접착제를 사용을 줄일 수 있도록 홈을 판뒤 그 홈에 줄을 넣고 다시 끼우는 형태로 제작하였다. 그림-나 는 실제로 제작하여 설치한 사진이다. 낙하산과 캔위성의 고정은 D형 락을 이용하였다.
3. 제작 방법
가. 캔 위성
캔 위성의 하드웨어는 이하와 같다.(1층보드, 카메라 부품, BT부품, 안테나 부품, 2층보드, DMUX, IMY, uSD 등) 위는 기본적인 작동에 관련된 부품으로 위 부품 뿐만 아니라 항공체 식별을 위한 센서와 물리적 제어장치등을 추가로 설치할 것이다.
소프트 웨어는 크게 두가지로 나누어진다. 아두이노 (Arduino UNO) 와 라즈베리파이 로 구분이 된다. 아두이노는 본 캔 위성의 핵심제어 보드로서 라즈베리파이에게 명령을 내리고, 이로부터 값을 입력받아 인근 무인항공기 위치 및 openCV 영상 값을 비롯한 좌표값 등을 통해 지상국으로 전송하는 역할을 한다. 아두이노에서 도플러 센서(Doppler sensor, HB 100)을 통해 주변으로부터 물체의 움직임을 감지하고 해당하는 범위로 GoPRO 카메라(HERO6, 기본 모델) 을 라즈베리파이를 통해 작동하게 하였다. 위 과정에서 위성 특성상 발생하는 미미한 떨림 등과 같은 정확도 유지를 저해하는 요소를 차단하기 위해 2축 짐벌을 추가로 설치할 것이다. 이를 바탕으로 추가된 장치의 무게를 고려하여 낙하산을 기본 제공되는 낙하산이 아닌 특수재질을 통해 낙하산을 제작함으로써 위성의 안전성을 향상시킬 것이다
캔위성은 규격은 로켓추진체로 인해 정해져 있으므로 제작시 이에 유의하며 제작할 예정이다.
나. 지상국
지상국은 Cansat.GS(Satrec 에서 제작한 캔 위성의 통신 및 제어를 위한 지상국 프로그램), Processing, 파이썬(Python) 기반 OpenCV 프로그래밍을 통해 자체 시스템을 개발하였다. Satrec측에서 제공하는 온라인 교육자료를 바탕으로 캔 위성에 대해 전반적인 이해를 할 수 있었다, 캔 위성과 관련된 학습내용은 아래와 같다.
1. 캔 위성 기본키트 보드별 핀 구성 및 모듈점검 보드 확인
2. 캔 위성 아두이노 환경에서 프로그램
3. 캔 위성 데이터 활용
4, 캔 위성 기본 키트 프로토콜
5. 캔 위성 기본키트 데이터 처리개요
6. 캔 위성 기본 키트 구성요소
7. 캔 위성 기초 통신 및 통신 점검
8. 캔 위성 기본키트 충전기 제작
9. 캔 위성 지상국 SW실행 파일 및 개요
10. 캔 위성 기본 키트 층별 조립
나-1 도플러 센서
도플러 센서(HB100 Breakout)를 구비하고 관련 학습을 진행하였다. 도플러센서는 타 센서보다는 예민한 장치이기 때문에 일반적으로는 연결할 수 없다. 기존의 전파 송수신 가능한 15m범위를 더 늘리기 위하여 전파 증폭기를 제작하여 기능을 강화할 수 있다. 증폭기 회로는 아래와 같다.
아두이노 개발환경에서의 도플러센서는 상호호환이 가능하여 별도의 증폭기 없이 연결하여도 정상작동 하나 관측가능 범위가 장치를 달았을 때보다 좁아진다. 캔위성에서 도플러 센서와 증폭기를 추가적으로 장착하기에는 공간의 한계점이 있어 달지 않고 사용하였다.
위성을 제작하는 것이 연구의 주된 목적이기 때문에 위성의 경량화에도 주목을 하였음. 따라서 기존의 아두이노 보드를 사용하기에는 몇 가지 단점이 있다고 판단되었으며 한계점은 아래와 같다
1. 캔 위성 내부의 지나친 부피 차지
2. 최대한 경량화를 하기 위해 불필요하고 판단
- 도플러 센서와 아두이노 미니는 시리얼 통신을 통해 디지털으로 이루어진 값을 주고 받는다. 시간 차로 이루어진 값을 아두이노에서 계산 및 저장과 관련된 데이터처리를 진행한다. 관련 아두이노 코드는 아래와 같다
int doppler_div = 19;
unsigned int sample[AVERAGE];
unsigned int x;
void setup(){
Serial.Begin(115200);
pinMode(PIN_NUMBER, INPUT);
}
void loop(){
noInterrupts();
pulseIn(PIN_NUMBER, HIGH);
unsigned int pulse_length = 0;
for (x = 0; x < AVERAGE; X++){
pulse_length = pulseIn(PIN_NUMBER, HIGH);
pulse_length += pulseIn(PIN_NUMBER, LOW);
samples[x] = pulse_length;
}
interrupts();
unsigned int nbPulsesTime = samples[0];
for (x = 1; x < AVERAGE; x++){
if((samples[x] > samples[0] * 2) || (samples[x] < samples[0] / 2)){
samples_ok = false;
}
}
if (samples_ok){
unsigned int Ttime = nbPulsesTime / AVERAGE;
unsigned int Freq = 1000000 / Ttime;
Serial.write(Freq/doppler_div);
Serial.print("\r\n");
Serial.print(Freq);
Serial.print("Hz : ");
Serial.print(Freq/doppler_div);
Serial.print("km/h\r\n");
}
else{
Serial.print(".");
}
}
도플러 센서를 통해 얻은 관측하고자하는 물체의 속도 값을 캔 위성의 MSG(Message)를 통해 전송하였다.
다. 딥러닝 기반 이미지인식 프로그램
python과 openCV 라이브러리를 이용하여 작성할 프로그램의 알고리즘은 다음과 같다.
1) 캔위성에서 사진 촬영
2)산업용 블루투스 모듈을 통해 지상국으로 사진 통신
3) 지상국 프로그램이 사진을 받아 Log 폴더에 이미지 저장
4)이미지 이름이 “날짜+시간+로그값+순서”로 지정되어 있고 이미지 명은 캔위성 로그 폴더 내에 로그 파일에 ImageWrite 부분에 기록된다.
5) python 프로그램이 실행되면 로그 파일인 csv 파일의 데이터타입 열을 읽는다. 그 칸이 “ImageWrite”라면 사진 이름을 읽어온다.
6) 사진 이름과 디렉토리를 합쳐 로그 폴더 내에서 사진을 불러온다.
7) 불러온 사진에서 딥러닝을 한 필터를 적용하여 이미지인식을 실행한다.
8) 결과를 Console에 출력한 후 CVlog 파일에 csv 파싱 모듈을 통해 이미지 인식된 추적체의 좌표를 파싱한다.
9) 프로세싱 프로그램이 좌표를 읽어 레이더를 표시한다.
위와 같은 알고리즘을 바탕으로 프로그램 코딩을 계획하였다.
이미지인식 코드 설명 보기 : https://deepdeepit.tistory.com/36
가장 먼저 이미지인식을 하기 위해 openCV 모듈인 cv2 모듈과 csv 파일을 파싱 및 리딩할 수 있게 해주는 csv 모듈, 수학 계산을 numpy와 로그파일에 현재 시간과 날짜를 기록하기 위한 datetime 모듈을 import 한다.
csv 모듈을 이용해 캔위성 로그파일을 열어준 후 읽기 모드로 세팅한다.
while True 무한반목문과 for문을 이용해 계속 로그파일을 읽는다. 로그파일 내에 1번 인덱스는 수신받은 데이터의 종류를 기록하는데 이 인덱스에 ImageWrite가 있으면 사진이 들어왔다는 것이다. 즉 1번 인덱스가 ImageWrite일 때 3번 인덱스에 기록된 이미지의 파일명을 불러와 디렉토리와 문자열 합연산을 하여 디렉토리를 설정한 후 이 디렉토리의 이미지를 불러온다. openCV의 resize 함수를 이용해 사진의 크기와 비율을 조정한다. 이후 사진의 3차원 정보인 가로픽셀, 세로픽셀, 채널을 받아온다.
이중 for문을 이용해 사진의 (0, 0) 픽셀부터 (width, height) 픽셀까지 전부 검색한다. 이때 해당 픽셀이 바이너리 필터에 걸린다면 이 픽셀 수와 좌표를 기록해둔다.
이후 필터에 걸린 픽셀 수로 모든 좌표의 합을 나누어 좌표들의 평균 좌표를 구한다.
이후 다시 한 번 for문을 이용해 바운더리 필터에 걸린 부분, 즉 탁구공이라고 인식된 부분에는 mask를 생성하여 bitwise 함수로 배열을 추가하여 창을 띄운다.
이후 datetime 함수에서 현재 날짜와 시간 값을 받아와 시드로 지정한다.
시드 지정 코드 밑에는 4자리인 연도를 두 자리로 변환하는 코드와 한 자리이면 0을 붙여 두 자리로 변환하는 코드를 작성하였다. 즉 2018년 9월 12일이라면 4자리인 2018을 18로 변환하고 한 자리인 9를 0을 붙여 09로 변환하여 180912로 만든다. 이는 시, 분, 초에도 같이 적용한다. 즉 2018년 9월 12일 11시 47분 23초라면 180912114723이 로그의 시드 값이 된다.
이후 csv 모듈을 이용하여 CansatCVLog.csv를 로그파일로 지정하고 쓰기 모드로 세팅한다. 또한 같은 파일을 읽기 모드로 세팅하였다. 코드 맨 위에는 이전 로그를 기록할 수 있는 변수인 tempLog를 선언하였는데 이는 프로세싱을 위해서 위치벡터를 연산하기 위해 시점과 종점을 함께 기록하기 위함이다. 즉 파일 초기에 tempLog를 None값을 부여해 초기화를 한 후 프로그램이 실행되면 tempLog인 이전 로그를 1열, 현재 로그를 2열에 기록한다.
openCV 함수로 이용해 아까 옆에 그린 배열 창에 중심 좌표에 빨간 점을 그리고 탁구공의 크기에 맞게 노란색 원을 그린다.
마지막으로 imshow 함수를 이용하여 최종 제작된 배열을 이미지형태로 띄워준다.
이미지인식 코드에서 사용되었던 바인더리 필터를 머신러닝해 최적값을 찾는 코드이다.
먼저 RGB의 최소, 최댓값을 변수로 지정해준 후 노란색 샘플 값을 입력해준다. 이후 위 코드에서 사용되었던 방식으로 사진에서 탁구공을 뽑아내는데 이전에 검출된 탁구공과 비교해서 필터의 최소, 최댓값을 피드백한 에러 값으로 조절한다.
IV. 연구 목적
항공기 실종사건 (MH370편(777-200ER)) 에서 영국 통신 위성인 인마르셋 위성이 항공기 실종사고를 창의적 해결한 것에 주목하여 최근 우려되고 있는 무인항공기 관련 제도마련을 연구의 목적으로 하고 있다. 기존의 정확도가 높았던 GPS기술이 드론에게 있어 적합한지 의문점을 가지게 되었다. 기존의 GPS는 7.8m에서 3.5m 정도의 오차가 발생하며 이는 무인항공기체를 조정함에 있어 치명적이다. 따라서 해당하는 범위는 드론사고에 있어 오차범위 폭이 지나치게 넓고 이를 축소하여 정확도를 향상시키는 것을 목적으로 하고 있다. 기존의 드론의 위치파악 및 이동경로 분석에 있어 필요한 제도 및 프로그램이 미흡하여 사고 발생시 대처하는데 있어 제약이 많다는 것을 착안하여 소형 정지 위성 (이하 ‘캔위성’) 을 제작하여 해당 안전사고 방지 및 개선에 관한 알고리즘을 제작하고자 하였다. 본 알고리즘 제작을 통한 캔위성 제작 연구를 통해, 항공체 (항공기, 무인항공기, 조류 등) 관련된 관측 및 이동경로 분석의 효율성 확보, 위치추적 및 실종위치 탐색에 있어 정밀한 장치를 개발하는 것이 가능하게 될 것이다. 연구 이후, 위성수를 확대하여 전반적인 조류의 움직임을 감지하고 위 정보를 활용함으로써 매해 발생하는 AI조류독감)의 확산을 예방할 수 있는 긍정적 유인 개선에 기여함 또한 목적으로 구고 있다.
V. 예상 결과 및 기대효과
1. 기대 효과
도플러 레이더를 활용해 움직이는 물체의 위치를 파악하고 파악한 정보를 바탕으로 Open CV를 활용해 물체를 분석함으로써 다양한 방면에 활용될 수 있을것으로 예상된다.
가. 실종 드론, 항공기의 위치 예상
최근 드론 관련 산업이 발전함에 따라 드론 이용자 수가 급격하게 늘고 있다. 또한 이에 따라 실종되는 드론의 수도 늘고 있다. 하늘에서 날아다니는 드론은 다른 이동수단과 다르게 굉장히 위험하다. 드론이 하늘에서 실종 될 경우 저공비행 하는 비행기와 충돌, 고층 빌딩과 충돌하거나 새와 충돌하는 사고가 발생할 수 있다. 이러한 항공에서 발생하는 사고는 한번 날게 되면 인명피해가 크고 대처하기가 쉽지 않다는 특징을 가지고 있다. 캔 위성을 이용해 드론의 대략적인 위치를 파악하고 OpenCV로 드론이 맞는지 인식한 다음 드론이 맞으면 주변의 항공기나 헬기 등 비행체에 알리는 방식을 통하여 어느 정도 사고 예방이 가능할 것으로 예상된다. 4차 산업혁명 시대에 드론은 규제해야 할 것이 아니라 잘 활용해야 할 대상이다. 따라서 드론으로 인한 사고를 예방하는데 효율적으로 사용될 수 있을 것으로 예상된다.
나. 조류의 위치 분포를 통해 조류독감 확산 정도 파악
매해 우리나라는 조류독감으로 골머리를 앓는다. 조류독감은 새들을 통해 전염되는데 날아다녀 이동거리가 넓은 새들의 특징에 따라 조류 독감은 확산 속도가 빠르고 대처하기가 어렵다. 또한 조류독감이 어느 정도 분포해 있는지 파악하기 어려워 확산을 막기가 어렵다. 철새는 몰려다니는 특징이 있기에 각 철새 무리 중 한 마리씩 임의로 선택해 GPS와 조류독감을 알 수 있는 장치를 설치해 철새들의 위치를 대략적으로 파악하고 Open CV로 철새가 맞는지 분석하고 각 철새 무리의 이동을 지도에 나타낸다면, 조류독감의 확산정도를 보다 쉽고 빠르게 파악 할 수 있다. 확산정도를 파악한 뒤, 확산 되었을 것이라고 예상되는 지역의 표본을 채취해 전염 여부를 확인하고 그 지역의 방역을 한다면, 전보다 빠르게 조류독감에 대처할 수 있을것이라고 예상된다.
이뿐만 아니라 ‘캔위성을 이용한 움직이는 물체의 분석’은 군사적, 드론 택배 등 앞으로 더욱 많은 분야에 활용 될 것으로 예상되어진다.
2. 예상 결과
도플러 레이더를 이용해 물체의 위치를 파악하고 OpenCV를 이용해 분석하는 과정은 미래창조과학부와 인공위성 연구소 주최 ‘캔위성 경진대회’에서 이루어 질 예정이다. 해당 대회에서 제공하는 로켓이 캔위성을 탑제해 상공 350m로 발사한 뒤 낙하산을 전개한 채 하락하는 과정에서 진행 될 것이다.
발사 당일 바람과 지형 특성상 드론이나 글라이더와 같은 타 비행체를 운용하는 것이 불가능하였다. 이러한 이유로 당일 어떻게 이미지인식과 도플러 효과를 통해 비행체 식별과 이동경로 분석을 진행할 수 있을지 고심하였다. 최종 채택된 아이디어는 위성 하부에 실로 탁구공을 매달아 이를 측정하자는 것이었다. 실제 위성의 무게와 크기와 비슷한 모형을 제작한 후 카메라와 탁구공을 달아 낙하실험을 2번 진행해 보았는데 탁구공의 흔들림이 측정하기 적당하다고 판단되어 채택하게 되었다.
VI. 결론
가. 데이터 분석
가-1 GPS 데이터
캔위성에서 GPS $GPGGA 데이터를 지상으로 전송한다. 이때 데이터의 전송형태 다음 그림과 같다.
여기서 N은 전송되는 데이터의 길이를 의미하고 $GPGGA 형태의 GPS데이터를 통해서는 시간, 고도, 위도, 경도를 알 수 있다. 캔위성 발사시 로켓에서 낙하하면서 전송받은 데이터는 <표 3>과 같다.
캔위성 낙하시 이름, 시간, 위도, 경도, 품질, 위성수, 고도, 타원으로 계산한 지구와 구로 계산한 지구의 고도차이를 의미한다. 이러한 데이터를 바탕으로 Google Earth에서 3D로 경로를 그리기 위해 GPSVisualizer 사이트를 이용하였다. 위도, 경도, 고도 데이터를 바탕으로 KML파일 형식으로 변환하여 위성이 낙하한 경로를 나타내었다.
[그림 11]는 kml로 변환한 파일을 바탕으로 3D로 캔위성의 낙하경로를 시각화 한 것이고 은 GPS 고도 데이터를 그래프로 나타낸 것이다. GPS고도 데이터를 통하여 캔위성은 최대 347m 이동한 것을 알 수 있고 133번째 로그부터 낙하하기 시작한 것을 알 수 있다. 133번째 데이터가 전송된 시각은 24510이고 마지막으로 데이터가 전송된 시각은 24714로 204초 동안 낙하하였음을 알 수 있다.
가-2 ATLM 데이터 분석
[그림 12]는 캔위성으로부터 ATML로 전송받은 조도센서의 데이터 변화를 그래프로 나타낸 것과 GPS 고도 데이터를 그래프로 나타낸 것을 비교한 표이다.
그래프를 비교하면 GPS 고도 데이터를 통해서는 위성이 125번째 데이터에서 낙하하기 시작하였음을 알 수 있고 조도센서 데이터로도 126번째 데이터로부터 낙하하기 시작하였음을 알 수 있다.
나. 도플러 데이터 및 이미지 분석처리(이동경로 분석)
나-1. 이동거리 분석 방법
이미지 분석을 통하여 사진에서 색을 분별하는 필터를 통하여 탁구공의 중심점을 잡고 그 위치를 좌표로 나타낸다. 이후 이 좌표를 CSV파일로 저장한뒤 이 파일을 Processing에서 읽어와 이를 좌표로 나타낸다. 이때 이미지 분석을 통하여 얻은 좌표를 바탕으로 사진과 사진 사이의 탁구공의 위치 사이의 직선거리를 구한다. 이를 통하여 이미지로부터 이동거리를 구한다.
도플러 속도 데이터는 1초 간격으로 탁구공의 속도를 측정한다. 이를 바탕으로 평균 속력을 계산하고 이를 적분하여 이동거리를 계산하게 된다. 캔위성으로 임무를 수행하게 될 경우 위성의 전송속도 한계로 인하여 1초 간격으로 데이터가 전송되기 때문에 어느정도 오차는 존재한다.
나. 최종 결론
[그림 14]의 그래프는 이미지 분석 처리를 이용하여 분석한 이동거리와 도플러 속도 데이터를 이용하여 분석한 이동거리를 1초 간격의 이동거리를 나타낸 것으로 전반적으로 본 연구에서 이동거리를 측정하기 위해 연구하였던 이미지 분석, 도플러 센서, 2가지의 기법을 활용하여 보다 정확한 이동거리의 추정이 가능하였음을 알 수 있다.
위 그래프를 통해 도플러 효과를 이용하여 측정하고 있는 주변지역의 항공체를 식별 및 속도 값을 측정하여 정밀한 데이터를 얻을 수 있었다. 또한 실제 물체의 움직임을 바탕으로 제작된 이미지 분석의 결과와 위 도플러 센서로 감지한 값이 상당수 일치함을 확인할 수 있었다. 이를 통해 항공기체의 이동경로를 분석할 수 있음을 알 수 있고, 새로운 형태의 항공시스템제어기술을 확보할 수 있었다.
VII. 제언
캔 위성 제작 및 심화 연구활동을 통해 항공기 실종사고 문제에 대한 새로운 형태의 대책을 제시할 수 있었다. 본 연구에서는 기술 및 캔위성경연대회의 환경적 제약으로 인해 제한적인 이동경로 추정, 분석 데이터만 얻을 수 있었으나 향후 추가적인 연구를 통해 보다 실제 항공체에 가까운 물체에 대해서도 이동경로 추정, 분석이 가능할 것으로 생각된다.
VIII. 선행 연구 조사 목록
1. 아두이노 활용을 통한 도플러 네트워킹 인프라시설 구축에 관한 연구
http://www.hardcopyworld.com/ngine/aduino/index.php/archives/2360
2. 아두이노 도플러 센서 (HB100) 활용에 관련된 연구
https://github.com/phillipnelson/experiments/tree/master/doppler
3. 아두이노 도플러 센서를 통한 사물의 움직임 관찰에 관한 연구 공유 포럼 (일부발췌)
4. 영상후처리를 통한 캔위성 3차원 위치 추정에 관한 연구
http://www.dbpia.co.kr/Journal/ArticleDetail/NODE07090493
5. 3축 자세제어와 짐벌 구조 카메라를 사용한 목표물 추적 및 영상획득을 위한 캔위성 개발 및 운용에 관한 연구
http://www.dbpia.co.kr/Journal/ArticleDetail/NODE06294723
6. 국소영역 정찰을 위한 캔위성의 설계 및 운용에 관한 연구
http://www.dbpia.co.kr/Journal/ArticleDetail/NODE06294722
7. 소형 무인항공기 시간영역 시스템 식별에 관한 연구
http://www.dbpia.co.kr/Journal/ArticleDetail/NODE01838562
8. (단말 근접성 분석과 협력 GPS 위치 측정 기법에 관한 연구)
http://insight.dbpia.co.kr/article/related.do?nodeId=NODE02136612
9. Processing관련 영상출력장치 소스 툴 개발과 csv통신에 관한 연구
https://processing.org/reference/Table.html
https://processing.org/reference/loadTable_.html
https://processing.org/reference/saveTable_.html
https://www.processing.org/tutorials/data/