- 현재 스마트폰의 GNSS정보를 통한 위치획득의 현저히 낮은 정확도
Gaim
을 통해 향상시키다. - 여러 정보를 가져와 사용할 필요없이 GPS정보 하나만을 통해 기존보다 높은 정확도의 위치정보 획득
- 실시간 현재 위치 정보를 보정 전과 보정 후 정보를 비교하여 사용자들에게 얼마나 보정 되었는지 확인할 수 있게 하여 신뢰도를 높인다.
- 한가지 좌표로 고정된 정보만을 제공하는 것이 아니라, XYZ 좌표, 위경도 좌표 두가지 모두 보정한 위치 정보를 제공하는 서비스 제공
- 현재 스마트폰의 위치정보를 얻는 과정은 GNSS 측위과정을 통해 얻고 있지만, 이는 현저히 정확도가 떨어진다. 단순히 우리 일상생활 속에서 길을 찾거나 할때는 물론 문제가 없겠지만, 높은 정확도를 요구하는 일을 할때는 사용할 수 없는 데이터이다.
- 데이터 값을 받아올때, GPS 정보만을 이용하여 오차를 보정해주는 알고리즘을 개발하자.
- 위와 같이 개발이 된다면 GPS정보만을 이용하기 때문에 시간적인 면에서도 빠르고 정확도 측면에서도 향상될 것이다.
이 프로젝트의 핵심은 GPS 정보를 어떻게 보정할 것인지에 대한 것이다.
이를 해결할 방법은 3가지로, DGPS, DD, SSR이 있는데 이번 프로젝트에선 DD(Double Difference) 을 사용
- 이중 차분 기법(Double Difference) 이란?
이중 차분 기법은 수신기 간 단일 차분 (Between-Receiver Single Difference)과 위성 간 단일 차분 (Between-Satellite Single Difference) 기법을 결합함으로써 수신기 시계오차, 위성 시계오차와 수신기 및 위성 하드웨어 오차를 제거할 수 있다. 또한 이중 차분 기법에서 수신기 간 기선거리가 짧을 때는 대류권과 이온층 오차까지 상쇄시킬 수 있다.
따라서 이중 차분 기법을 측위에 적용한다면 대류권과 이온층 효과를 무시할 수 있고 또한, 수신기 시계오차에 대한 미지수를 설정하지 않아도 되므로 단독 측위 (Point Positioning)보다 비교적 단순한 측위 알고리즘으로도 높은 측위 정확도를 확보할 수 있다.
![image](https://private-user-images.githubusercontent.com/100525337/239670050-26017fba-2b48-47ac-bedc-2c2c857d3163.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMTU1OTEsIm5iZiI6MTczOTMxNTI5MSwicGF0aCI6Ii8xMDA1MjUzMzcvMjM5NjcwMDUwLTI2MDE3ZmJhLTJiNDgtNDdhYy1iZWRjLTJjMmM4NTdkMzE2My5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjExJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMVQyMzA4MTFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mZDNjNTA3NjU1NzE4MmQ3ODZlN2VjZmE3NzdlYzg4YTg3OGRmOGVhMWQ4YTNkODNhNTkwMTk3YjkwNWMwNzU5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9._yelBTkBcXYf0PnSxLP9pBO0nLhNAdQae5fbbjWzoZM)
- GNSS 원시 데이터 처리 과정
![image](https://private-user-images.githubusercontent.com/100525337/239670070-96c66950-804b-4ccf-b827-d2890574cc7a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMTU1OTEsIm5iZiI6MTczOTMxNTI5MSwicGF0aCI6Ii8xMDA1MjUzMzcvMjM5NjcwMDcwLTk2YzY2OTUwLTgwNGItNGNjZi1iODI3LWQyODkwNTc0Y2M3YS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjExJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMVQyMzA4MTFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00Zjg0MGI0M2UzOGM4MjUyM2U0NzRlMWJjZTc5ZWUzMTY5YTc5YmU5ZDNkNjVkYzgxZWRiNjZkMGE4OGM2NTA4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.lYzlX1rNImg67VSlPD9Sx-dP0QpXrbWymRaptuHw1J8)
실시간으로 스마트폰으로 얻은 raw data
를 디코딩하는 작업을 했다. 왼쪽의 이 raw data
는 아직 관측값으로 변환되지 않은 상태이다. 오른쪽 영상은 매 초 수신되는 이 raw Data
를 실시간으로 관측값으로 변환하여 표시하는 화면이다. 이렇게 변환된 관측값은 스마트폰의 좌표
를 구하는데 사용된다.
- 기준국 데이터 불러오기
![image](https://private-user-images.githubusercontent.com/100525337/239670095-14b3c998-2d35-464e-b7a4-b28ca45ed64b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMTU1OTEsIm5iZiI6MTczOTMxNTI5MSwicGF0aCI6Ii8xMDA1MjUzMzcvMjM5NjcwMDk1LTE0YjNjOTk4LTJkMzUtNDY0ZS1iN2E0LWIyOGNhNDVlZDY0Yi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjExJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMVQyMzA4MTFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iMWI2Y2U1MTc0NDFkZDc5Y2IyODU4NzdlYWI2OThhMDljMzY4ZWNmMWU4NWNlYWQzZTIwMjUwZTFkMmUwZDBlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.6twyV9DAEmVtdmYfdc15XX5hvVJg8Cr0J8qDwLMDSqo)
왼쪽의 웹페이지는 PPHQ의 관측값 데이터 RTCM
을 수신하여 매초 저장하고, 출력하는 화면이다. 매초 스마트폰에서 이 웹페이지에 출력된 텍스트를 읽어, PPHQ의 실시간 관측값을 가져온다.
- 궤도력 데이터 불러오기
![image](https://private-user-images.githubusercontent.com/100525337/239670110-fe8962d3-312c-48d6-a7cf-3495987f3d60.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMTU1OTEsIm5iZiI6MTczOTMxNTI5MSwicGF0aCI6Ii8xMDA1MjUzMzcvMjM5NjcwMTEwLWZlODk2MmQzLTMxMmMtNDhkNi1hN2NmLTM0OTU5ODdmM2Q2MC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjExJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMVQyMzA4MTFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lNjcwNmU3MjEyZjJiYzI1NTBkMWJhYTJlYmIyNTM4NDY1MmQ0NzE3MmU2MzNiOWU1OTRkYmY3NzhmN2IzY2E0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.6-nUCQEY-qVzmpTA9PF6a3kJSASMjf_5HqvroM7jtNI)
이 웹페이지는 위성의 위치를 계산하는데 사용할 궤도력 데이터가 저장된 웹페이지이다.
PPHQ의 관측값을 불러오는 것과 마찬가지로, 웹페이지를 읽어 위성 별 궤도력 데이터를 가져와 위성의 위치를 계산할 수 있다.
- 측위 코드 구현
위의 가져온 정보들을 통해 DD 알고리즘(측위코드)
을 구현했다. 기존 Matlab
을 통해 구현 했고, 여기서 측위코드의 성능을 확인보았다.
![image](https://private-user-images.githubusercontent.com/100525337/239670247-1c1a156f-79bd-4db0-94c2-f483d2f4f242.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMTU1OTEsIm5iZiI6MTczOTMxNTI5MSwicGF0aCI6Ii8xMDA1MjUzMzcvMjM5NjcwMjQ3LTFjMWExNTZmLTc5YmQtNGRiMC05NGMyLWY0ODNkMmY0ZjI0Mi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjExJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMVQyMzA4MTFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02MWM0ZWQ4M2VjY2M0ZmNkNmJjMjk2NTQ2MDUwZmM1MGEwNjczNjdjZGEzOTdhYTMwMTUyNzA0ZjRiZmM3Y2U0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.pzl7qJgSfc2zSiZJXQ1GLa0fHNQyNOpnnQ_zAqxvXOA)
실제로 수평오차는 3.51 m → 2.00 m 로 43%정도 오차가 감소 하였고, 수직오차는 5.73 m 에서 3.68 m 만큼 감소한 것을 확인했다. 이후에 이를 Java코드로 수정 하였고, 이를 안드로이드 스튜디오에 적용시켰다. 적용하여 나온 값을 아래와 같은 어플리케이션 형태로 개발하였다.