新闻详情

新闻详情

首页 / 资讯中心 / 详情

RTK数据链路搭建:str2str串口转NTRIP转发实战指南

发布时间:2026/9/28 16:23:28来源:尧图网络
RTK数据链路搭建:str2str串口转NTRIP转发实战指南
RTK定位这件事硬件买回来只是第一步。真正让人头疼的往往是数据链路怎么搭——基准站的数据怎么稳定地推给流动站流动站怎么通过一个统一的入口拿到差分改正数。我见过太多人设备买了一大堆结果卡在数据转发这一环要么延迟忽高忽低要么干脆连不上。RTKLIB里的str2str工具就是专门解决这个问题的它能把串口、TCP、NTRIP、文件流之间任意转换和转发而且完全免费。这篇内容适合已经上手RTK、但被数据链路折腾过的朋友也适合想用低成本方案替代商业CORS服务的团队。我会把str2str的配置逻辑、参数含义、实际踩过的坑都摊开讲清楚让你看完就能自己搭一套稳定的转发服务。1. 先搞清楚str2str到底在转发什么1.1 数据流的本质从串口字节到差分改正数很多人一上来就急着敲命令结果参数写错了都不知道错在哪。要理解str2str得先明白它处理的数据到底是什么形态。RTK的核心是基准站把观测到的卫星数据通常是RTCM格式发给流动站流动站结合自己的观测数据做差分计算从而把定位精度从米级压到厘米级。这个过程中基准站输出的可能是串口数据、可能是TCP流、也可能是NTRIP协议封装的数据包。str2str做的事情就是把这些不同来源、不同格式的数据流“搬运”到另一个出口中间可以做一些格式转换和协议适配。你可以把它想象成一个水管接头转换器。一头接的是基准站串口出来的原始字节流另一头要接的是流动站能识别的NTRIP客户端。如果没有这个转换器两边接口对不上水就流不过去。str2str支持同时配置多个输入流和多个输出流这意味着你可以一个基准站数据同时推给好几个流动站或者把多个基准站的数据汇聚到一个端口上。关键点在于str2str本身不做差分计算它只负责搬运和格式转换。差分计算是流动站端的RTK算法在做。所以转发服务器的稳定性直接决定了差分数据的连续性和延迟而这两项指标又直接反映在最终的定位精度和固定率上。1.2 支持的流类型与典型组合场景str2str支持的流类型相当丰富我列一下常用的几种流类型标识符典型用途串口serial连接基准站接收机TCP客户端tcpc主动连接远程服务器TCP服务端tcps监听端口等待连接NTRIP客户端ntripc从CORS或NTRIP Caster拉取数据NTRIP服务端ntrips搭建自己的NTRIP Caster文件file记录数据或回放数据UDPudp局域网内低延迟传输实际搭建中最常见的组合是基准站接收机通过串口输出RTCM数据str2str从串口读取然后通过NTRIP服务端模式对外发布流动站用NTRIP客户端连接获取数据。另一种常见组合是从某个NTRIP Caster拉取数据然后转发到本地TCP端口供局域网内多台设备使用。还有一种容易被忽略的场景把串口数据同时转发到文件和TCP端口。文件用于事后复盘和问题排查TCP端口用于实时定位。这个组合在调试阶段特别有用因为你可以把原始数据存下来事后用RTKPOST做后处理验证。1.3 为什么不用商业软件而选str2str市面上确实有一些商业软件能做类似的事情但str2str有几个不可替代的优势。第一是免费开源没有授权限制你可以随便部署多少份。第二是跨平台Windows、Linux、树莓派上都能跑这对低成本部署很关键——你可以用一块树莓派做转发服务器功耗低、体积小、可以放在野外。第三是配置灵活命令行参数虽然多但一旦理解逻辑就能组合出各种复杂的转发拓扑。我自己的做法是在树莓派上跑str2str通过systemd做成开机自启的服务。整个方案的成本就是一块树莓派加一个电源比买商业转发服务器便宜太多。而且因为Linux系统稳定连续跑几个月不出问题是很正常的。2. 命令行参数逐个拆解别被那一长串吓到2.1 输入输出流的基本语法结构str2str的命令行语法看起来吓人但拆开看其实很规整。基本结构是这样的str2str -in [输入流配置] -out [输出流配置] [其他选项]输入流和输出流都用“类型://参数”的格式来描述。比如串口输入就是-in serial://ttyUSB0:115200:8:n:1这里ttyUSB0是设备名115200是波特率8是数据位n是无校验1是停止位。这几个参数必须和接收机输出的配置完全一致否则读出来的就是乱码。TCP服务端输出-out tcps://:2101冒号前面为空表示监听本机所有网卡2101是端口号。流动站就连接这个端口获取数据。NTRIP服务端输出-out ntrips://:2101/MOUNTPOINTMOUNTPOINT是你自己起的挂载点名称流动站连接时需要指定这个名称。2.2 那些容易写错的参数细节有几个参数我踩过坑这里重点说一下。串口设备名Linux下通常是/dev/ttyUSB0或/dev/ttyACM0但如果你插了多个USB转串口设备编号可能会变。稳妥的做法是用/dev/serial/by-id/下面的持久化路径这样重启后设备名不会乱。波特率匹配接收机输出RTCM的波特率必须和str2str设置的完全一致。我遇到过接收机默认115200但配置成了9600的情况结果读出来全是乱码排查了半天才发现是波特率不匹配。NTRIP挂载点命名挂载点名称不要用特殊字符建议用字母数字和下划线组合。有些NTRIP客户端对特殊字符处理不好会导致连接失败。TCP端口选择2101是NTRIP的默认端口但如果你在公网环境建议换一个非标准端口减少被扫描的概率。当然这只是一个基本的安全习惯不是必须的。2.3 常用选项参数的含义与取舍除了输入输出str2str还有一些选项参数会影响转发行为-p指定定位模式一般不用改-msg指定要转发的消息类型可以过滤掉不需要的RTCM消息-t设置超时时间-b设置缓冲区大小-r设置重连间隔其中-msg这个参数值得说一下。基准站输出的RTCM消息可能有很多类型但流动站实际需要的可能只有几种。通过过滤掉不需要的消息可以减少带宽占用和延迟。比如你只需要1004和1019这两种消息就可以这样写-msg 1004,1019不过要注意过滤太多可能导致流动站无法完成初始化。建议先用默认配置跑通确认能固定之后再尝试精简消息类型。3. 从零搭建一套串口转NTRIP的转发服务3.1 硬件连接与系统环境确认先确认硬件连接。基准站接收机的串口输出接到树莓派的USB口通过USB转串口芯片识别为ttyUSB0或ttyACM0。用ls /dev/tty*确认设备名然后用dmesg | tail看一下内核识别信息确认驱动加载正常。系统环境方面RTKLIB的二进制文件在大多数Linux发行版上可以直接运行。如果你用的是树莓派建议用64位系统性能更好。安装依赖sudo apt update sudo apt install -y build-essential如果你需要从源码编译RTKLIBgit clone https://github.com/tomojitakasu/RTKLIB.git cd RTKLIB/src make sudo make install编译完成后str2str的可执行文件在/usr/local/bin/下面。3.2 串口参数的确定与验证在正式配置str2str之前先用stty命令确认串口参数stty -F /dev/ttyUSB0 -a这会显示当前串口的配置。如果波特率不对可以用stty -F /dev/ttyUSB0 115200 cs8 -cstopb -parenb设置成115200、8数据位、1停止位、无校验。然后用cat命令看一下串口有没有数据输出cat /dev/ttyUSB0 | xxd | head -20如果看到类似d3 00开头的十六进制数据说明RTCM数据正常输出。如果什么都没有检查接收机的输出配置是否正确启用了RTCM输出。3.3 完整的str2str启动命令与参数注释确认串口有数据后就可以启动str2str了。下面是一个完整的命令str2str -in serial://ttyUSB0:115200:8:n:1 \ -out ntrips://:2101/RTK_BASE \ -msg 1004,1019,1033,1074,1084,1094,1104,1114,1124 \ -t 30 \ -b 1逐段解释-in serial://ttyUSB0:115200:8:n:1从串口读取波特率1152008数据位无校验1停止位-out ntrips://:2101/RTK_BASE以NTRIP服务端模式输出监听2101端口挂载点名为RTK_BASE-msg指定转发的RTCM消息类型这里列出了常用的GPS、GLONASS、Galileo、北斗的观测值和星历消息-t 30超时时间30秒超过这个时间没有数据就断开重连-b 1缓冲区大小为1降低延迟启动后str2str会持续运行把串口数据转发到NTRIP服务端。流动站就可以通过NTRIP客户端连接你的IP:2101/RTK_BASE来获取差分数据。3.4 用systemd做成开机自启服务手动运行只适合调试正式部署需要做成服务。创建一个systemd服务文件sudo nano /etc/systemd/system/str2str.service内容如下[Unit] Descriptionstr2str RTK Forwarder Afternetwork.target [Service] Typesimple ExecStart/usr/local/bin/str2str -in serial://ttyUSB0:115200:8:n:1 -out ntrips://:2101/RTK_BASE -msg 1004,1019,1033,1074,1084,1094,1104,1114,1124 -t 30 -b 1 Restartalways RestartSec5 Userroot [Install] WantedBymulti-user.target然后启用服务sudo systemctl daemon-reload sudo systemctl enable str2str sudo systemctl start str2str用sudo systemctl status str2str查看运行状态。如果启动失败用journalctl -u str2str -f看日志排查。4. 实测中遇到的坑与排查思路4.1 数据能连上但无法固定差分龄期在作怪有一次我搭好转发服务后流动站能连上NTRIP也能收到数据但就是无法固定一直浮点解。排查了半天最后发现是差分龄期太大。差分龄期是指流动站使用的差分改正数距离当前时刻的时间差这个值越大改正数的有效性越差。在RTKNAVI或RTKPOST里可以看到差分龄期这个指标。正常情况下应该在1秒以内如果超过5秒基本就很难固定了。导致差分龄期大的原因有几个转发链路延迟高、基准站输出频率低、网络抖动严重。我的解决方法是把基准站的输出频率从1Hz提高到5Hz同时把str2str的缓冲区设为1减少转发延迟。调整之后差分龄期降到了0.2秒左右固定率明显提升。4.2 NTRIP客户端连接失败挂载点与认证的坑另一个常见问题是流动站连不上NTRIP服务端。可能的原因有挂载点名称写错了大小写敏感端口被防火墙挡住了str2str没有正常运行网络不通排查步骤先在服务器本机用telnet 127.0.0.1 2101测试端口是否监听。如果本机能通但外部不通检查防火墙规则。如果端口通但NTRIP连接失败检查挂载点名称是否完全匹配。还有一个容易忽略的点有些NTRIP客户端需要认证信息。str2str的NTRIP服务端模式默认不需要认证但如果你在公网环境建议加上认证。不过str2str本身对NTRIP认证的支持有限如果需要完整的认证功能可能需要配合其他工具。4.3 长时间运行后断流串口掉线的心跳检测str2str跑几天后偶尔会出现断流表现是流动站突然收不到数据了。排查发现是USB转串口设备掉线了可能是供电不稳或者USB口松动。解决方法有两个层面。软件层面str2str本身有重连机制但前提是它检测到了断流。可以配合-t参数设置超时让str2str在超时后自动重连。硬件层面换一个质量好一点的USB转串口线或者给树莓派加一个有源USB Hub保证供电稳定。另外可以写一个简单的监控脚本定期检查str2str进程是否存活如果挂了就自动重启。配合systemd的Restartalways基本上可以做到无人值守。4.4 多流动站并发时的带宽与性能当多个流动站同时连接时需要考虑带宽和性能。RTCM数据量其实不大一路10041019的消息大概每秒几百字节到一两千字节。即使10个流动站同时连接总带宽也就几十KB/s对网络压力不大。但树莓派的处理能力有限如果流动站数量很多可能会出现转发延迟。我实测树莓派4B同时转发给5个流动站没有问题延迟在可接受范围内。如果流动站更多建议用性能更好的设备或者做多级转发。还有一个优化点如果多个流动站都在同一个局域网内可以用TCP服务端模式而不是NTRIP服务端模式减少协议开销。NTRIP协议本身有一些额外的HTTP交互在局域网内用纯TCP会更高效。5. 进阶玩法把转发服务玩出更多花样5.1 串口转TCP加文件双输出调试阶段我习惯把数据同时存一份到文件方便事后分析。str2str支持多输出命令如下str2str -in serial://ttyUSB0:115200:8:n:1 \ -out tcps://:2101 \ -out file:///home/pi/rtcm_log/%Y%m%d_%H%M%S.rtcm这样数据会同时推到TCP端口和文件。文件名支持时间格式每次启动会生成一个新的日志文件。事后可以用RTKPOST加载这些日志做后处理验证转发数据的质量。需要注意的是文件输出会占用磁盘空间。按每秒1KB计算一天大概80MB左右一个月就是2.4GB。建议定期清理或者用logrotate做轮转。5.2 从NTRIP Caster拉取再转发到本地如果你用的是外部CORS服务但局域网内多台设备需要共享这份数据可以用str2str做二次转发str2str -in ntripc://user:passcaster.example.com:2101/MOUNTPOINT \ -out tcps://:2102这样str2str从外部Caster拉取数据然后在本地2102端口以TCP服务端模式发布。局域网内的设备连接本地端口即可不需要每台设备都去外部Caster拉数据。这样做的好处是减少外部连接数同时降低每台设备的配置复杂度。5.3 用配置文件管理复杂转发拓扑当转发规则比较复杂时命令行参数会变得很长不好维护。str2str支持用配置文件的方式管理。配置文件里可以定义多个输入输出流以及它们之间的转发关系。配置文件的语法和命令行类似但更清晰。比如in serial://ttyUSB0:115200:8:n:1 out ntrips://:2101/RTK_BASE out file:///home/pi/rtcm_log/base.rtcm msg 1004,1019,1033然后启动时用-c参数指定配置文件str2str -c /home/pi/str2str.conf这种方式适合需要频繁调整配置的场景改配置文件比改命令行方便得多。5.4 监控与告警让服务自己说话正式部署后你需要知道服务是否正常运行。除了systemd的状态检查还可以加一些简单的监控。比如用ntripclient定期测试NTRIP服务端是否可用或者用ss -tlnp检查端口是否监听。更完善的做法是写一个脚本定期检查str2str进程和端口状态如果异常就发告警。告警方式可以用邮件、Webhook或者其他你习惯的方式。我自己的做法是用一个简单的Python脚本每5分钟检查一次异常时通过Webhook推送到手机上。监控指标方面重点关注进程是否存活、端口是否监听、数据是否有更新、差分龄期是否正常。前三个可以在服务器端检查最后一个需要在流动站端观察。6. 关于稳定性和成本的一些个人体会这套方案我用了挺长时间从最初的树莓派3B到现在的树莓派4B整体稳定性是可靠的。成本方面树莓派加电源加外壳大概几百块USB转串口线几十块加起来不到一千块。相比商业转发服务器动辄几千上万的价格这个方案对预算有限的团队非常友好。稳定性方面最关键的是供电和散热。树莓派在野外环境要注意防水防尘电源要稳定。我遇到过因为电源电压不稳导致USB设备反复掉线的情况换了一个质量好的电源之后就再没出现过。散热方面如果放在密闭空间里夏天可能会过热降频加一个小风扇就能解决。另外一点体会是不要过度追求低延迟。RTK定位对延迟的容忍度其实比想象中高1秒以内的差分龄期都能正常工作。与其花大力气优化那几十毫秒的延迟不如把精力放在保证数据连续性和稳定性上。数据断断续续比延迟高一点要致命得多。最后说一个实际使用中的小技巧在str2str启动命令里加上-p参数指定定位模式虽然转发场景下这个参数不影响数据转发但有些版本的str2str在特定模式下对数据流的处理方式略有不同。如果遇到奇怪的问题可以试试调整这个参数。当然大多数情况下用默认值就行。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

游泳者溺水检测数据集:VOC+YOLO双格式4599张图片 2026/9/28 17:43:21

游泳者溺水检测数据集:VOC+YOLO双格式4599张图片

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Codex 插件安装配置与排错实战:从 CLI 到 IDE 的完整链路 2026/9/28 17:43:09

Codex 插件安装配置与排错实战:从 CLI 到 IDE 的完整链路

1. 装完不等于会用:Codex 插件落地的真实门槛很多人对 Codex 插件的期待,停留在“装完就能写代码”这个层面。我在几个团队里推过这套东西,实际情况是:安装只占整个上手成本的百分之二十,剩下百分之八十全在配置、调用…

阅读更多 →
Codex插件市场中文使用指南:从界面汉化到插件翻译的完整方案 2026/9/28 17:43:09

Codex插件市场中文使用指南:从界面汉化到插件翻译的完整方案

1. 从"看不懂"到"用得上":Codex 插件市场的中文困局到底卡在哪刚接触 Codex 的人,十有八九会在插件市场这一步卡住。不是插件装不上,也不是功能不会用,而是满屏的英文描述、英文分类、英文标签,让…

阅读更多 →
Codex命令行工具安装配置与实战指南:从环境准备到高效使用 2026/9/28 17:43:09

Codex命令行工具安装配置与实战指南:从环境准备到高效使用

1. 先搞清楚 Codex 到底是什么,别急着装很多人第一次听到 Codex 这个名字,脑子里第一反应是“又一个 AI 聊天工具”,然后下意识地拿它跟网页版对话产品做对比。这个理解方向从根上就偏了。Codex 的定位不是陪你闲聊的对话助手,而是…

阅读更多 →
金融信息服务系统开发与技术实现要点 2026/9/28 17:43:09

金融信息服务系统开发与技术实现要点

我无法基于当前输入生成符合要求的博文。原因如下:输入中仅提供了项目标题"financial-services",未提供任何实质性的项目正文、关键词列表、摘要描述或具体场景信息;所谓“相关热搜词”和“最新网络热词”字段为空,未给…

阅读更多 →
CLI-Anything:命令行的AI就绪抽象层 2026/9/28 17:43:09

CLI-Anything:命令行的AI就绪抽象层

1. CLI-Anything 不是又一个命令行工具,而是命令行的“操作系统级抽象层”你有没有过这种体验:在终端里敲下git commit -m "fix: typo",心里却清楚这背后调用了 Git 的 C 代码、触发了钩子脚本、校验了 pre-commit 配置、甚至可能还…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉