NXP i.MX8系列平台开发讲解 - 4.1.3 GPSD 使用

news2024/9/23 5:19:17

专栏文章目录传送门:返回专栏目录

Hi, 我是你们的老朋友,主要专注于嵌入式软件开发,有兴趣不要忘记点击关注【码思途远】


文章目录

关注+星号公众号,不容错过精彩

图片

作者:HywelStar

目录

1. 认识GPSD

2. 安装GPSD

2.1 确定串口设备

2.2 配置GPSD

2. 应用程序接入

2.1 代码编译运行

3. 总结


本章节主要介绍GPSD 的使用,简单来说GPSD 是一个开源项目,适用于各种不同的GNSS模块创建的一个中间层服务,应用层可以方便的与GPSD服务进行交互获取相关的数据,更重要的意义来说统一了应用层调用接口,采用网络方式进行通信,采用统一的JSON 数据格式进行交互。当然在你的项目中,GPSD也不是非必须得服务,也可以不用这样,可以直接进行GNSS数据的分析到应用层。

1. 认识GPSD

GPSD 是一个开放源代码的守护进程,用于从 GPS 接收器收集位置信息,并将其标准化为应用程序可以轻松读取的格式。可以将数据标准化并通过 TCP/IP 套接字提供给多个客户端应用程序。它支持多种 GPS 硬件设备,并能够解析各种 NMEA 数据协议。

特点:

  • 支持多种设备:GPSD 支持许多不同的 GPS 接收器和其他 GNSS (全球导航卫星系统) 设备。

  • 标准化数据:GPSD 将来自不同 GPS 设备的原始数据标准化,以便客户端应用程序可以使用一致的 API 来访问位置信息。

  • 多客户端支持:多个客户端可以同时连接到 GPSD,并从同一 GPS 接收器接收位置信息。

  • 数据格式:GPSD 使用 JSON 格式传递数据,使得解析和使用数据变得简单。

  • 时间同步:GPSD 还可以用于高精度的时间同步,从 GPS 接收器获取时间信息来同步系统时钟。

应用场景:

  • 导航系统:GPSD 可以用于汽车导航系统,提供实时的位置信息和导航数据。

  • 地理信息系统 (GIS):在 GIS 应用中,GPSD 可以提供准确的位置信息用于地理数据的收集和分析。

  • 时间同步:一些系统需要高精度的时间同步,GPSD 可以从 GPS 信号中提取时间信息并同步系统时钟。

  • 移动应用:在移动设备或应用程序中使用 GPSD,可以实时获取设备的位置和移动轨迹。

总结来说这个一个开源统一管理各种GPS的工具,广泛应用于各种场景,不过目前是支持在Linux 系统下,如果放在其他系统下需要做一个修改。

2. 安装GPSD

以Ubuntu 为例子:

sudo apt-get install gpsd gpsd-clients

启动服务,服务控制:

# 启动
sudo systemctl start gpsd
​
# restart
sudo systemctl restart gpsd
​
# 停止
sudo systemctl stop gpsd
​
# 查询状态
sudo systemctl satus gpsd
​
# 停止
sudo systemctl stop gpsd
sudo systemctl stop gpsd.socket

2.1 确定串口设备

确定哪个串口,查看数据:

sudo stty -F /dev/ttyUSB0 9600 cs8 -cstopb -parenb
sudo cat /dev/ttyUSB0

2.2 配置GPSD

GPSD 主要配置文件/etc/default/gpsd/lib/systemd/system/gpsd.service

$ cat /etc/default/gpsd
# Devices gpsd should collect to at boot time.
# They need to be read/writeable, either by user gpsd or the group dialout.
DEVICES="/dev/ttyUSB0"
​
# Other options you want to pass to gpsd
GPSD_OPTIONS="-F /var/run/gpsd.sock"
​
# Automatically hot add/remove USB GPS devices via gpsdctl
USBAUTO="true"
 

配置完毕后GPSD需要重新启动一次服务;

其他命令

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

查看GPS数据

cgps

gpsmon

2. 应用程序接入

这里以C语言为demo, 创建gsp_app.c

先安装依赖相关:

sudo apt-get install libgps-dev libjansson-dev

2.1 代码编译运行

gps_app.c 代码demo

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <gps.h>
​
#define GPSD_HOST "localhost"
#define GPSD_PORT "2947"
​
void print_gps_data(struct gps_data_t *gps_data) {
    if (gps_data->fix.mode >= MODE_2D) {
        printf("Latitude: %f\n", gps_data->fix.latitude);
        printf("Longitude: %f\n", gps_data->fix.longitude);
        printf("Altitude: %f\n", gps_data->fix.altitude);
​
        // Time is stored as a struct timespec, so we need to check if tv_sec is non-zero
        if (gps_data->fix.time.tv_sec != 0) {
            printf("Time: %ld.%09ld\n",
                   gps_data->fix.time.tv_sec, gps_data->fix.time.tv_nsec);
        } else {
            printf("Time: N/A\n");
        }
    } else {
        printf("GPS data not available.\n");
    }
}
​
int main(void) {
    struct gps_data_t gps_data;
    char buf[256];
    int ret;
​
    // Initialize GPSD library
    if (gps_open(GPSD_HOST, GPSD_PORT, &gps_data) != 0) {
        fprintf(stderr, "Could not connect to GPSD\n");
        return 1;
    }
​
    // Configure GPSD to provide data
    gps_stream(&gps_data, WATCH_ENABLE, NULL);
​
    while (1) {
        // Read GPS data with appropriate arguments
        ret = gps_read(&gps_data, buf, sizeof(buf));
        if (ret == -1) {
            fprintf(stderr, "Error reading GPS data\n");
            break;
        }
        print_gps_data(&gps_data);
        sleep(1);  // Update interval
    }
​
    gps_stream(&gps_data, WATCH_DISABLE, NULL);
    gps_close(&gps_data);
​
    return 0;
}

通过应用程序已经可以获取到经纬度,时间相关的信息。

3. 总结

通过GPSD 获取设备的GNSS 信息来说难度不大,通过GPSD 已经将GNSS 数据包协议已经解析,支持多用户获取实时的相关数据,对于不想去深究其中可以采用添加GPSD 服务的方式进行处理GNSS 数据,但是对于嵌入式设备,还需要涉及一个交叉编译的过程,对于交叉编译将后续进行展开。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2101395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

哪些好用的待办事项清单值得推荐:待办任务清单app

在现代快节奏的生活中&#xff0c;我们每个人都面临着大量的待办事项。无论是工作中的紧急任务&#xff0c;还是生活中的琐碎事务&#xff0c;这些事情常常让我们感到应接不暇。为了更好地管理这些待办事项&#xff0c;将它们列成清单&#xff0c;并设置明确的完成时间节点&…

2024年9月3日嵌入式学习

数据结构 1定义 一组用来保存一种或者多种特定关系的数据的集合&#xff08;组织和存储数据&#xff09; 程序的设计&#xff1a;将现实中大量而复杂的问题以特定的数据类型和特定的存储结构存储在内存中&#xff0c; 并在此基础上实现某个特定的功能的操作&am…

数据结构(6.4_5)——有向无环图

有向无环图&#xff1a;若一个有向图中不存在环&#xff0c;则称为有向无环图&#xff0c;简称DAG图(Directed Acyclic Graph) DAG描述表达式 普通表达式&#xff1a; DAG描述表达式&#xff1a;解题方法&#xff1a; 练习 总

初始MYSQL数据库(2)——创建、查询、更新、删除数据表的相关操作

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; MYSQL 前面我们学习了创建、删除数据库以及创建、查看、删除数据表的相关操作。 我们知道数据库中所存储的数据其实就是数据表中一条一条的记…

eval 函数 >>>> 变量 = eval (字符串)

作用&#xff1a; 去掉引号并会进行数据之间的加法等运算 eval函数与input的使用 注意eval 后面的括号中必须是字符串&#xff08;加了引号的&#xff09;&#xff0c;不能直接跟字符串

vue在生产环境和测试环境去掉 console 打印日志 只保留 “error“、 “warn“

vue在生产环境和测试环境去掉 console 打印日志 只保留 “error”、 “warn” 文章目录 vue在生产环境和测试环境去掉 console 打印日志 只保留 "error"、 "warn"一、安装插件二、babel.config.js配置 一、安装插件 npm install babel-plugin-transform-r…

Python的VSCode配置

主要参考&#xff1a; 使用vscode编写、运行Python程序_vscode写python-CSDN博客 这篇文章主要记录在vscode中编写、运行Python程序的方法&#xff0c;以便于后面的学习。 这里我是在win10里完成的&#xff0c;在Ubuntu中的配置方法与之类似。 如果你也在Win10下完成&#xff0…

Leetcode - 138双周赛

目录 一&#xff0c;3270. 求出数字答案 二&#xff0c;3271. 哈希分割字符串 三&#xff0c;3272. 统计好整数的数目 四&#xff0c;3273. 对 Bob 造成的最少伤害 一&#xff0c;3270. 求出数字答案 本题数据范围小&#xff0c;可以将数字转换成字符串来做&#xff0c;这里…

【科研绘图】【3D轨线图】:附Origin详细画图流程

目录 No.1 理解3D轨线图 No.2 画图流程 1 导入数据并绘图 2 设置绘图细节 3 设置坐标轴 4 效果图 No.1 理解3D轨线图 3D轨线图&#xff0c;是指在三维坐标系中&#xff0c;通过连续的点或线段连接而成的图形&#xff0c;用于表示一个或多个物体在三维空间中的运动路径。…

AT3340:支持BDS/GPS双模授时板数据手册

AT3340采用ATGM331C-5T31授时模块&#xff0c;是高授时精度的BDS/GPS双模接收机板卡&#xff0c;包含32个跟踪通道&#xff0c;支持GPS和BDS的单系统授时定位和双系统联合授时定位&#xff0c;可以通过上位机命令切换。其中的射频前端芯片和基带芯片全部由杭州中科微独立研发&a…

网络地址转换NAT(Network Address Translation)

NAT概述 NAT是将IP数据报文头中的IP地址转换为另一个IP地址的过程&#xff0c;主要用于实现内部网络&#xff08;私有IP地址&#xff09;访问外部网络&#xff08;公有IP地址&#xff09;的功能。Basic NAT是实现一对一的IP地址转换&#xff0c;而NAPT可以实现多个私有IP地址映…

wacat - 一款开源随机测试工具

想象一下&#xff0c;你离开电脑一会儿去拿一杯咖啡。与此同时&#xff0c;你的猫走过键盘&#xff0c;引发了一些混乱。 wacat 应用程序&#xff1a; • 访问你的网页应用的根网址 • 随机访问应用中的每个链接 • 在表单中添加随机文本输入 • 从下拉菜单、复选框等中选择…

当下最火爆的外卖会员卡项目值得吗

外卖会员卡项目是现如今外卖行业的热门课题之一。随着人们生活水平的提高和生活节奏的加快&#xff0c;外卖已经成为了许多人日常生活中的重要组成部分。为了吸引更多的顾客和提升用户黏性&#xff0c;许多外卖平台纷纷推出了会员卡项目。下面就给大家讲讲这个项目值不值得 第一…

vue2使用qiankun框架笔记

vue2使用qiankun框架笔记&#xff08;更新中&#xff09; 前言1. 创建项目1.1 创建项目和选择预置1.2 记录项目结构和依赖 2. 使用qiankun框架&#xff08;让微应用如iframe般嵌入到主应用中&#xff09;2.1 主应用下载乾坤&#xff0c;注册微应用2.2 改造主应用&#xff0c;创…

springboot中根据id更新用户信息

根据查询到详情&#xff0c;进行回想到弹窗&#xff0c;然后修改信息&#xff0c;保存更新用户信息 实现效果 代码实现 controller代码 /*** 修改员工*/PutMappingpublic Result update(RequestBody Emp emp) {log.info("修改员工操作 {}", emp);empService.updat…

深度学习(六)-循环神经网络

标准CNN模型的不足 假设数据之间是独立的。标准CNN假设数据之间是独立的&#xff0c;所以在处理前 后依赖、序列问题&#xff08;如语音、文本、视频&#xff09;时就显得力不从心。这一类数 据&#xff08;如文本&#xff09;和图像数据差别非常大&#xff0c;最明显的差别莫…

深度孤立森林 Deep Isolation Forest论文翻译(上)

README 绝大部分是自己翻译自己手打的&#xff0c;少部分参考有道翻译&#xff0c;主要是想仔细再读一遍&#xff0c;顺便就打出来了。这篇论文内容比较多&#xff0c;有代码&#xff0c;原作者有github和知乎账号&#xff0c;感兴趣可以找一下。欢迎讨论和批评指正。 用于异…

设计模式及创建型模式-python版

1 架构模式与设计模式 架构模式搞层次的设计模式&#xff0c; 描述系统整体结构和组织方式&#xff0c;设计模式是针对某个问题的解决方案&#xff0c;是一种解决问题的思路。 2 设计模式的分类 2.1 创建型模式 单例模式&#xff0c;工厂方法模式&#xff0c;抽象工厂模式&…

无人机反制:无线电侦测设备技术详解

无人机反制技术中的低空安全综合管理平台&#xff0c;作为守护低空安全的重要工具&#xff0c;集成了多种先进的技术手段和管理功能&#xff0c;实现了对无人机等低空飞行器的全方位、无死角监控与反制。以下是对该技术平台的详细解析&#xff1a; 一、技术架构与核心功能 低…

HTB-bike(SSTI模版注入)

前言 大家好&#xff0c;我是qmx_07,今天给大家讲解bike靶场 渗透过程 信息搜集 服务器开放了 22 ssh 和 http80端口 Wappalyzer 介绍&#xff1a;Wappalyzer是一种浏览器扩展程序&#xff0c;用于识别正在访问的网站所使用的技术栈和工具&#xff0c;比如使用的web框架&…