如何解码字节格式的RTCM数据?

问题描述 投票:0回答:4

这个问题已在 Receiving RTCM Data via NTRIP but can'ttranslate the machincode 中提出,但没有答案。

我目前正在尝试从我的 ZED-F9P 接收器获取 RTCM 和 NMEA 输出,并通过 XBee 将这 2 个数据传输到带有另一个接收器的机器人。下面的代码是我读取串口并提取2种数据类型的地方;


       
        line = self.serial.readLine()
        #TODO Decode RTCM properly
        line_str = bytes(line).decode('latin-1', errors='ignore')

        print (line_str)

        if(line_str[4] == 'G'): # $GNGGA

            if(len(line_str) > 10): 

                #Translate NMEA data into readable data
                msg = pynmea2.parse(line_str)
                
                self.lat_deg = msg.latitude #msg is the object, latitude is the attribute
                self.lon_deg = msg.longitude #msg is the object, longitude is the attribute

                #Emit the signals (lat_deg & lon_deg) to the slot 
                self.gpsdata.emit(self.lat_deg, self.lon_deg) #send as a tuple

            else:
                pass

不进行任何解码,RTCM输出如下;

b'3E\r\n\xd3\x008?]\x0c\xe5^;\x834I\x0c\xa0\x01Hy\x00\nDh\x00Q\xf6\xc0\x19\x10&\x00\xc8~\xb0%\x83\xfd\x00\x19\x1f\xf8\x00\xc9\x00@\x06H\r\x01,@x\tb\x05@2\x10\x17\x19@\xbaU\xca\r\n'

latin-1
作为解码器,RTCM输出如下;

Ó Là ííÖ
µb\ D  ä  ðÿÿÿÿ '¹)  $             ÿÿÿÿÿÿ v
                                           ß                     N  ¨'  lB>        ëñµb D              ÿÿÿÿÿÿ v
                                                                                                               ß¡Ã

我尝试了不同的编解码器,例如

latin-1
utf-8/16/32
ascii
ISO-8859-1
,但它们都无法为我提供像 NMEA 消息一样的可读输出;

$GNGGA,,,,,,0,00,99.99,,,,,,*56

$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99,1*33

$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99,2*30

$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99,3*31

任何帮助将不胜感激!

python-3.x gps
4个回答
2
投票

RCTM 不是像 NMEA 那样的文本格式,因此需要按照 RTCM STANDART 10403.2 进行解码 但如果您想将 RTCM 数据传输到另一个接收器,则不需要对其进行解码,第二个接收器将自行完成。


1
投票

尝试“gpsdecode”工具。如果您是基于 Debian 的用户,您可以安装它。

apt-get 安装 gpsd-clients

你可以管它!


0
投票

从 RTCM 生成 NMEA 虽然可以做到,但毫无用处。

RTCM frombase + raw gnss from your receiver= precised location(NMEA/ubx/...)

我相信您必须阅读更多有关 RTCM 的内容,RTCM 数据是 RTK 算法使用的校正消息,这些算法大多内置于大多数高端接收器和一些低成本接收器中。 Ublox f9p 也有同样的情况。您只需将 RTCM 数据无需任何修改推入模块即可。您可以通过观看消息 ubx-rxm-rtcm 来检查,几秒钟后您将看到浮动,如果一切正常则修复。

如果您想构建一个软件来分析 RTCM 源,那么可能需要解析它们中的每一个。使用 snip,您可以查看 RTCM 消息详细信息。


0
投票

用于 RTCM 解码的 KernelSAT 服务可能会有所帮助: https://kernelsat.com/kss.php

© www.soinside.com 2019 - 2024. All rights reserved.