1. ntrip官方资料
http://software.rtcm-ntrip.org/
https://igs.bkg.bund.de/ntrip/download
2. rtklib手册
RTKLIB-rtklib_2.4.3b33/doc/manual_2.4.2.pdf
RTKLIB-rtklib_2.4.3b33/doc/doc/manual.docx
3. rtklib二次开发
https://github.com/libing64/learning_rtklib
4. 应用示例
rtcm3.x fiter and decoder
#if 0
for (it=rawData; it<rawData+len; it++){
unsigned char cFirst = *it;
if( 0xD3 == (cFirst & 0xFF) ){
unsigned char cTemp1 = *(++it);
// check reserved 6 bits == 0, 0xFC = 111111 00
if( 0 != (cTemp1 & 0xFC) ){
continue;
}
unsigned char cTemp2 = *(++it);
// read message length
nMsgLen = (cTemp1 & 0x03)*256 + (cTemp2 & 0xFF);
msgBuf[0] = cFirst;
msgBuf[1] = cTemp1;
msgBuf[2] = cTemp2;
// read message contents
for(unsigned int j = 0; j < nMsgLen; j++){
msgBuf[j+3] = *(++it);
}
// read CRC-24 parity
for(unsigned int j = 0; j < 3; j++){
crcBuf[j] = *(++it);
}
// perform CRC check
unsigned int crc_calculated = 0;
crc_calculated = crc_octests(msgBuf,nMsgLen + 3);
if(crc_calculated == (crcBuf[0] << 16) + (crcBuf[1] << 8) + crcBuf[2] ){
// parse the detail of RTCM
//nMsgID = msgBuf[3+0]*16 + (msgBuf[3+1] & 0xF0)/16;
nMsgID = getbitu(msgBuf, 24, 12);
#if LOG_RTCM
printf("
%d %d
",++num, nMsgID);
for(j=0; j<nMsgLen; j++) printf("%02x ",(uint8_t)msgBuf[j]);
printf("
");
#endif
rtcm_t *rtcm = malloc(sizeof(rtcm_t));
init_rtcm (rtcm);
for(j=0; j<nMsgLen; j++) input_rtcm3 (rtcm, (uint8_t)msgBuf[j]);
decode_rtcm3(rtcm, Ntrip_ctx);
free_rtcm (rtcm);
free(rtcm);
}
//continue;
}
}
#else
for (i=0; i<len; i++){
if (len > i + 5 && (rawData[i] & 0xFF) == 0XD3) {
// D3后面6bit为0,非0则不是
if ((rawData[i+1] & 0xff) >> 2 != 0) {
continue;
}
// 计算数据长度
int length = ((rawData[i + 1] & 0x03) << 8)
| (rawData[i + 2] & 0xff);
length += 6;
if (len < i + length) {
break;
}
// 获取数据并移除缓存
memcpy(&msgBuf[0], &rawData[i], length);
nMsgLen = length-3;
// 校验
if (checkRTCM(msgBuf, length) == true) {
// parse the detail of RTCM
//nMsgID = msgBuf[3+0]*16 + (msgBuf[3+1] & 0xF0)/16;
nMsgID = getbitu(msgBuf, 24, 12);
#if LOG_RTCM
printf("
%d %d
",++num, nMsgID);
for(j=0; j<nMsgLen; j++) printf("%02x ",(uint8_t)msgBuf[j]);
printf("
");
#endif
rtcm_t *rtcm = malloc(sizeof(rtcm_t));
init_rtcm (rtcm);
for(j=0; j<nMsgLen; j++) input_rtcm3 (rtcm, (uint8_t)msgBuf[j]);
decode_rtcm3(rtcm, Ntrip_ctx);
free_rtcm (rtcm);
free(rtcm);
}
}
}
#endif
5. 第三方补充
使用Rtklib进行PPP定位和RTK差分定位
https://www.jianshu.com/p/ccca8d06d9eb
RTKLIB 手册解读及代码调试知识总结
https://zhuanlan.zhihu.com/p/145313467