前陣子在玩一些有趣的GPS開發版,發現到一顆雙頻多星系的GNSS晶片,ublox的F9P,這塊開發版本來要拿來做無人機上的GPS晶片使用,但當時的ardupilot韌體還沒有辦法支援這一塊GNSS晶片,因此就先查一下一些關於定位的技術,發現到有一個有趣的技術,稱之為RTK,簡單來說就是用一片放置於固定位置GNSS晶片來校正另一片具移動能力的GNSS晶片來達到毫米等級的定位誤差,當然在未來的文章中也會提到如何用這樣的晶片來校正無人載具的定位位置。
首先將RTKLIB的source code抓下來
git clone https://github.com/tomojitakasu/RTKLIB
接著將branch切換到2.4.3版本上
cd RTKLIB
git checkout rtklib_2.4.3
接著移動到app/str2str/gcc目錄下
cd app/str2str/gcc
然後編譯str2str
make
接著就得到str2str這個東西了
將F9P用USB連接到raspberry pi上
並執行下列指令
str2str -in stream[#...] -out stream[#...] [-out stream[#...]...] [options]
其中-in stream[#...]
以及-out stream[#...]
為輸入以及輸出的介面,可以是下列這幾種
serial: serial://port[:brate[:bsize[:parity[:stopb[:fctr]]]]]
tcp server: tcpsvr://:port
tcp client: tcpcli://addr[:port]
ntrip client : ntrip://[user[:passwd]@]addr[:port][/mntpnt]
ntrip server : ntrips://[:passwd@]addr[:port][/mntpnt[:str]] (only out)
file : [file://]path[::T][::+start][::xseppd][::S=swap]
因為F9P是透過USB直接連線到raspberry pi上,所以選擇serial
輸入即可,若需要以tcp server
的方式輸出,就使用-out tcpsvr://:port
其中port
則為需要開放這個服務的port
,移動站只要具備網路能力,就可以透過tcp/ip取得rtcm的校正資訊。
rtcm2 : RTCM 2 (only in)
rtcm3 : RTCM 3 (in and out)
nov : NovAtel OEMV/4/6,OEMStar (only in) oem3 : NovAtel OEM3 (only in)
ubx : ublox LEA-4T/5T/6T (only in)
ss2 : NovAtel Superstar II (only in)
hemis : Hemisphere Eclipse/Crescent (only in) stq : SkyTraq S1315F (only in)
javad: Javad (only in)
nvs: NVS BINR (only in)
binex: BINEX (only in)
F9P預設會輸出NMEA、UBX以及RTCM3,因此在這裡選擇輸入輸出皆可以使用的RTCM3即可
到此,已可以完成從F9P上取得RTCM3資訊並且以TCP/IP的方式傳送出去了