基于Drotek-ZED-F9P的GPSD与NTRIP差分改正实现厘米级定位
实现Drotek-ZED-F9P厘米级定位(SAPOS差分+Linux)
方案一:gpsd + RTKLIB str2str工具(适配gpsd场景)
gpsd原生不支持NTRIP,但可以用RTKLIB自带的str2str工具做中间转发,把SAPOS的差分数据直接推给ZED-F9P板卡,再通过gpsd读取定位结果。
操作步骤
- 确认RTKLIB已安装:
sudo apt install rtklib
- 找到SAPOS的NTRIP参数:包括Caster地址、端口、对应区域的挂载点,以及认证用的用户名/密码(部分SAPOS服务需要)。
- 查看ZED-F9P的USB串口路径,通常为
/dev/ttyACM0,可通过ls /dev/ttyACM*确认。 - 启动差分数据转发:
str2str -in ntrip://<用户名>:<密码>@<caster地址>:<端口>/<挂载点> -out serial:///dev/ttyACM0:115200:8:n:1:off
注意:波特率
115200要和ZED-F9P的默认配置一致,若之前修改过板卡波特率,需同步调整此处参数。
- 重启gpsd并验证:
sudo systemctl restart gpsd cgps -s
等待3-5分钟,定位模式会从3D Fix切换为RTK Fixed,此时即为厘米级精度。
方案二:直接用RTKLIB rtkrcv(更稳定的纯RTK解算)
你之前配置rtkrcv失败,核心是参数配置不到位,以下是可直接复用的配置步骤:
操作步骤
- 创建rtkrcv配置文件
zed-f9p-sapos.conf:
# 主设备输入(ZED-F9P USB串口) inp1-type = serial inp1-path = /dev/ttyACM0 inp1-baud = 115200 inp1-format = ubx # NTRIP差分输入 inp2-type = ntripcli inp2-path = <caster地址>:<端口>/<挂载点> inp2-user = <用户名> inp2-pass = <密码> inp2-format = rtcm3 # 定位模式设置(固定解,厘米级) pos-mode = fix freqs = 1 2 # 适配GPS+GLONASS,若板卡支持多频可追加参数 sol-type = llh out-path = solution.log # 输出解算日志
- 启动rtkrcv:
rtkrcv -c zed-f9p-sapos.conf
- 验证定位状态:
在rtkrcv交互界面输入status,若显示Solution status: FIX,说明已进入厘米级定位;也可通过cat solution.log | grep "FIX"实时查看结果。
解决RTKLIB navi无法识别板卡的问题
如果用navi工具,需排查以下几点:
- 串口权限:执行
sudo chmod 666 /dev/ttyACM0,或把当前用户加入dialout组(sudo usermod -aG dialout $USER,重启后生效)。 - 协议匹配:navi中要选择
UBX格式(ZED-F9P默认输出UBX协议),而非NMEA。 - 波特率一致:navi设置的波特率必须和ZED-F9P的配置匹配(默认115200)。
关键注意事项
- 优先选择离当前位置最近的SAPOS基准站挂载点,差分延迟越小,定位精度越稳定。
- ZED-F9P进入RTK Fixed模式需要3-10分钟,需确保天线处于开阔无遮挡的环境。
- 用方案一时,启动
str2str前需停止gpsd,避免串口占用冲突:sudo systemctl stop gpsd。
内容的提问来源于stack exchange,提问作者Eric Böwer
相关产品推荐
相关产品推荐

