首页 » 技术文章 » 嵌入式Linux平台的GPS数据采集研究

嵌入式Linux平台的GPS数据采集研究

作者:  时间:2010-12-28 15:35  来源:EDN

  随着GPS(全球定位系统)和便携移动设备的飞速发展,各种各样以GPS为基础的便携式定位系统相继出现。嵌入式Linux以其开放性、安全性、健壮性和 稳定性越来越成为各种便携设备的主要开发平台,因此GPS模块与嵌入式Linux平台之间的通信成了实现定位系统的基础。

  GPS模块与嵌入式Linux平台之间进行数据传送,大多采用异步串行传送方式,GPS作为终端设备(DTE)与嵌入式平台之间通过RS-232C串行通 信接口进行数据交换。因此,与GPS的数据通信在实现上即是LinuX下的串口编程,对于两者之间的通信协议,可选的协议有很多种,而NMEA0183是目前普遍采用的一种。

  1 NMEA0183通信协议

  NMEA0183GPS数据的通信协议,GPS的通信协议有很多种,但目前绝大多数GPS模块生产厂商都采用NMEA0183协议作为其遵循的标准,因此在实现GPS与嵌入式Linux平台之间的通信时,应先对NMEA0183协议有一定的了解。

  (1)NMEA0183的通信参数。波特率:4800baud;数据位:8;奇偶校验:无;停止位:1位。

  (2)NMEA0183的报文格式。NMEA 0183协议报文的语句串(ASCII字符)格式全部信息如图1

$AAXXX     ,ddd     ……     ,ddd     *hh     <CR><LF>

1 NMEA0183的报文格式

  图1中具体内容:$为串头,表示串开始;AA为识别符;XXX为语句名;ddd...ddd为数据字段,字母或数字;*表示串尾;hh表示$*之间所有字符代码的校验和;<CR>为回车控制符;<LF>为换行控制符。

  在实际的GPS应用中,并不会用到NMEA的全部信息,而是根据具体的需要,从中选取有用的信息,忽略其余的信息内容。

  例如$GPRMC,152252,A,2513.3072,N,10346.3723,E,0.0,230.4,250503,1.3,W,A,* 02

  其中,$GPRMC为串头,表示此语句为定位语句;“*”之前的内容为数据字段,“152252”UTC24小时制的标准时间,格式为时时/分分/ “A”表示信号接收状态,“A”表示接收正常,也可能为“V”,则表示一个警告,与卫星通信不正常;“2513.3072”表示纬度值;“N”标明 南北半球,“N”表示北纬,“S”表示南纬;“10346.3723”表示经度值;“E”标明东西半球,“E”表示东经,“W”表示西经;“0.0”表示 速度;“230.4”表示方位角,它的范围为000.0-359.9“251205”表示UTC标准时间的日期,格式为日日/月月/年年“1.3”表示磁偏角,范围为000.0-180.0“W”表示地磁变化方向。

  2 GPS数据的采集

  嵌入式Linux平台下的GPS数据采集涉及到Linux串口编程技术,因此首先介绍Linux串口编程的相关知识,再给出一个简单的代码段,实现GPS定位信息的获取。

  2.1 Linux串口通信

  在Linux操作系统中,所有的设备都是被当作文件来进行操作的,所有的设备以设备文件的形式存储在目录/dev/下,串口的设备文件为/dev/ttyS*,其中,ttyS0为串口一,ttyS1为串口二,以此类推。

  Linux下定义了一个查询和操纵终端的标准接口,该接口被称为termios,在系统头文件<termios.h>中定义。它包括一个数据 结构和一系列操纵这些数据结构的函数组成。有关串口的所有参数配置都保存在接口termios的结构struct termios中,该结构定义如下:

  其中的c_flag成员是用来控制输入处理选项的,它将影响到终端驱动程序在把输入发送给程序前是否对其进行处理,及怎样对其进行处理。c_oflag 员是用来控制输出数据的处理,并决定在发送输出数据到显示屏和其他输出设备之前,终端驱动程序是否以及如何来处理它们。c_oflag用于存放各种决定终 端设备硬件特性的控制标志。存放在c_lflag中的本地模式标志用来操纵这样的一些终端特性,比如是否将输入字符显示到显示屏上。c_cc包含了特殊字 符序列的值,比如^(退出)^H(删除),以及它们所代表的操作。除了上面的这个包含串口参数配置的数据结构之外,termios中还包含许多控制串口 特性的函数。其中基本的函数如:tcgetattr()tcsetattr()tcgetattr()用来初始化一个termios数据结构,之后可 使用其它的函数来操纵由tcgetattr()返回的数据结构。完成这些操作后,使用tcsetattr()来更新串口的设置。

  其它对串口的打开、关闭、读取功能与其它的文件操作一致,使用open()close()read()函数完成。

  在采集GPS数据的过程中,需对所读取的数据进行鉴别区分,只选取其中有用的信息进行处理而忽略其余的信息,这需要根据NMEA0183协议中规定的语句格式来进行筛选。

相关推荐

u-blox发表适用于低功耗装置的新款GPS/GLONASS 接收器平台u blox 8

GPS  GLONASS  GNSS  U-BLOX  2016-01-11

u-blox发布整合3D传感器的终极室内/室外定位模块NEO-M8L

GPS  u-blox  GNSS  2014-11-12

u-blox发布全球最小的独立式定位模块EVA-M8M

2014-11-09

Ctrack选用u-blox GPS和蜂巢式模组开发车队管理解决方案

u-blox  嵌入式  Ctrack  2014-05-21

动作撷取追踪的嵌入式体感控制新技术

嵌入式  体感控制  2013-12-06

u-blox发表业界最小的独立式GNSS模组- EVA-7M

u‑blox  GNSS  EVA-7M  GPS  2013-11-21
在线研讨会
焦点