GPSD架构介绍及交叉编译和使用
一、功能介绍
GPSD是一系列管理GPS设备和其他用于导航与精确计时的传感器的工具,包括航海自动识别系统(marine AIS (Automatic Identification System))的无线电广播设备和电子罗盘。其中最主要的程序是一个叫做gpsd的服务守护进程,它管理这这些传感器,并且在TCP/IP端口生成JSON流报告。其他的程序包括用来展示代码模型和各种诊断工具的客户端。
特点:
自动探测并识别GPS协议,同时支持多个GPS设备,并且可以动态进行设备控制
支持PPS并且与NTPD结合,实现时间服务
统一生成JSON流报告给上层客户端
支持DBUS,共享内存以及本地SOCKET等方式与客户端通讯,最大支持64个
提供丰富的组件及工具用来调试及测试
二、组件介绍
Gpsprof: 一个为错误统计和设备超时产生报告的分析器
Gpsctl: 一个调整设备设置的公共程序
Gpsdecode: 一个把传感器日志批量转换成可读的JSON的程序
gpsfake:一个能够连接任意数目的活动传感器日志的测试套件,可以重复运行有错误报告的传感器日志来重新产生特定的问题
cgps: GPS结果以图形化显示
gpsmon:GPS结果以图形化显示
三、软件结构
gpsd的内部构造分成四个部分:驱动(drivers)、包嗅探器(packet sniffer)、核心库(core library)和多路复用器(multiplexer)
驱动:把数据包解析成时间-位置-速度或者状态信息、更改其模式或者波特率、探测设备亚型等的方法。辅助方法能够支持驱动程序的控制操作,比如改变设备的串行速度
数据包嗅探器: 负责从串行输入数据流挖掘数据包
核心库: 管理一个与传感器设备的会话,它负责根据嗅探器返回的包类型把每一个GPS连接切换到正确的设备驱动上
多路复用器: 用来处理客户端会话和设备分配,负责把报告传递给客户端、接收客户端命令、响应热插拔通知
四、数据流视图
一些特点:
核心程序及库,不使用malloc
Json解析不使用malloc,不支持null对象以及数组必须定长
五、性能测试
cpu: imx8
gps: ublox F9P
系统:Linux
Ublox支持GPS+BD+Galileo+GLONASS,最高460800波特率,支持10HZ,8HZ选择
协议格式 |
波特率 |
频率 |
一次输出包条数 |
GPSD处理时间(从串口接收到JSON输出) |
NMEA0183 |
230400 |
10HZ |
27,耗时50ms |
50ms |
Ublox 二进制协议 |
230400 |
10HZ |
2(间隔10ms) |
1ms |
六、总结
GPSD处理协议以及转换为json到输出,耗时1ms左右
使用NMEA0183,主要耗时在 一次结果输出的27条数据总接收时间
使用ublox私有协议,每次只有2条数据,其间隔10ms,性能很高
七、GPSD配置
gpsd默认使用scons编译,主要配置文件为Sconstruct
选项配置集中在boolopts,包括驱动列表,时间服务,外部库依赖,通讯方式等等
boolopts = (# GPS protocols("ashtech", False, "Ashtech support"),("earthmate", False, "DeLorme EarthMate Zodiac support"),("evermore", False, "EverMore binary support"),("fury", False, "Jackson Labs Fury and Firefly support"),("fv18", False, "San Jose Navigation FV-18 support"),("garmin", False, "Garmin kernel driver support"),("garmintxt", False, "Garmin Simple Text support"),("geostar", False, "Geostar Protocol support"),("greis", False, "Javad GREIS support"),("itrax", False, "iTrax hardware support"),("mtk3301", False, "MTK-3301 support"),("navcom", False, "Navcom NCT support"),("nmea0183", True, "NMEA0183 support"),
....# Time service("ntpshm", True, "NTP time hinting via shared memory"),("ntp", True, "NTP time hinting support"),("oscillator", True, "Disciplined oscillator support"),("pps", True, "PPS time syncing support"),# Export methods("dbus_export", False, "enable DBUS export support"),("shm_export", True, "export via shared memory"),("socket_export", True, "data export over sockets"),}
串口配置,连接客户端个数,python环境 和 交叉编译相关:
其中sysroot,target指定为交叉编译路径和名称
nonboolopts = (("fixed_port_speed", '230400', "fixed serial port speed"),("fixed_stop_bits", '1', "fixed serial port stop bits"),("gpsd_group", def_group, "privilege revocation group"),("gpsd_user", "nobody", "privilege revocation user",),("max_clients", '64', "maximum allowed clients"),("max_devices", '4', "maximum allowed devices"),("prefix", "/media/gwind/gcode/opensource/gpsd-3.19/out", "installation directory prefix"),("python_coverage", "coverage run", "coverage command for Python progs"),("python_libdir", "", "Python module directory prefix"),("qt_versioned", "", "version for versioned Qt"),("sysroot", "/opt/fsl-imx-wayland/4.14-sumo/sysroots/aarch64-poky-linux","cross-development system root"),("target", "aarch64-poky-linux", "cross-development target"),("target_python", "python", "target Python version as command"),
)
关于库,主要有两个:
libgpsd.a,主要是gpsd服务,gpsctl,gpsmon工具使用,包含功能更强大,可直接调用更底层功能
libgps.so, 对外提供的接口,通过unix sock,共享内存以及dbus等方式,主要有相关工具集使用,比如cgps,gpspipe等
八、使用
gpsd 运行, -N 前台运行,-D 指定log等级,-n 不等待客户端连接
服务运行之后,客户端可直接使用,默认都是链接的静态库,没有环境依赖
如cgps:
gpsmon:
GPSD架构介绍及交叉编译和使用相关推荐
- Pixhawk系统架构介绍
前段时间导师叫我做扑翼无人机,工程上需要实现的,能够通过程控飞起来,感觉难度挺大.先从研究PX4开始,打算一步步理解透整个PX4的框架,机型的适配.旋翼.固定翼的姿态控制,新机型的添加等等.不知道能不 ...
- MindSpore Lite整体架构介绍
MindSpore Lite整体架构介绍 MindSpore Lite框架的总体架构如下所示: • 前端(Frontend): 负责模型生成,用户可以通过模型构建接口构建模型,将第三方模型和MindS ...
- MindSpore整体架构介绍
MindSpore整体架构介绍 MindSpore框架架构总体分为MindSpore前端表示层.MindSpore计算图引擎和MindSpore后端运行时三层. • MindSpore前端表示层(Mi ...
- 微服务架构介绍和RPC框架对比
微服务架构介绍和RPC框架对比 1.微服务架构 1.1 特征 自动化部署,端点智能化,语言和数据的去中心化控制. 1.2架构 一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中 ...
- 伍哥原创之豆荚商城商品搜索架构介绍
为什么80%的码农都做不了架构师?>>> 豆荚商城(www.dou55.com)商品搜索架构介绍 1,需求分析 伍哥所在的豆荚商城是一个家电行业的B2C网上零售平台.作为这样一 ...
- 12.1 LNMP架构介绍;12.2 MySQL安装;12.3-2.4 PHP安装(上下);12.5
扩展: Nginx为什么比Apache Httpd高效:原理篇 http://www.toxingwang.com/linux-unix/linux-basic/1712.html apache和ng ...
- Kafka系列一之架构介绍和安装
Kafka架构介绍和安装 写在前面 还是那句话,当你学习一个新的东西之前,你总得知道这个东西是什么?这个东西可以用来做什么?然后你才会去学习它,使用它.简单来说,kafka既是一个消息队列,如今,它也 ...
- LAMP架构介绍、MySQL和MariaDB介绍、MySQL安装
2019独角兽企业重金招聘Python工程师标准>>> LAMP架构介绍 Linux+Apache+MySQL+PHP 就是在linux系统上安装httpd. mysql .PHP, ...
- 互联网直播云计算架构介绍
互联网直播云计算架构介绍 原文:互联网直播云计算架构介绍 思想 拆分 URL分层 模块化 云服务结构 ECS 云计算的优势 -------------------------------------- ...
最新文章
- 我愿意参加计算机俱乐部的英文,如果你是一英语俱乐部的负责人你会组织什么活动...
- rose 2003 7.0_安卓微信7.0.17正式版更新:十大新鲜功能~
- yii表单ajax验证,yii2 modal弹窗之ActiveForm ajax表单异步验证
- C语言实例第1期:十进制数转换二进制数
- 相机参数设置程序_自定义拍摄模式怎么设置?教你学会相机设置。
- java 打包zip下载_java web 将文件打包成 .zip后 肿么自动弹出下载框提示并下载?
- [react] 有在项目中使用过Antd吗?说说它的好处
- 项目开发--高级功能汇总
- LeetCode 1879. 两个数组最小的异或值之和(状态压缩DP)
- vue-cli打包后的思索--代码优化
- 华为云推UGO:一手抓结构迁移,一手抓SQL转换
- svn:Cannot negotiate authentication mechanism
- opencv 识别长方形_利用opencv识别并提取图片中的矩形
- iRecognizer号码扫描开发实录
- 用java代码模拟鼠标双击事件
- 利用InVEST模型的生境质量模块计算生境质量
- pdf 分形 张济忠_分形理论及其研究方法.pdf
- 程序员的超大文件下载方法
- 删库是不可能删库的,这辈子是不可能删库的
- windows的ping测试脚本