在家搭站 · 四步上手

四步搭一台自己的 RTK 基准站

一台刷好 Armbian 的旧电视盒子,一个能进基准站模式的 RTK 模块,一根能看见天空的天线。 装好开源的 2RTK Server,填上你的 Caster 地址,流动站当天就能拿到厘米级定位。

这一页只讲从拆包装到出数据,四步,中间不绕路。 刷机、坐标标定、中继、本地 Caster、电台这些都不在主线里,放在附篇单独讲。

Armbian / Debian 512 MB 内存够用 2RTK Server v3.1.3 RTCM 3.x 3 张实物图 + 6 张界面图

先说清:这个程序能干什么

它的活很简单——把一块 GNSS 模块变成一台能自己跑起来的 RTK 基准站。 从模块的串口读出 RTCM 3 差分数据,通过网络推给你的 Caster,野外的手簿、无人机、农机、测绘杆就能用上了。

具体做的事有这些:

  • 读模块、转出去。支持 CH340、CP2102、FT232 这类 USB 转串口,也支持原生 USB 的模块。
  • 三个出口,可以同时开。推到云端 NTRIP Caster;盒子里自带一台本地 Caster 服务局域网;或者把差分打进数传电台。
  • 把基站坐标修准。标定功能会自己驱动模块走完一整套命令,接 CORS、等固定解、取平均、写回,失败了还会把模块恢复原样。
  • 失败自动回滚。哪一步出问题,模块回到标定前的状态,不会留在半残配置里。
  • 一个网页管全部。配置、坐标、卫星、日志、固件检查,全在浏览器里点,不用登终端。

三种运行模式,搭建阶段你只会用到第一种:

模式作用什么时候用
serial从串口读模块,通过 NTRIP 分发出去基准站的正常运行状态
relay从别人的 Caster 拉一路流,再重新转发手头还没模块,或给已有基站做备份。见中继模式
none只读模块在本地显示,不对外输出台面测模块好坏。见看到这些,站就已经在干活了

整条链路只有五段,中间那台盒子并不参与计算:

室外天线窗外 / 楼顶
要看见天空
→
RTK 模块USB 串口
吐 RTCM 3
→
Armbian 盒子跑 2RTK Server
功耗 3~5 W
→
你的 Caster云端 / 本地
或电台
→
流动站手簿 / 无人机
农机 / 测量杆

容易搞错的一点:算坐标的是模块,盒子只负责搬字节。 RTCM 里的基站坐标是模块自己广播的,盒子既不改也不猜。所以主机要求低得很——1 GHz 的 ARM、512 MB 内存就够。

搭建流程:四步

按顺序来,每一步都能自己验证,不用回头猜。

① 备料盒子 + 模块
+ USB 线 + 天线
→
② 接线串起来加电
天线放出室外
→
③ 装程序盒子上
一条命令
→
④ 网页配置串口 + Caster
保存重启
→
出数据状态页看到
RTCM 在推
步骤做什么在哪做
① 准备材料凑齐盒子、模块、线、天线,盒子事先刷好 Armbian桌面
② 接线、架天线按图连起来加电,天线放到能看见天空的地方桌面 + 窗外
③ 装 2RTK Server盒子上粘一条命令,装完就开机自启盒子终端
④ 网页配置选串口、填 Caster,保存重启,看状态页浏览器

唯一的前置条件:盒子里得先有 Linux。出厂安卓是跑不了这个程序的。 如果你的盒子还是原厂系统,先看附篇一:把盒子刷成 Armbian,刷完回来接着做①(材料和接线不冲突,可以同时干)。

第一步:准备材料

就四样东西,摊开拍一张:

实物图:整套硬件——机顶盒、RTK 模块、USB 数据线、四臂螺旋天线及带磁吸底座的馈线
从左到右:机顶盒(已刷 Armbian)、RTK 模块、USB 数据线、 四臂螺旋天线(带磁吸底座的馈线)。这套是临时测试用的配置。
器件挑的时候注意什么
机顶盒能刷 Armbian 的型号,1 GB 内存、8 GB 存储(TF 卡或 eMMC)就够。树莓派、香橙派也一样
RTK 模块必须能设成基准站模式。LG290P 是本程序唯一做过真机验证的型号
USB 线必须是数据线,只供电的充电线插上去系统里看不到串口
天线临时测试:四臂螺旋 + 磁吸底座。永久固定:换 GNSS 测量蘑菇头 + 立杆,见天线怎么固定
供电5 V 稳压电源。劣质电源会让盒子反复重启,模块跟着重新搜星

临时测试 vs 长期跑,材料不一样

临时测试(当天验证)长期跑(固定站)
天线四臂螺旋,带磁吸底座GNSS 测量蘑菇头,带扼流圈更好
放哪吸在窗外,或者伸出去的窗台上楼顶或开阔地带的立杆顶端
馈线自带短线即可50 Ω 低损耗同轴,越短越好,接头做防水
坐标模块自收敛的够用,先跑通再说用标定定准,见坐标怎么定准

第二步:连起来,把天线放到室外

先确认一件事:模块得是基准站模式

这一步最容易被跳过,但它决定了后面有没有数据。模块出厂默认多半是流动站, 得先切成基准站模式、给它一个准确坐标,它才会往外吐 RTCM 差分数据。 否则盒子读到的是一串位置报文,Caster 那边什么都收不到。

两种做法,挑一种:

  • 官方工具测坐标、设模式。用模块厂家给的配置软件(Quectel 的 QGNSS、 u-blox 的 u-center 这类)连上模块,先让它收敛出一个坐标,再把工作模式设成基地站 / Base, 输出选 RTCM 3.x。具体菜单照厂家手册走,各家不一样。
  • 用本程序一键标定。懒得翻手册就走这条:装好程序之后打开标定页, 选一个方式点开始,程序会自己切模式、取坐标、写回模块,完事模块就是配好的基准站。 前提是程序已经装好(第三步、第四步),所以这条路要等装完再回来做。做法见附篇三:坐标怎么定准(一键标定)。

两条路的区别就一点:官方工具是你自己动手,看得见每一步在干什么; 本程序的标定是它替你改,还能顺手把坐标存进系统里。坐标精度取决于你等多久—— 十几分钟是分米级,要到厘米级得靠 CORS 或长一点的观测。

模块设成基准站以后再接线、上电。接线只有一根主线,模块自带 Type-C 口的, 一根 USB 数据线直接捅到盒子上就行:

接线顺序(模块自带 USB 口)
  ┌──────────────┐   USB 数据线   ┌─────────────┐
  │  Armbian 盒  │ ─────────────► │ GNSS 模块   │
  │              │                │  (LG290P)   │
  └──────────────┘                └──────┬──────┘
                                         │ SMA
                                         ▼
                                  ┌─────────────┐
                                  │  室外天线   │
                                  │ 窗外 / 楼顶 │
                                  └─────────────┘

模块没有 USB 口怎么办?那就需要一个 USB 转串口(CH340、CP2102、FT232 都行): 模块断电状态下接线,TX → RX、RX → TX、GND → GND, VCC 供电按模块数据手册来,接好再把转接头插进盒子的 USB 口。 买转接板的时候顺手确认一下它是 3.3 V 电平,别把模块的串口烧了。

实物图:机顶盒、USB 线、RTK 模块、天线连好并加电,右侧拼接了螺旋天线放在窗外的画面
连好加电的样子:机顶盒 → USB 数据线 → RTK 模块 → 天线馈线。右边拼的那张是临时测试的做法—— 四臂螺旋天线带磁吸底座,吸在窗外,抬头就是天。
  1. 天线先放好,再开盒子

    模块要能「看见」卫星才出得了数据。天线放桌上的话,卫星只收到七八颗、还挤在一个方向, 程序里会一直显示「有卫星、没位置」——新手最容易在这里怀疑软件。

    临时测试:磁吸底座吸在窗外,或者伸出去的窗台、空调外机上,四周别有大面积墙体反光。
    要长期跑:到楼顶或开阔地带立杆固定,具体做法见附篇:天线怎么固定在室外。

  2. USB 线接模块,模块接盒子

    模块自带 Type-C 或 Micro-USB 口的,找一根数据线,一头插模块、一头插盒子的 USB 口, 就这么简单。天线馈线拧到模块的 SMA 座上,拧到底,别只搭上。

    模块没有 USB 口的(只有排针或 GH 座),才需要 USB 转串口板, 接线见上面那个注记。

    顺手在盒子上确认系统认得这个口:

    shell · 看串口有没有出来
    ls -l /dev/ttyUSB* /dev/ttyACM*
    输出示例
    crw-rw---- 1 root dialout 188, 0 Nov 11 05:20 /dev/ttyUSB0

    ttyUSB0 是 USB 转串口芯片(CH340、CP2102 这类);ttyACM0 是模块自己带 USB 接口、 直接枚举出来的。两个名字都正常,记住是哪个。

    什么都没有,按顺序排查:换根数据线(很多充电线只有电源两根芯)、换个 USB 口、 用 dmesg | tail -20 看插上那一刻系统有没有反应。

  3. 最后插网线和电源

    盒子上电,网线插上(或者连好 Wi-Fi)。等一两分钟,从路由器后台找到它的 IP, 待会儿配置页面要用。

放窗外只用来验证程序通不通,不能当长期方案。磁吸底座夹在窗框上,风一吹就挪位置, 玻璃和墙体还会挡掉一大片低仰角卫星,卫星数上不去、固定解时有时无。

长期使用必须把天线挪到楼顶或开阔地带,立杆固定死。换位置以后,之前标定的坐标全部作废, 要在新位置重新测一次,见附篇三:坐标怎么定准。

第三步:在盒子上一条命令装好

项目开源在 gitcode.com/rampump/NTRIPserver, 国内访问比 GitHub 稳,脚本里也做了 GitHub 回退。SSH 登进盒子,或者接个键盘显示器打开终端,粘这一行:

shell · 一键安装(GitCode 优先,失败回退 GitHub)
sudo apt-get install -y git && sudo rm -rf /tmp/2rtk-install && (sudo git clone --depth 1 https://gitcode.com/rampump/NTRIPserver.git /tmp/2rtk-install || (sudo rm -rf /tmp/2rtk-install && sudo git clone --depth 1 https://github.com/Rampump/2RTKserver.git /tmp/2rtk-install)) && sudo bash /tmp/2rtk-install/install.sh

脚本会依次做完这些事,中途不用管:

  1. 装系统依赖(python3、python3-venv、python3-pip)。
  2. 在 /opt/2RTKserver/venv 建虚拟环境,按 requirements.txt 装依赖。
  3. 把程序复制到 /opt/2RTKserver/。
  4. 注册并启动 2rtkserver 的 systemd 服务——装完就开机自启,不用你手动拉。
终端截图:安装脚本正在安装系统依赖
装依赖。性能弱的 ARM 盒子这一步要好几分钟,卡着不动是正常的。
终端截图:安装完成,末尾输出访问地址
安装完成。末尾会打印访问地址,也就是下一步要打开的那个页面。

想确认服务真的起来了,跑一句:

shell · 看服务状态
systemctl status 2rtkserver

看到 active (running) 就往下走。failed 的话先看 journalctl -u 2rtkserver -n 50, 常见原因是 Python 版本太低——Debian 11 / Ubuntu 22.04 以上基本不会遇到。

第四步:打开网页,配串口和 Caster

在同一个网络里的电脑或手机上,浏览器打开:

Web 界面
http://盒子的IP:5757
固定地址
http://2rtk.local:5757(安卓手机不认 .local,用 IP)
默认账号
admin / admin —— 登录后立刻改
登录页截图:用户名和密码输入框
登录页。默认 admin / admin,登录后第一件事就是改密码。

登录后进左侧的 Settings(运行设置),页面地址是 /config。往下按顺序填四块。

① 模式选 serial

运行设置页截图:Mode 与 Serial 两块,模式此时还是 none
页面最上方就是 Mode 和 Serial。此时模式还是 none,所以什么都没动。

serial 的意思是:从串口读模块,通过 NTRIP 分发出去。这是基准站唯一要用的模式。

② 选串口

点「扫描串口」,程序会枚举系统里所有串口设备,识别到的直接填进下拉框:

扫描串口截图:识别到的端口出现在下拉框里
扫描之后,识别到的端口出现在下拉框里,选它就行。

知道端口也可以直接手填 /dev/ttyUSB0 或 /dev/ttyACM0,就是第二步里 ls 看到的那个。

③ 填波特率

运行设置页截图:串口与波特率已填好
本例填的是 /dev/ttyUSB0 + 115200,也就是盒子上插着的那个口。
模块常见波特率
Quectel LG290P115200 或 460800
u-blox ZED-F9P38400(走原生 USB 口时不看这个值)
Unicore UM980115200
Quectel LC29H115200

不确定就填 115200。正常出数据时这个值必须对,填错了状态页里一个字节都不会动。

④ 填云端 Caster

同一页往下滚,找到 NTRIP Caster Upload 这一块。要填的就是五项:

Settings 页面中的上游 NTRIP Caster 配置区域
上游 Caster 这一块。默认是关着的,填完记得把开关打开。
字段填什么
地址Caster 的域名或 IP。自己搭的填自己服务器;用 RTK2GO 就填它给的地址
端口一般是 2101,少数服务会另指一个,按对方给的填
挂载点你的基站在 Caster 上叫什么名字。流动站就是靠这个名字找基站
用户名 / 密码Caster 给你开的源账号,不是流动站账号,权限不一样,别搞混
上传间隔多少秒推一次。默认值就够,除非 Caster 那边明确要求

没有 Caster 可推?两种办法:先用 2RTK 的免费测试服务器试通链路, 或者自己搭一台,见 NTRIP Caster 搭建。只给局域网用的话,也可以开盒子里自带的本地 Caster,见附篇。

⑤ 保存重启,看数字动起来

填完拉到底点保存,页面会重启服务。然后回到状态页(首页 /),10~20 秒内应该看到:

  1. 卫星数往上涨,一般二三十颗;
  2. 位置解算出来,经纬度有了具体数值;
  3. RTCM 输出区列出 1005、1074、1094、1114、1124、1134 这些报文类型;
  4. Caster 那一栏的连接状态亮起来。

看到这些,站就已经在干活了

状态页是这个程序的主视图,平时看它就够了。模式、串口、卫星数、位置、RTCM 输出、运行时长都在上面, 走 WebSocket 推送,数字会自己跳,不用刷新。

状态页截图:模式、卫星数、位置和 RTCM 输出
正常出数据的状态页:模式 serial、卫星数几十颗、位置有了、RTCM 在播发。
状态页卫星卡片:已跟踪卫星数与各星座分布
卫星卡片:按星座列出已跟踪 / 可见数量。
状态页出口卡片:上游 Caster 与本地 Caster 的连接状态
出口卡片:每个出口一个状态灯。
状态页系统日志:最近的连接、断开与报错
下方是系统日志。出问题先看这里,它按时间顺序记下了每次连接、断开和报错。
现象先查什么
卫星数是 0串口或波特率错了。回第四步②③,两次都填对才算数
有卫星、没位置天线被挡了。搬到窗外或楼顶,等一两分钟重新搜星
有位置、Caster 不亮地址 / 端口 / 挂载点 / 源账号有一项不对,或者在 Caster 上这个挂载点已被别人占用
全部正常但流动站拿不到固定解流动站连的挂载点不对,或者它离基站太远(超过 20~30 km 精度会掉)

到这儿主线就完了。坐标现在还是模块自己算的粗值,精度在分米到米级—— 给农机自动驾驶、放样这种要求厘米级的活,得把坐标定准,见下一节。

Reference · 后半篇

附篇

附篇一:天线怎么固定在室外

RTK 基站的天线跟电视天线不一样:它要的是整片天空,不是某个方向。 所以判断位置好不好,只看三条:

  • 仰角 10° 以上没有遮挡。墙、树、广告牌、光伏板都算遮挡。
  • 装上之后不会动。天线挪一厘米,基站的坐标就错一厘米,而且是永久的。
  • 离金属和大功率设备远一点。屋顶水箱、空调外机、避雷针都会影响信号。

楼顶的规范做法

实物图:GNSS 测量蘑菇头天线在室外立杆上的永久固定示范
这就是长期跑基站的装法:蘑菇头天线拧在立杆顶端,立杆固定到承重结构上,整体不晃。 跟你手上那个带磁吸底座的螺旋天线不是一回事。
  1. 找承重结构,别找栏杆

    女儿墙内侧、楼梯间外墙、水箱支架这类固定的混凝土或实心砖结构。栏杆、彩钢瓦、通风管一律不要 ——风一大它们自己就在晃。

  2. 立杆垂直,膨胀螺丝打进墙里

    直径 40~50 mm 的镀锌钢管或铝管,长度一米到一米五。用膨胀螺丝配支架固定,别用抱箍夹在管子上。 立杆顶端要高出女儿墙至少半米,不然低仰角的卫星还是被墙挡着。

  3. 天线拧上去,螺纹涂防水胶

    蘑菇头天线的底面有个 5/8 英寸或 M8 的螺纹孔,拧到立杆顶端的转接头上。螺纹和接头全部做防水, 户外基站的头号杀手是进水,不是软件。

  4. 馈线下来,做滴水弯

    馈线从天线往下走的时候,在进入室内之前绕一个向下的弯(滴水弯),雨水就不会顺着线灌进屋。 改用 LMR400 这类低损耗同轴,长度尽量控制在 10 米以内,接头全做防水。

  5. 避雷和接地

    天线高于周围建筑时,必须做接闪:加同轴避雷器,外壳接地,接地电阻尽量做到 4 Ω 以下。 嫌麻烦也至少做到——打雷时把馈线拔下来,比什么都管用。

天线高:量的是什么

这里有个必须搞清楚的概念:RTCM 里的坐标不是立杆底部、不是楼顶地面, 而是天线的相位中心(Antenna Phase Centre,APC)——一个在天线内部、跟着信号入射角会飘几毫米的虚拟点。

你手上的坐标是怎么换到相位中心
地面控制点(标石中心)加天线高:从控制点量到天线参考点(ARP),再加天线厂给的相位中心偏移
立杆顶端(天线底面)加厂家规格书里的相位中心高度,一般几厘米
别人用流动站直接测的天线位置已经是相位中心,直接用

量垂直高,别量斜高。量斜高再乘余弦,多一步换算就多一个出错的机会。 量两次、换个人复核一次——几厘米的差错,在 RTK 里就是几厘米的系统误差,而且事后补救不回来。

附篇二:把盒子刷成 Armbian

盒子出厂是安卓,而 2RTK Server 只能跑在 Linux 上。只要刷成功,后面全是点鼠标, 所以这一步值得多花点时间挑对镜像。

1. 确认型号,找对镜像

拆开看主控丝印,或者查盒子型号对应的 SoC。拿到 SoC 之后去 Armbian 官网的 Download 页找板型。 玩客云(OneCloud,S805)这类没有官方板型的,用社区维护的 Armbian 镜像; 树莓派最省事,官方 Raspberry Pi OS 64-bit 也行——2RTK Server 只要求 Debian 系 + Python 3.8 以上。

2. 烧录

用 balenaEtcher 或 Rufus 把 .img 写进 SD 卡或 U 盘,比命令行 dd 少踩坑。 部分 Amlogic 盒子要走厂商的 USB 烧录工具线刷,或者先短接进刷机模式——这一步照社区帖子做, 同型号的教程基本通用。

3. 首次开机

插卡、接网线、上电。等两三分钟,从路由器后台找到它的 IP,SSH 进去(Armbian 首次登录会要求改 root 密码、建普通用户)。 然后确认三件事:

shell · 环境自检
uname -m                 # 应该是 aarch64 或 armv7l
python3 --version        # 3.8 以上
df -h /                  # 至少留 2 GB 空余
free -m                  # 512 MB 也能跑,1 GB 更稳

三项都对,就可以回去做第一步:准备材料了。

刷坏了怎么办?Amlogic 的盒子几乎都能救回来:重新短接进刷机模式,用 USB_Burning_Tool 线刷。 别急着扔,先搜型号 + 「救砖」。

附篇三:坐标怎么定准(一键标定)

到第四步为止,站已经在出数据了,但它报出去的坐标多半不准——可能是模块自收敛出来的米级值, 也可能是原厂软件里随手填的。基站坐标差一米,每个流动站的结果就差一米,事后没有软件补救得回来。

这就是 2RTK Server 相比「用原厂软件配好模块就完事」多出来的功能:程序自己驱动模块走完一整套命令, 切流动站、连 CORS、等固定解、取平均、写回、切回基准站,失败还会把模块恢复原样。你只需要在网页上选一种方式、点开始。

先分清两件事。「把模块设成基准站」是模式问题——模块是 Base 还是 Rover; 「标定」是坐标问题——基准站对外宣称自己站在哪个点上。 标定只管后者。模式在第四步已经用 serial 解决了。

顺序上很自由。可以现在做,也可以先让站带着粗坐标跑几天,回头再来标。 唯一的要求:做的时候天线已经固定牢,整个过程中不能动。

四种方式,挑一个

标定页面截图:四种标定方式的选项
标定页(/calibrate)的四种方式。选完点开始,程序自己跑完整个流程。

四种方式的差别,说到底是「坐标从哪儿来」:从 CORS 来、从模块自己长时间平均来、 从别人测好的结果来,还是你自己写进去。走完动作都一样——把坐标写进模块,再把模块切回基准站。

方式坐标来源适用精度
① CORS 一键固定已知 CORS / NTRIP 服务的差分解模块支持 Rover + Base 双模式(如 LG290P)厘米级,精度与坐标系由 CORS 决定
② 仅测量 Survey-in模块自己长时间静态平均任何能单独做流动站的模块,没有 CORS 账号分米级,秒到十几分钟
③ 外部坐标别的模块、别的站已经标定好的结果手上有同点多测的已知坐标,或多台模块共用一点等于所引用坐标的精度
④ 手动写入你自己填的数坐标来自测绘图、控制点成果表取决于数据本身,填错就全错

① CORS 一键固定:程序替你走完一整轮

这是最准的方式,也是本程序跑得最完整的一条路。前提是模块同时支持流动站和基准站两种工作模式, LG290P 就是这种,也是目前唯一做过真机验证的型号。程序实际做的动作是这样的:

① 切流动站模块当 Rover
准备吃差分
→
② 连 CORS登录 NTRIP
订阅挂载点
→
③ 等固定解单点解
收敛到 Fixed
→
④ 测坐标Fixed 下平均
厘米级点位
→
⑤ 写回切 Base坐标写进模块
开始发 RTCM

所以要你准备的只有一样东西:一个能用的 CORS 账号,或者一个 NTRIP Caster 的站点信息—— 地址、端口、账号、密码、挂载点。测出来的精度和坐标系,完全由这套校准数据决定: 连的是 CGCS2000 的省级 CORS,结果就是 CGCS2000 的厘米级坐标;连的是某个虚拟参考站服务, 结果跟着那个服务走。程序不参与判断,它只是把 CORS 给的答案搬进模块。

没有 CORS 账号也能曲线救国:第四步里配置的那个云端 Caster,如果上游本来就是差分源,同样可以拿来当校准参考。 不过最省事的还是本地或省级 CORS,账号申请一次能用很久。

② 仅测量 Survey-in:不连任何服务,靠自己熬时间

没有 CORS 账号、或者模块只能当流动站不能切基准站的时候用这个。思路和 ① 前半段一样—— 也是把模块当流动站、在固定点上做静态观测——区别是没有外部差分数据, 模块靠自己的载波相位长时间平均,一点点把随机误差压下去。

程序做的事少一些:让模块进入 Survey-in 模式,等它跑够时长、达到收敛门限,把结果坐标记录到本地, 然后写进配置。这里的关键是「记录到本地」——这份坐标存下来以后, 可以给别的模块直接用,也就是下面第 ③ 种方式的数据来源。

时间换精度。几分钟出的是米级到分米级,想稳到分米以内,得让它安静地跑十几分钟到一小时以上, 中间天线不能动、不能断电。这也是为什么它排在 ① 后面——同样的等待,连上 CORS 早就 Fixed 了。

③ 外部坐标:一次测量,多台模块共用

这个点是给「已经有人替你测过」的情况准备的。基站天线位置一旦定死,坐标就是个常量, 没必要每换一台模块就重新测一遍——把上一次的结果拿来用就行。典型场景:

  • 先用 ① 或 ② 把这一点测准(比如拿一台 LG290P 走 CORS 固定),结果存在系统里;
  • 之后换模块、换机器,甚至拿一台只能当基准站、切不了流动站的模块来顶班,直接引用这条已有坐标;
  • 同一根立杆上装了两套设备做冗余,共用一份坐标,不会出现两个基准站报出两个点的情况。

程序会读出本地已保存的坐标记录,你确认用哪一条,它写进模块并切基准站,不再走扫描、收敛那一套。 代价也很清楚:精度就等于那条被引用的坐标,天线只要挪过位置,这条记录立刻作废, 必须回到 ① 或 ② 重测。

④ 手动写入:你说了算

坐标已经在手上,就别绕圈子了——测绘图上的控制点、成果表里的已知点、甲方给的点位, 直接填进去最快。程序只做两件事:校验格式、写进模块并切基准站,顺手存一条记录备查。

它是四种方式里的兜底:模块不被支持、CORS 连不上、Survey-in 收敛不了,最后都能落到这里。 但也是唯一一种没有任何校验的方式——填错一个数字,站照样正常出数据, 只是每个流动站的结果都跟着错,而且错得很安静。填之前把度分秒和十进制小数确认一遍,别混着用。

只有 LG290P 做过真机验证。用其他型号时,建议先用流动站模式把天线坐标测出来、存进系统(②或③), 再拿这个坐标把模块设成基准站。这样即使自动标定在某个型号上不灵,你手上也有一份真坐标。

实际操作:点几下就完事

先重申那个前提:天线已经固定牢、能看见天空,整个过程中不能动。坐标就是天线的位置, 天线一动,测出来的数立刻不是这个点的了。

四种方式的界面流程一样,只在「方式」和参数卡上有差别。以 CORS 为例,从头到尾是这几下:

  1. 打开 /calibrate,点扫描串口,等它列出 /dev/ttyUSB0 或 /dev/ttyACM0;
  2. 点识别模块,程序读出型号、固件、当前模式,确认认得出这颗模块;
  3. 选CORS 一键固定,填服务商给的地址、端口、账号、密码、挂载点;
  4. 点开始,剩下的交给它——扫描、切模式、等固定解、取平均、写回、切 Base。

换成 ② ③ ④,区别只是第 3 步换成对应选项、参数卡少填几项。全程不用干预。

标定页面:CORS 方式的参数填写区域
CORS 方式的参数卡:地址、端口、账号、密码、挂载点,都是服务商给的那几项。
标定进行中截图:串口扫描完成
扫描串口完成。
标定进行中截图:识别到模块型号
识别到模块,开始切模式。
标定进行中截图:流程推进、取平均
走完一整套命令,正在取平均。这期间不要动天线、不要断电。

标定失败了?页面会把失败在哪一步写出来,模块也会被恢复到标定前的状态,站不会因此停掉。 常见原因:CORS 账号不对、天线被挡收不到固定解、模块型号不被支持。

附篇四:中继模式,把别人的基站搬过来

relay 模式不是从模块读数据,而是从另一个 Caster 拉一路流,再重新分发出去。 三种情况用得上:

  • 手里还没模块。拿公开流把 Caster、防火墙、流动站这几段链路先打通。
  • 给已有基站做备份。上游断了,下游还能从别处拿数据。
  • 一路流分发给多个消费方。不用让每个人都去连原始 Caster。
Settings 页面:Mode 选择 relay
Mode 处切到 relay,下方会出现上游 Caster 的填写区域。
中继配置:读取到上游 Caster 的挂载点列表
填上游地址和账号后,可以列出上面的挂载点,直接挑一个。
状态页:中继模式正在转发数据
跑起来之后,状态页能看到上游连接和已转发的字节数。

附篇五:打开内置本地 Caster

程序自己就是一台 Caster,监听 2102 端口,挂载点固定叫 2RTK。 适合局域网内使用,或者你完全不想依赖外部服务的时候。前提是流动站和盒子在同一个网里。

Settings 页面:本地 Caster 开关已打开
在 Settings 里把本地 Caster 打开,保存重启。

流动站连 http://盒子的IP:2102/2RTK 就行,不需要额外的账号。

状态页:本地 Caster 已连接并有数据
状态页会显示本地 Caster 在跑、有几个客户端连着。

附篇六:接数传电台

通过第二个串口接一台透传电台,把 RTCM 打到空中。适合完全没网的野外,或者测绘队习惯用电台的场合。 电台那一端配对好之后,流动站直接收,不用连任何服务器。

Settings 页面:数传电台出口配置
电台出口在同一个 Settings 页面的下半部分,独立于 Caster 那一块。
Settings 页面:电台串口与波特率设置
串口和波特率按电台的说明书填,跟模块那一侧互不影响。

附篇七:出问题了先看这几条

现象原因怎么办
浏览器打不开 :5757IP 找错了,或者服务没起来路由器后台核 IP;盒子上 systemctl status 2rtkserver
2rtk.local 打不开,IP 能开本机代理(Clash、v2rayN、VPN)劫走了 .local把 *.local 加进直连列表,或者干脆一直用 IP
卫星数一直是 0串口或波特率不对重新扫一次串口;确认填的是 ls 看到的那个口
有卫星、没有位置天线被挡搬到窗外或楼顶,重启一下服务重新搜星
Caster 一直连不上地址 / 端口 / 账号 / 挂载点有一项不对先在本机 curl -s --max-time 10 http://Caster地址:2101/ 试试通不通
跑着跑着数据停了USB 供电不稳,或模块被电源波动搞挂了换带独立供电的 USB Hub,或者换 5 V 电源
坐标每天都在慢慢漂自收敛得到的坐标,精度本来就在分米级正常现象。要准就做一键标定

大部分「玄学问题」都能被一个动作解决:断电,等十秒,再上电。 模块需要完整重新捕获一遍,很多「Caster 坏了」的报告其实是模块状态机没清干净。

不要把 5757 和 2102 端口直接暴露到公网。 这套 Web 界面是给可信局域网用的。要远程访问请走 VPN,或者用反向代理加一层认证。

接下来

基站跑起来了,但数据还得有个地方汇总分发。下一页讲怎么在一台云服务器上搭 NTRIP Caster,把挂载点、账号和权限管起来。

NTRIP Caster 搭建 →