这个问题已在 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
任何帮助将不胜感激!
RCTM 不是像 NMEA 那样的文本格式,因此需要按照 RTCM STANDART 10403.2 进行解码 但如果您想将 RTCM 数据传输到另一个接收器,则不需要对其进行解码,第二个接收器将自行完成。
尝试“gpsdecode”工具。如果您是基于 Debian 的用户,您可以安装它。
apt-get 安装 gpsd-clients
你可以管它!
从 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 消息详细信息。
用于 RTCM 解码的 KernelSAT 服务可能会有所帮助: https://kernelsat.com/kss.php