使用 GPSD 快速读取 GPS 信息

2023-05-16

在 Linux 系统中,如果你需要连接 GPS 传感器进行测试,那么使用 GPSD 可以满足你的需求,帮助你快速实现 GPS 数据的获取。本文将使用导远 INS570D 传感器(车载高精度组合导航系统),演示如何在 Ubuntu 系统中获取其 RS-232 接口输出的 GPS NMEA 格式数据,并将时间、经度、纬度、海拔等信息展示出来。

你可以使用其他 GPS 传感器来完成本次实验,只要兼容 NMEA-0183 协议即可。关于 NMEA 协议的详细介绍,请参考《GPS NMEA 协议》。

GPSD 简介

GPSD 是一系列管理 GPS 设备和其他用于导航与精确计时的传感器的工具,包括航海自动识别系统(Automatic Identification System)的无线电广播设备和电子罗盘。其中最主要的程序是一个叫做 gpsd 的服务守护进程,它管理着这些传感器,并且在 TCP/IP 端口生成 JSON 流报告。其他的程序包括用来展示代码模型和各种诊断工具的客户端。

简单来说,GPSD 具有如下功能特性:

  • 自动探测并识别 GPS 协议,同时支持多个 GPS 设备,并且可以动态进行设备控制;
  • 支持 PPS 并且与 NTPD 结合,实现时间服务;
  • 统一生成 JSON 流报告给上层客户端;
  • 支持 DBUS,共享内存以及本地 SOCKET 等方式与客户端通讯,最大支持 64 个;
  • 提供丰富的组件及工具用来调试及测试;

安装 GPSD

在开始之前,请先执行下面命令安装 gpsd 及各客户端程序。

sudo apt install gpsd gpsd-clients

安装完成后,你的 Linux 系统会增加几个命令:

命令说明
gpsd最重要的 GPSD 服务守护进程。
gpsprof一个为错误统计和设备超时产生报告的分析器。
gpsctl一个调整设备设置的公共程序。
gpsdecode一个把传感器日志批量转换成可读的 JSON 的程序。
gpsfake一个能够连接任意数目的活动传感器日志的测试套件,可以重复运行有错误报告的传感器日志来重新产生特定的问题。
cgps将 GPS 结果以图形化显示。
gpsmon将 GPS 结果以图形化显示。

启动 GPSD

虽然 gpsd 作为一个服务程序通常使用 systemd 启动和停止(并且通常在启动时启动),例如:

以 systemd 方式启动 gpsd 服务

sudo systemctl start gpsd

以 systemd 方式停止 gpsd 服务

sudo systemctl stop gpsd
sudo systemctl stop gpsd.socket

查看 gpsd 服务状态

sudo systemctl status gpsd

但是为了简单起见,我们还是手动运行它。这样会更加灵活一点,尤其是当我们需要处理来自 GPS 设备的数据时,比如我们通过串行或 USB 端口连接 GPS 传感器,这样可以在启动 gpsd 服务时指定设备节点。

手动方式启动 gpsd 守护进程

gpsd /dev/ttyUSB0

当然,你的设备节点有可能不是 /dev/ttyUSB0。在 Linux 系统中,你可以通过 minicom 或 socat 命令简单测试一下,看看能够读取 GPS 设备的数据。

例如,在我们这里,打开 /dev/ttyUSB0 串口,可以看到 INS570D 输出如下数据,即可确定该设备名称是正确的。

$GPGGA,125657.00,2309.61109941,N,11329.63396336,E,1,28,0.6,51.3817,M,-6.1780,M,,*42
$GPRMC,125657.00,A,2309.61109941,N,11329.63396336,E,0.006,9.7,081222,3.2,W,A*2B

注意:如果没有收到 GPS 数据,可能是权限问题导致的。执行下面命令将当前用户(非 root 用户)添加到 dialout 用户组,然后重启系统后再次尝试。

sudo usermod -a -G dialout $USER

观测 GPS 信息

当我们启动 gpsd 守护进程之后,就可以使用 GPSD 自带的客户端程序观察 GPS 数据了。

启动 cgps 客户端观测数据:

cgps

可以看到如下界面:

启动 gpsmon 客户端观测数据:

gpsmon

可以看到如下界面:

这样就可以很直观地看到来自 GPS 传感器的位置、速度、时间等信息啦!

动手写程序

如果你想自己编写应用程序获取来自 gpsd 的数据,可以使用 libgps 库,具体使用方法请参考《libgps 使用教程》。

示例代码:read_gps_data.c


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 GPSD 快速读取 GPS 信息 的相关文章

  • linux中shell的常用命令

    shell 常用命令 什么是shell xff1f shell 也是操作系统中的一个软件 xff0c 它包在 linux 内核的外面 为用户和内核之间的交互提供了一个接口 一 diff命令 diff b表示忽略空格 xff0c B表示忽略空
  • 空心杯电机学习笔记

    空心杯电机学习笔记 1 空心杯电机 xff08 直流电机 xff09 的硬核拆解2 空心杯电机的驱动模块学习 xff08 1 xff09 无人机飞控原理学习的流程介绍 xff08 空心杯四旋翼DIY xff09 xff08 2 xff09
  • C++ 中“空引用”与“空指针”的区别

    网络上有很多讨论C 43 43 的 引用 与 指针 的区别的文章 xff0c 谈到区别 xff0c 其中有一条 xff1a 引用不能为空 xff08 NULL xff09 xff0c 引用必须与合法的存储单元关联 xff0c 指针则可以是N
  • 关于 std::vector 的下标越界检查

    当要获取 std vector 的第 n 个元素 xff0c 下面几种方式都可以 xff1a std vector lt int gt vec size t n 61 1 int amp i 61 vec n int amp j 61 ve
  • 【第三篇】 基于 Qt 的 REST 网络框架

    本文是 Qt 框架性开发实践 基础框架篇 的第三篇 本文所讲的内容已经开源 xff0c 你可以在 这里 找到源代码 在 Java 以及其他语言中 xff0c 处理与后端的 HTTP 通讯 xff0c 有专门的工具库 xff0c 使用起来特别
  • Qt/QML 实现图片圆角剪切效果

    在很多 UI 设计中 xff0c 需要将图片按照一定的方式整形 比如下面的 VIP 图片就是用一个圆形剪切原始图片 xff0c 形成的效果 其实它的原始图片是这样的 xff1a 要在 QML 中实现这样的效果 xff0c 可以使用 Opac
  • 实现 DirectShow 虚拟 Camera 驱动

    今天我们要实现一个虚拟 Camera 驱动 有这个驱动 xff0c 在 播放软件 xff08 如 VLC xff09 视频会议软件 主播视频制作软件 xff08 如 OBS xff09 中 xff0c 就可以播放 加入我们的各种特制内容了
  • 通过 ffmpeg 串流对接 OBS 等直播软件

    我们要将设备通过私有通道输出到 H264 流 xff0c 传给 OBS 等直播软件使用 为此 xff0c 设计了上图所示的串流工具 设计思路 私有通道通过 API 接口提供 H264 流 xff0c 要传给 ffmpeg xff0c 最简单
  • 排查 Edge WebView2 在某个设备上不出图像的问题

    我们在 Windows 应用内嵌入 Edge WebView2 xff0c 来展示部分用网页实现的界面 总得来说还是不错的 xff0c 比如 xff1a 渲染很快 xff0c 基本上内置网页100毫秒以内控件样式很清爽 xff0c 没有多余
  • 一个 Qml MenuBar 的问题

    基本情况 使用 QQuick Control 中的 MenuBar 实现主菜单栏 菜单栏包括 File Edit View Help 菜单项 点击菜单项 xff0c 会弹出对应的菜单 ApplicationWindow id window
  • 在 Linux 中安装微信

    微信 xff0c 是我在 Linux 中最难以舍弃的一个软件 因为安装经常遇到奇怪的问题 xff0c 而知乎上完整的教程并不多 xff0c 本文试图补上这个遗憾 适用范围 xff1a 本文以最流行的发行版 Manjaro xff08 KDE
  • TCP连接被意外重置的原因

    今天在做服务器压力测试的时候 xff0c 出现了很奇怪的情况 xff0c 与服务器建立连接会成功 xff0c 但是很快会被重置 RESET 掉 花了半天时间 xff0c 终于找到原因所在 xff0c 我把过程和结果写下来与大家分享 服务器正
  • 进程互斥锁

    进程间共享数据的保护 xff0c 需要进程互斥锁 与线程锁不同 xff0c 进程锁并没有直接的C库支持 xff0c 但是在Linux平台 xff0c 要实现进程之间互斥锁 xff0c 方法有很多 xff0c 大家不妨回忆一下你所了解的 下面
  • boost asio 应用方法学(二)——深入框架

    要用好它 xff0c 就必须先了解它 xff0c 而且不能停止于表面 xff0c 必须深入到内部 而了解一件事物 xff0c 先要了解它的框架 xff0c 再了解它的细节 了解了框架 xff0c 我们就有了提纲挈领的认识 关于 boost
  • 【MapGIS精品教程】011:大型商场选择案例教程

    文章目录 一 加载数据 二 缓冲区构建 三 叠置分析 四 图件制作 合理的商场位置有利于商家营业 方便人们购物 商场选址问题需要考虑很多因素 如地理位置 居民点分布 停车场分布 交通情况等 综合把握这些影响因素对商场的选址显得尤为重要 一
  • 【MapGIS精品教程】012:数字地形分析案例教程

    文章目录 一 DEM概述 二 DEM建立 1 创建规则格网Grid 2 创建不规则三角网Tin 三 数字地形分析 1 高程点查询与编辑 2 地形因子分析 3 日照晕渲图输出 4 蓄积量计算 5 剖面分析 6 平面等值线追踪 一 DEM概述
  • 【MapGIS精品教程】013:如何制作三维电子沙盘?

    MapGIS电子沙盘 DEM DOM 效果 文章目录 一 切换显示模式 二 创建数据层 1 创建图层 2 关联地形数据 3 添加影像层 4 关联影像数据源 三 显示瓦块裙边 四 设置高程缩放 电子沙盘即DEM DOM 是在 三维基础平台 模
  • 【ArcGIS微课1000例】0066:图像融合(高光谱+多光谱)操作案例教程

    本文讲解ArcGIS中图像增强 融合 高光谱 多光谱 操作案例教程 文章目录 一 图像融合概述 二 图像融合案例 1 加载数据 2 图像融合 一 图像融合概述 图像融合是指将不同类型传感器的影像进行融合 既能使图向具有较高的空间分辨率 又具
  • 【MapGIS精品教程】014:栅格数据管理与应用

    文章目录 一 栅格数据入库 二 栅格目录 三 栅格数据的显示调整 1 直方图拉伸 2 RGB设色 3 无效值设置 4 色表编辑 5 多影像显示方式 6 像元值查看 四 影像分析处理 1 影像裁剪 2 影像镶嵌 3 融合 4 重采样 5 投影
  • 【GlobalMapper精品教程】058:如何从矢量数据中查找重复要素和重叠要素?

    文章目录 一 查找重复要素 二 查找重叠要素 一 查找重复要素 打开globalmapper24 0中文汉化版 加载配套实验数据包中的data058 rar中的矢量数据 如下图所示 点击 分析 查找重复要素 打开 重复的要素 对话框 此工具

随机推荐