[学习]RTKLib详解:rtksvr.c与streamsvr.c


本文是 RTKLlib详解 系列文章的一篇,目前该系列文章还在持续总结写作中,以发表的如下,有兴趣的可以翻阅。

[学习] RTKlib详解:功能、工具与源码结构解析
[学习]RTKLib详解:pntpos.c与postpos.c
[学习]RTKLib详解:rtkcmn.c与rtkpos.c
[学习]RTKLib详解:ppp.c与ppp_ar.c
[学习]RTKLib详解:ephemeris.c与rinex.c
[学习]RTKLib详解:sbas.c与rtcm.c
[学习]RTKLib详解:rtksvr.c与streamsvr.c
[学习]RTKLib详解:convkml.c、convrnx.c与geoid.c
[学习]RTKLib详解:datum.c、download.c与lambda.c
[学习]RTKLib详解:ionex.c、options.c与preceph.c
[学习] RTKLib详解:qzslex.c、rcvraw.c与solution.c



Part A : rtksvr

一、整体作用与工作流程分析

rtksvr.c是RTK(实时动态定位)服务器的核心模块,负责处理多源输入数据(如观测值、星历、SSR修正等),执行实时动态差分定位解算,并输出高精度定位结果。其工作流程如下:

  1. 数据输入:通过多个流(stream)接收原始观测数据、星历、SSR修正等。
  2. 数据解码:调用decoderaw解析原始数据或RTCM格式数据,提取观测值、星历等信息。
  3. 状态更新:通过updatesvr更新服务器状态,包括导航数据、天线位置、SSR修正等。
  4. 定位解算:利用RTK算法(如双差载波相位处理)计算移动站位置。
  5. 结果输出:通过writesol将解算结果写入输出流,并保存至缓冲区或监控端口。

二、函数详细说明

1. writesolhead:写入解算结果头部

  • 功能:生成并写入解算结果的头部信息(如坐标系、时间格式)。
  • 参数
    • stream_t *stream:输出流指针。
    • solopt_t *solopt:解算选项(如输出格式)。
  • 流程:调用outsolheads生成头部数据,通过strwrite写入流。

2. saveoutbuf:保存输出缓冲区

  • 功能:将解算结果存入环形缓冲区,支持多线程安全。
  • 参数
    • rtksvr_t *svr:RTK服务器结构体。
    • unsigned char *buff:待保存的数据缓冲区。
    • int n:数据长度。
    • int index:缓冲区索引(区分不同输出流)。
  • 关键操作:加锁(rtksvrlock)后复制数据至svr->sbuf[index],更新缓冲区指针nsb

3. writesol:输出解算结果

  • 功能:将定位结果写入输出流,并保存至缓冲区和监控端口。
  • 参数rtksvr_t *svr(服务器状态)、int index(流索引)。
  • 流程
    • 调用outsols生成标准解算结果,outsolexs生成扩展结果。
    • 通过strwrite写入流,并调用saveoutbuf保存数据。
    • 监控端口输出使用简化格式(solopt_default)。

4. updatenav:更新导航数据波长

  • 功能:计算卫星信号的波长( λ \lambda λ),用于载波相位解算。
  • 数学原理:波长公式为 λ = c / f \lambda = c / f λ=c/f,其中 c c c为光速, f f f为频率。
  • 参数nav_t *nav(导航数据结构体)。
  • 实现:遍历所有卫星和频率,调用satwavelen计算波长并更新nav->lam

5. updatefcn:更新GLONASS频率信道

  • 功能:同步不同数据流中的GLONASS卫星频率信道号(frq)。
  • 参数rtksvr_t *svr
  • 流程:遍历GLONASS卫星,从任意流中获取有效frq,更新其他流的导航数据。

6. updatesvr:更新服务器状态

  • 功能:根据解码结果更新导航数据、观测值、SSR修正等。
  • 参数
    • rtksvr_t *svr:服务器状态。
    • ret:数据类型标识(如1=观测值,2=星历)。
    • obs_t *obs:观测数据结构体。
    • nav_t *nav:导航数据结构体。
  • 关键逻辑
    • 观测值:筛选有效数据并排序。
    • 星历:更新GPS/GLONASS星历,确保时效性。
    • SSR修正:检查轨道与钟差IOD一致性,避免数据冲突。

7. decoderaw:解码原始数据

  • 功能:解析原始数据或RTCM消息,提取观测值、星历等信息。
  • 参数rtksvr_t *svrint index(流索引)。
  • 返回:解码结果状态(如1=观测值解码成功)。

三、函数调用关系图(Mermaid)

解析数据
更新星历
更新GLONASS频率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客不孤独

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值