2016년 5월 12일 목요일

Arduino GPS, Altimeter (고도, 기압계) 로 놀기 - 3편 (A-GPS 사용을 위한 공부)

'뭘 할지' 가 여전히 떠오르지 않아서 머리에 휴식도 줄겸 A-GPS 에 관해서 좀 찾아 봤다.
매번 GPS 초기화를 위해서 몇분의 시간을 소모하는게 아까워서 내가 사용하는 ublox 의 NEO-6MV2 는 A-GPS 를 사용할 수 있는지 궁금했다. Product Summary 를 보니 ublox 에는 Assisted GPS 를 AssistNow 라는 이름으로 사용이 가능한 것 같았다. offline / online 서비스가 있고, 무료/유료 서비스가 나뉘어져 있는 듯 하다.

그럼 A-GPS 를 사용할 수 있다는 얘긴데, 호기심이 생기기 시작했다.
내가 이해한 A-GPS 동작 방식은 almanac 과 ephemerides 정보를 외부로 부터 제공받아 GPS 에서 재활용 하는 것인데, 그렇다면 어떤 방식으로든 정보를 획득 한 뒤 NEO-6MV2 에 write 해 주는 과정이 필요한 것 같다. 그런데 TinyGPS 에는 read 만 있을 뿐, write 는 보이지 않는다. 혹시나 싶어서 TinyGPS Plus 나 ++ 버전 코드를 봐도 마찬가지이다.

그래서 arduino 에 국한하지 않고 PC 에서는 어떻게 사용하는지 찾아 봤더니, u-center 라는 windows 용 application 이 ublox 에서 제공되고 있었다. ubuntu 를 주로 사용하는 나같은 사람을 위해 wine 에서 사용하는 가이드도 친절하게 제공 되고 있었다. 그럼 일단 사용해 볼까?
우선 GPS 를 USB to Serial 를 사용해서 PC 에 연결했다.
u-center 를 사용하기 위해 USB to Serial 에 직접 연결한 모습
사실 arduino RX / TX 를 그대로 사용해도 무방하다. 다만 arduino Serial 의 baudrate 에 맞춰서 설정을 바꿔 주면 된다. 나는 arduino serial 은 115200 을 사용했기 때문에 u-center 설정을 같이 맞춰주니 잘 동작했다.

그리고 u-center 를 아래 guide 에 따라서 설치하고 (나는 wine 사용 가이드를 따랐다),
https://docs.zubax.com/zubax_gnss/tutorials/using_with_u-blox_u-center

윈도우에서는 바로 실행하면 되는데 ubuntu 에서는 u-center 설치를 하고 아래 과정을 해 줘야 한다.
[ 1592.632345] usbcore: registered new interface driver pl2303
[ 1592.632381] usbserial: USB Serial support registered for pl2303
[ 1592.632411] pl2303 4-1.3:1.0: pl2303 converter detected
[ 1592.634038] usb 4-1.3: pl2303 converter now attached to ttyUSB0
나는 pl2303 USB to Serial 을 사용하고 있고 ttyUSB0 로 잡혔기 때문에 이렇게 해 줬다.
$ ln -s /dev/ttyUSB0 ~/.wine/dosdevices/com1
COM1 에 연결 했기 때문에 Receiver 설정을 COM1/9600 으로 선택해 주면, 일정 시간이 지난 뒤 아래와 같은 결과를 얻을 수 있다.
ubuntu 에서 wine 으로 u-center 를 실행한 모습
그런데 Tool 에 보면 AssistNow 에 대한 offline / online 기능이 보인다.
offline 은 자체 server 를 구동 시키는 듯 하고, online 은 ublox 에서 정보를 다운로드 해서 사용하는 듯 한다. 이를 위해 user/password 를 입력 해야 하는데, AssistNow 서비스 등록 양식 를 통해서 신청이 가능하다. 나도 일단 등록은 해 뒀다.
AssistNow 설정 화면
u-center 로는 AssistNow 를 사용 가능하다는 것은 이제 알았는데, arduino 에서는 어떻게 사용할까? 아직도 정확한 정보를 찾을 수 없어서 github 를 찾아 보니, MAX-7C 모델에 비슷한 작업을 한 것을 찾을 수 있었다.
절차를 살펴보면 python 으로 AssistNow online 정보를 획득해서 MAX-7C 에 write 하는 과정이다. 마찬가지로 NEO-6MV2 에도 같은 방법으로 사용이 가능할 듯 한다.

이제 거의 다 목적지에 온 듯 한데, arduino 용 write library 가 있을법도 한데 아직까지는 찾지 못했고, 실 사용시 이 과정을 하려면 esp8266 을 추가해서 online AssistNow 정보를 다운 받아서 booting 시에 write 해주고 사용하면 될 것 같다.

'뭘 할지'를 찾아야 하는데 이 작업을 시작하게 되면 한참을 돌아가야 할 것 같아서, 우선 이 취미는 킵~ 해 둬야 겠다.

댓글 없음: