尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

从零搭建RTK基准站:ESP32与UM980实战指南

发布时间:2026/9/24 12:56:23

资讯中心
01
ARTICLE

从零搭建RTK基准站:ESP32与UM980实战指南

从零搭建RTK基准站:ESP32与UM980实战指南
1. 为什么我要自己搭一个RTK基准站去年秋天接了个小项目给城郊一片农田做无人机航测。地块不大大概两百来亩但要求正射影像的绝对精度控制在5厘米以内。一开始我图省事直接用了某平台的网络RTK服务头两天跑得挺顺第三天开始就频繁掉线差分龄期动不动跳到十几秒飞机飞出来的航线像喝醉了酒重叠度都对不上。打电话问客服对方说那片区域基站覆盖本来就弱建议我换个时间段再试。问题是农时不等人客户催得紧我总不能跟人家说“等信号好了再飞”。那次之后我就动了自建基准站的念头。说白了RTK基准站的核心逻辑并不复杂一台能接收GNSS卫星信号的接收机固定在一个已知坐标点上持续观测卫星的载波相位然后通过数据链路把观测值和自己的坐标播发出去。移动站收到这些差分数据后和自身观测值做双差解算就能把定位精度从米级拉到厘米级。原理教科书上写得清清楚楚真正让人头疼的是硬件怎么选、坐标怎么测、网络怎么配、数据怎么稳。这篇文章就是把我从零搭站踩过的坑、试过的方案、最后跑通的配置完整记录下来。涉及到的硬件主要是ESP32系列模组和UM980这类多频GNSS板卡网络传输走NTRIP协议。如果你也在考虑自建基准站或者手头已经有设备但一直没调通这篇内容应该能帮你省下不少折腾的时间。我尽量把每个选择背后的理由讲清楚参数怎么算、线怎么接、配置怎么写都给出可直接抄的版本。2. 硬件选型从需求倒推配置2.1 先想清楚你要什么级别的精度搭基准站之前最忌讳的就是上来就买最贵的设备。我见过有人直接上了测绘级接收机加扼流圈天线结果用在一个对精度要求只有分米级的场景里钱花了不少效果和几百块的模块差不多。所以第一步是先明确你的精度需求。RTK的精度主要取决于几个因素接收机能跟踪的频点数量、天线的相位中心稳定性、基线长度、以及观测环境的多路径影响。单频接收机在短基线小于5公里下也能做到厘米级但初始化时间较长抗干扰能力弱。双频接收机可以更快固定整周模糊度在基线稍长的情况下也能保持稳定。三频则进一步提升了在复杂环境下的可靠性。我自己的需求是基线不超过10公里精度要求平面2厘米、高程3厘米需要长时间无人值守运行。基于这个需求我选择了双频方案核心板卡用和芯星通的UM980。这块板卡支持全星座全频点BDS、GPS、GLONASS、Galileo都能收性价比在国产板卡里算是很能打的。如果你预算更紧单频的UM220也能用但基线最好控制在3公里以内。2.2 主控为什么选ESP32而不是树莓派基准站的主控负责从GNSS板卡读取观测数据打包成RTCM格式再通过NTRIP协议推送到服务器或者直接播发给移动站。这个任务对算力要求不高但对稳定性和功耗比较敏感。我一开始用的是树莓派Zero W跑是能跑但有两个问题一是SD卡在户外温差大的环境下容易出故障我烧过两张卡二是树莓派的功耗在持续运行场景下还是偏高用太阳能供电的话电池板得配得比较大。后来换成ESP32情况就好多了。ESP32自带WiFi和蓝牙功耗低深度睡眠模式下电流只有几十微安用一块小太阳能板加18650电池就能撑过连续阴雨天。而且ESP32的UART接口丰富和UM980通过串口通信很顺畅。不过ESP32也有它的短板。它的RAM比较小处理大量RTCM数据时需要仔细管理缓冲区。另外WiFi在户外远距离传输时稳定性不如有线以太网如果基准站附近有可用的网口加一个LAN8720以太网模块会更可靠。关于ESP32接LAN8720的坑我在后面会专门讲。2.3 天线和馈线的选择不能凑合天线是基准站里最容易被低估的部件。很多人愿意在板卡上花钱天线却随便拿个便宜的蘑菇头凑合结果数据质量一塌糊涂。GNSS天线分测量型和导航型测量型天线的相位中心更稳定多路径抑制能力更强。我用的是一款四馈点微带天线带扼流圈底座虽然体积大了点但抗多路径效果确实明显。馈线也要注意。馈线太长会引入信号衰减一般建议不超过10米。如果必须拉远就要选低损耗的馈线比如LMR400或者更粗的型号。接头处一定要做好防水我用的是自融性硅胶带加冷缩管户外跑了大半年没有出现过进水问题。2.4 硬件清单与成本核算下面是我这套基准站的完整硬件清单和大致成本价格按我采购时的市场价估算部件型号数量单价元备注GNSS板卡UM9801680双频全星座主控ESP32-WROOM-32125带WiFi和蓝牙以太网模块LAN8720115可选有线场景用GNSS天线四馈点测量型1320带扼流圈馈线LMR400 5米185含接头电源18650电池太阳能板1套1506V 5W板防水盒ABS IP67145带透明盖杂项线材、接头、PCB-80-合计约1400这个成本相比动辄上万的测绘级基准站已经低了很多但性能在短基线场景下完全够用。如果你只需要单频成本还能再压到七八百。3. 核心细节解析从卫星信号到差分数据3.1 GNSS载波相位观测到底在测什么要理解RTK得先理解GNSS接收机到底在测什么。卫星发射的信号包含载波、伪码和导航电文。伪码测距的精度在米级因为码元宽度比较大。载波相位测量则精细得多L1频点的波长约19厘米接收机可以测到波长的百分之一甚至千分之一对应毫米级的精度。但载波相位有个问题它只能测到不足一整周的部分整周数未知这就是整周模糊度。RTK的核心就是通过基准站和移动站的双差观测把整周模糊度解算出来。一旦模糊度固定定位精度就能达到厘米级。基准站的作用是提供一个已知坐标的参考点它的观测值用来消除卫星钟差、轨道误差、电离层和对流层延迟中的公共部分。所以基准站的坐标必须足够准确否则误差会直接传递给移动站。3.2 RTCM数据格式与NTRIP传输基准站算出来的差分数据需要按照RTCM标准格式编码。RTCM 3.x是目前主流的版本常用的消息类型有1005基准站坐标、1074GPS观测值、1084GLONASS观测值、1094Galileo观测值、1124BDS观测值等。UM980可以直接输出RTCM 3.3省去了自己编码的麻烦。NTRIP是在HTTP基础上发展起来的协议专门用于传输RTCM数据。它把基准站当作HTTP服务器移动站作为客户端通过GET请求获取数据流。NTRIP的挂载点mountpoint是数据流的标识移动站连接时需要提供挂载点名称和认证信息。我用的是自己搭的NTRIP服务器跑在一台云主机上。基准站通过WiFi把RTCM数据推到服务器移动站再从服务器拉取。这样做的好处是基准站不需要有公网IP只要能看到WiFi就行。如果你只有一个移动站也可以让基准站直接通过TCP播发省去服务器这一层。3.3 差分龄期对精度的影响差分龄期是指移动站收到的最新差分数据的时间戳与当前时刻的差值。龄期越大说明差分数据越旧卫星几何和大气条件可能已经变化精度就会下降。一般来说龄期在3秒以内对精度影响很小超过10秒就明显劣化了。我实测过不同龄期下的定位偏差。在龄期1秒时平面偏差基本在1厘米以内龄期5秒时偏差扩大到2到3厘米龄期15秒时偏差能到8厘米以上而且高程方向更差。所以基准站的数据链路稳定性直接决定了移动站的精度表现。影响龄期的因素主要有两个一是基准站到服务器的网络延迟二是服务器的转发延迟。我用的云主机在国内基准站到服务器的ping值在30毫秒左右加上编码和转发的时间端到端延迟大概在200毫秒以内完全够用。4. 实操过程从零搭建完整基准站4.1 硬件连接与供电方案先把硬件连起来。UM980板卡通过UART和ESP32通信接线如下UM980的TX接ESP32的GPIO16RX2UM980的RX接ESP32的GPIO17TX2两者共地UM980供电3.3V注意电流要够峰值可能到200mA如果你要用LAN8720以太网模块接线会稍微复杂一些。LAN8720通过RMII接口和ESP32连接需要接的引脚包括GPIO18接RMII_CLKGPIO19接TXD0GPIO21接TX_ENGPIO22接TXD1GPIO23接MDCGPIO25接RXD0GPIO26接RXD1GPIO27接CRS_DVGPIO0接REF_CLK需要50MHz时钟这里有个坑LAN8720需要50MHz的时钟输入可以用ESP32的GPIO0输出但GPIO0同时也是启动模式引脚上电时如果被拉低会进入下载模式。所以要在GPIO0和LAN8720之间加一个逻辑门或者用有源晶振给LAN8720提供时钟。我一开始没注意这个板子一直进不了正常启动流程查了半天才发现是GPIO0被拉低了。供电方面我用的是6V 5W的太阳能板加一个18650电池。太阳能板通过TP4056充电模块给电池充电电池再通过AMS1117-3.3稳压给ESP32和UM980供电。实测下来晴天时太阳能板输出电流在400mA左右阴天也有80mA足够维持系统运行。ESP32在WiFi传输时的平均电流约120mAUM980约150mA合计270mA左右18650电池在满电状态下能撑大约10小时配合太阳能板可以做到全天候运行。4.2 ESP32固件开发与关键配置ESP32的固件我用Arduino框架开发主要做三件事从UM980读取RTCM数据、连接WiFi、通过NTRIP协议推送数据。先配置UM980的输出。通过串口发送配置命令让它输出RTCM 3.3格式的观测数据# 设置串口波特率 $CONFIG,COM1,115200,8,N,1 # 开启RTCM输出 $CONFIG,RTCM,COM1,1,3.3,1 # 设置输出消息类型 $CONFIG,RTCM,COM1,1074,1 $CONFIG,RTCM,COM1,1084,1 $CONFIG,RTCM,COM1,1094,1 $CONFIG,RTCM,COM1,1124,1 $CONFIG,RTCM,COM1,1005,1这些命令通过ESP32的串口发给UM980配置会保存在板卡里断电不丢失。ESP32端的代码核心是读取串口数据并转发。这里要注意缓冲区管理RTCM数据流是连续的如果处理不及时会丢包。我用了一个双缓冲队列一个任务负责读串口另一个任务负责发网络中间用FreeRTOS的队列传递数据块。#include WiFi.h #include HTTPClient.h #define GNSS_RX 16 #define GNSS_TX 17 HardwareSerial GNSSSerial(2); QueueHandle_t rtcmQueue; void gnssTask(void *param) { uint8_t buffer[512]; while (1) { int len GNSSSerial.readBytes(buffer, sizeof(buffer)); if (len 0) { xQueueSend(rtcmQueue, buffer, portMAX_DELAY); } } } void ntripTask(void *param) { uint8_t buffer[512]; while (1) { if (xQueueReceive(rtcmQueue, buffer, portMAX_DELAY)) { // 通过NTRIP推送 // ... } } }WiFi连接部分我加了自动重连逻辑。户外环境WiFi信号可能不稳定断线后要能自动恢复。另外ESP32的WiFi和蓝牙可以同时使用但会共享射频资源如果蓝牙也在传数据WiFi的吞吐量会下降。我的场景里蓝牙没用到所以没这个问题。4.3 基准站坐标的精确测定基准站的坐标不能随便填必须精确测定。最常用的方法是静态观测后处理。把基准站架在一个稳固的点上连续观测至少4小时最好24小时然后用精密星历做后处理解算。我用的是CSRS-PPP在线服务把观测数据传上去它会返回ITRF框架下的精确坐标。注意这个坐标是地心坐标系下的需要转换到WGS84或者CGCS2000。转换可以用PROJ库或者在线工具完成。如果你没有条件做长时间静态观测也可以用已知的控制点坐标。但要注意控制点的精度和坐标系如果控制点本身只有厘米级精度那基准站的坐标误差也会传递下去。坐标填错是新手最容易犯的错误之一。我见过有人把经纬度填反了结果移动站解算出来的位置偏了几十公里。所以填完坐标后一定要用移动站验证一下看看解算结果和已知点是否吻合。4.4 NTRIP服务器搭建与挂载点配置NTRIP服务器我用的是一款开源实现跑在云主机上。配置很简单主要是设置挂载点、用户名和密码。# 挂载点配置示例 mountpoint BASE01 username user password pass基准站作为NTRIP客户端把数据推送到服务器的挂载点上。移动站作为另一个客户端从同一个挂载点拉取数据。服务器负责转发不存储数据。如果你不想自己搭服务器也可以用现成的NTRIP服务商但要注意数据安全和延迟。自己搭的话云主机的选择要考虑带宽和延迟建议选离基准站和作业区域都近的机房。服务器端还要注意防火墙设置NTRIP默认用2101端口需要在安全组里放行。另外建议开启日志方便排查连接问题。5. 常见问题与排查技巧实录5.1 ESP32连接LAN8720的典型问题前面提到过GPIO0的坑这里再展开说一下。ESP32的GPIO0在上电时如果被拉低芯片会进入下载模式而不是正常运行。LAN8720的REF_CLK引脚需要50MHz时钟如果直接从GPIO0接过去上电瞬间LAN8720可能会把GPIO0拉低导致ESP32启动异常。解决方法有三种一是用有源晶振给LAN8720提供时钟GPIO0不接二是在GPIO0和LAN8720之间加一个缓冲器比如74HC125三是用ESP32的GPIO17输出时钟但GPIO17同时也是串口TX会冲突。我最后用的是有源晶振方案虽然多花了几块钱但最省心。另一个常见问题是RMII时钟相位。ESP32的RMII接口对时钟相位有要求如果相位不对数据会大量丢包。可以在menuconfig里调整时钟相位或者换用支持自动相位校准的PHY芯片。5.2 差分龄期突然变大的排查思路差分龄期突然变大说明数据链路出了问题。排查顺序一般是先看基准站是否在线再看网络延迟最后看服务器负载。我遇到过一次龄期突然跳到30秒的情况查了半天发现是云主机的带宽被其他任务占满了。NTRIP数据流虽然不大但需要稳定的带宽如果服务器上跑着其他大流量任务RTCM数据就会被延迟。后来我把NTRIP服务单独放到一台低配云主机上问题就解决了。还有一种情况是基准站的WiFi信号弱导致数据推送断断续续。可以在基准站端加一个看门狗检测到网络断开后自动重启WiFi模块。ESP32的WiFi库有事件回调可以在断开事件里触发重连。5.3 常见问题速查表现象可能原因排查方法解决措施移动站无法固定基准站坐标错误检查坐标是否填反重新测定并核对差分龄期大网络延迟高ping服务器测延迟优化网络或换服务器数据断流WiFi信号弱查看RSSI值加天线或换有线ESP32无法启动GPIO0被拉低测量GPIO0电平加缓冲器或改时钟源定位偏差大多路径严重检查天线环境换扼流圈天线初始化慢卫星数少查看可见卫星调整天线位置5.4 几个容易被忽略的细节第一个是接地。GNSS天线和接收机的地要接好否则容易引入噪声。我用的是单点接地所有地线汇到一点再接到电源地。第二个是散热。ESP32和UM980在夏天户外运行时温度会比较高尤其是防水盒里。我在盒子上开了透气孔贴了防水透气膜既能散热又能防雨。第三个是固件升级。ESP32支持OTA升级但基准站部署在户外OTA时如果断电可能会变砖。我一般是在本地升级好再部署或者用双分区方案升级失败自动回滚。第四个是数据记录。基准站最好能本地记录观测数据万一网络断了数据还在可以事后补传。我在ESP32上挂了一个SD卡模块每天生成一个RINEX文件方便后续分析。6. 实际运行效果与个人体会这套基准站从去年冬天跑到现在经历了下雨、下雪、高温和大风整体表现还算稳定。在10公里基线内移动站的固定率在95%以上平面精度基本在1到2厘米高程在2到3厘米。偶尔遇到电离层活跃的时段固定时间会变长但一般几分钟内也能固定。成本方面整套下来不到1500块相比买成品基准站省了不少。当然自己搭的站没有成品站那么省心需要定期检查供电、网络和设备状态。我一般每周远程看一下日志每个月去现场检查一次。如果你也想自己搭一个我的建议是先从简单的方案开始用单频板卡加ESP32跑通了再升级。不要一上来就追求全频点、高精度先把数据链路和坐标测定这两个环节搞扎实。很多问题其实不是硬件不行而是配置和细节没做到位。最后分享一个小技巧基准站的天线最好架高一些至少离地面1.5米以上周围不要有大型金属物体。我一开始把天线放在铁皮房顶上多路径严重后来移到旁边的木杆上数据质量明显改善。这个细节看起来不起眼但对RTK的固定率和精度影响很大。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。