微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > Dragonboard 410c开发板应用:使用Python脚本解析GPS报文位置信息

Dragonboard 410c开发板应用:使用Python脚本解析GPS报文位置信息

时间:02-09 来源:互联网 点击:

dragonboard 410c是一款非常强大的开发板,其自带了GPS,wifi和高性能的图形处理单元,可以方便的实现物联网中的各项功能需求,GPS作为物联网设备中常用的功能,可以方便的实现对设备的定位,是许多物联网应用的基础,这篇blog将向大家简单的介绍如何使用Python脚本在dragonboard 410c上解析GPS报文数据。

首先我们需要了解GPS报文格式,这里我们介绍和使用的是目前行业推荐的常用的GPS报文格式,如下:

d.推荐定位信息(RMC)

$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh

<1> UTC时间,hhmmss(时分秒)格式

<2> 定位状态,A=有效定位,V=无效定位

<3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)

<4> 纬度半球N(北半球)或S(南半球)

<5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)

<6> 经度半球E(东经)或W(西经)

<7> 地面速率(000.0~999.9节,前面的0也将被传输)

<8> 地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)

<9> UTC日期,ddmmyy(日月年)格式

<10> 磁偏角(000.0~180.0度,前面的0也将被传输)

<11> 磁偏角方向,E(东)或W(西)

<12> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

e.地面速度信息(VTG)

$GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh

<1> 以真北为参考基准的地面航向(000~359度,前面的0也将被传输)

<2> 以磁北为参考基准的地面航向(000~359度,前面的0也将被传输)

<3> 地面速率(000.0~999.9节,前面的0也将被传输)

<4> 地面速率(0000.0~1851.8公里/小时,前面的0也将被传输)

<5> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

看到上面的格式后,结合前面几篇blog中有关的XML文件的解析和python脚本消息的操作,这就非常简单了,我们如果需要读取GPS报文中的位置信息和时间信息,就可以设计下面的函数来完成:

 class gpsDataProcessing:
    def __init__(self,gpsFrame):
        self.gpsData=gpsFrame
        
    #get laTItude and longitude date from gpsFrame
    # East Longitude and North laTItude is abs posiTIve number +
    # West longtude and south laTItude is negative -
    # return (longitude and latitude)
    def getPosition(self):
        # when gpsFrame is GPRMC 
        longitude=0.0
        latitude=0.0
        dataList=self.gpsData.split(',')
        utcTime=dataList[1]
        if dataList[0]=='$GPRMC'or dataList[0]=='$gprmc' :
            if dataList[6]=='E' or dataList[6]=='e':
                longitude=float(dataList[5])
            elif dataList[6]=='W' or dataList[6]=='w':
                longitude=0-float(dataList[5])
            else:
                return -1
            if dataList[4]=='N'or dataList[4]=='n':
                latitude=float(dataList[3])
            elif dataList[4]=='S'or dataList[4]=='s':
                latitude=0-float(dataList[3])
            else:
                return -1
        elif dataList[0]=='$GPGGA'or dataList[0]=='$gpgga' :
            if dataList[5]=='E' or dataList[5]=='e':
                longitude=float(dataList[4])
            elif dataList[5]=='W' or dataList[5]=='w':
                longitude=0-float(dataList[4])
            else:
                return -1
            if dataList[3]=='N'or dataList[3]=='n':
                latitude=float(dataList[2])
            elif dataList[3]=='S'or dataList[3]=='s':
                latitude=0-float(dataList[2])
            else:
                return -1
               
        return(utcTime,longitude,latitude)

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top