问题标签 [gpsd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
737 浏览

c - 无法连接到 gpsd

我有一块运行 Linux Ångström 的板子。现在我不想在我的程序中获取 GPS 数据。所以我设置了一个 gpsdeamon,他从调制解调器获取他的 gps 信息。守护进程运行良好,如果我远程登录到 localhost:2947(这是 gpsd 的标准端口),我会从守护进程中获取一堆 json 字符串,如下所示:

{"class":"TPV","tag":"GGA","device":"/dev/ttyUSB2","mode":3,"lat":51.282822633,"lon":11.404333250,"alt": 327.500}

所以 gpsd 似乎设置正确。

但是在我的 C-Programm 中,我无法连接到这个端口,我也不知道为什么。我的代码如下所示:

问题是,函数 gps_open() 总是返回 -1。所有库似乎都已正确安装。你有什么想法,我可以尝试使它工作吗?

0 投票
2 回答
3274 浏览

raspberry-pi2 - 树莓派 2 GPSD 未运行

我正在按照教程将 Adafruit 的 Ultimate GPS Breakout 连接到我的 Raspberry Pi 2。我仔细阅读了每个步骤。

当我运行时gpsmon /dev/ttyUSB0,它会显示我的位置、速度等的预期输出。但是,当我运行cgps -s时,我会收到此消息cgps: no gpsd running or network error: -4, can't create socket

真正奇怪的是 GPSD 似乎失败了。这是我试图启动它:

因此,很明显这cgps是失败的,因为 GPSD 不是启动器。有什么建议可以让 GPSD 正常工作吗?

编辑 当我运行时sudo gpsd -N -D3 -F /var/run/gpsd.sock,我得到这个输出:

0 投票
2 回答
18415 浏览

c - 如何实现 gpsd 客户端(在 C 中)以获取纬度、经度和高度?

我正在为启用 GPS 的 Raspberry Pi 编写一个数字运算数据记录 C 程序。我抓住了gpsd,它的示例应用程序 cgps 正确显示了 gps 信息。我想使用libgps与守护进程交互,以便我可以在我的应用程序中获得所有方便的信息,但我很快就被其 API 的复杂性所淹没。

它的HOWTO 页面上的文档让我看一下cgpsgpxlogger示例代码,但是有太多的耦合,我无法全部看完。在光谱的另一端,libgps页面上的 C 代码示例被剥离,以至于无法使用。

任何人都可以指出我可能会揭开这个神秘面纱的单一班级样本吗?也许包含getCoordinates()功能的东西?

0 投票
2 回答
939 浏览

python - 使用 Python 在单独的线程中进行 GPSd 轮询

我正在研究一个代表空气质量站的 python 类。每个空气质量站都有一个与之关联的 GPS,以便我们可以识别该站的纬度和经度坐标。GpsPoller 在单独的线程上调用并持续运行,直到线程终止。GpsPoller 应该用于在任何给定时间获取最新的 GPS 数据。

这是我到目前为止所做的:


我对此代码有两个问题/疑问:

  1. 在 AirStation 类的初始化函数中确保纬度和纵向读数的最佳方法是什么?在初始化时,我得到了一个无纬度和经度值(我怀疑由于缺乏时间 GPS 必须获得卫星定位)。

  2. 确保 GpsPoller 与 AirStation 实例一起终止的标准方法是什么?每当我在命令行测试它时,exit()命令都会挂起,因为附加线程挂起。


我查看了很多示例和文档,包括以下内容:

任何其他资源或直接答案将不胜感激!

0 投票
1 回答
2601 浏览

gps - RaspberryPi 上的 GPS 守护程序 (gpsd) 声称没有修复

我已经使用 USB 适配器将 adafruit 终极 gps v3 连接到树莓派。gps 单元似乎有一个修复,因为 LED(在 gps 单元上)以缓慢的速度闪烁(可能每 10 秒)。如果我这样做,sudo cat /dev/ttyUSB0我会获得带有位置的 NMEA 数据。

但是当我安装gpsd时,意思是:

并运行守护程序(cgps -s),它说没有找到修复程序并且 GPS 超时。我试图杀死 gpsd 并再次运行它:

但这没有帮助。你知道这是为什么吗?

0 投票
0 回答
751 浏览

python - 尝试在树莓派上使用 gps 时出现 Python 代码错误

我正在尝试制作一个机器人,并且正在按照我在网上找到的教程进行操作。当我开始设置 gps 时,我把它设置好了,当我运行 gps 客户端时。cgps -s 它起作用了,它找到了一个连接!

但是我遵循了本教程的其余部分,它希望我让 gps 守护程序在系统启动时启动,然后使用 python gps 制作一个日志文件,然后我可以将其导入谷歌地图或地球。我使用了它所说的代码,这是我的错误。

这是我在程序中使用的python代码:

这是我运行该程序时遇到的错误,程序名称为 gps.py:

0 投票
2 回答
1399 浏览

c++ - NTPD 与 1PPS 信号同步

我有一个与我的 C++ 应用程序接口的 AHRS(姿态航向参考系统)。我通过以太网从 AHRS 接收到 50Hz 的消息流,作为该消息的一部分,我得到了 UTC 时间。我的系统还将运行 NTPD 作为我们嵌入式网络的时间服务器。AHRS 还有一个 1PPS 输出,指示 UTC 的第二个翻转时间。我想将 NTPD 时间与 UTC 同步。经过一番研究,我发现有些技术利用串行端口作为 1PPS 的输入。据我所知,这些技术使用 GPSD 读取 1PPS 并与 NTPD 通信以同步系统时间。但是,GPSD 期望来自 GPS 的 NMEA 格式的消息。我没有那个。

我现在看到的方式,我有几个可选的方法:

  1. 不要使用 GPSD。编写一个程序,读取 1PPS 和包含 UTC 的以太网消息,然后以某种方式将此信息传达给 NTPD。

  2. 使用 GPSD。编写一个程序,将以太网消息重新打包成可以发送到 GPSD 的东西,并让它处理与 NTPD 的交互。

  3. 还有什么?

任何建议将不胜感激。

编辑: 我为这个结构不佳的问题道歉。

我对这个问题的解决方案如下: 1 - 将 1PPS 接口连接到 RS232 端口,事实证明这是 GPSD 处理的标准方法。2 - 编写自定义 C++ 应用程序来读取包含 UTC 的以太网消息,并从中构建包含 UTC 的 NMEA 消息。3 - 将 NMEA 消息馈送到 GPSD,GPSD 进而与 NTPD 接口以将 GPS/1PPS 信息与系统时间同步。

在此处输入图像描述

0 投票
1 回答
423 浏览

linux - Bash 在启动时运行 gpxlogger

我试图在启动 RaspPi 后运行 gpxlogger,问题是如果启动时 GPSD 没有信号,gpxlogger 会在 5 秒后自动关闭(启动后大约 1.5-2 分钟会收到信号,有时更多所以 sleep 可能无法解决它),如果发生这种情况,它会返回 0。

到目前为止,我有:

在 /etc/init.d/rc.local

问题是,脚本不会等待 gpxlogger 返回,而是每 10 秒启动一个新的 gpxlogger。

tl;博士期望的行动:

启动 Raspberry -> 在 GPSD 没有数据 5 秒后循环 gpxloggers 死机 -> 在 GPSD 中修复 -> 单个 gpxlogger 保持登录到文件

有人可以帮我解决这个问题吗?任何输入将不胜感激。

0 投票
1 回答
1625 浏览

c - libgps 用于从 gpsd 守护进程中提取数据

我想使用 libgps 与 gpsd 守护进程交互。这就是为什么我实现了一个小测试应用程序,以便从特定卫星中提取值。

HOWTO 页面上的文档告诉我们

棘手的部分是解释你从阻塞读取中得到什么。棘手的原因是您不能保证每次读取都会从守护程序中获取一个完整的 JSON 对象。它可以抓取一个响应对象,或多个响应对象,或一个的一部分,或一个或多个后跟一个片段。

按照文档的建议,PACKET_SET在执行任何其他操作之前检查掩码位。

正如文档中所建议的那样,我查看了 cgps 和 gpxlogger 作为示例代码,但 libgps 的微妙之处让我无法理解。之前添加了一个 while 循环gps_waiting(),以便至少获取一个完整的响应对象。在介绍 pthread 之前,我注意到在返回答案之前需要几秒钟test_result()后调用该函数。start_test()通过使用我认为3会立即返回的线程,然后34.. 但事实并非如此!我仍然失去了几秒钟。另外,我自愿使用pthread_tryjoin_np(),因为它的手册页说

pthread_tryjoin_np() 函数执行与线程的非阻塞连接

谁能给我他的帮助,我想我理解错了,但我还不能说哪一部分?基本上,为什么我在返回第一个值之前至少要进入 do while 循环四次?

编辑 1:

再次阅读文档 HOWTO 后,我突出显示以下几行:

数据等待检查和读取这两个块的事实意味着,如果您的应用程序必须处理除 GPS 之外的其他输入源,您可能必须在 gps_data 结构上使用互斥锁隔离线程中的读取循环.

我有点困惑。它的真正含义是什么?

0 投票
1 回答
750 浏览

python - pySerial 在 Raspberry Pi 上缓冲 gpsd 坐标

我遇到了一个非常令人沮丧的问题,而且我对 Python/Raspberry pi 还是很陌生

我有一个脚本,它将 gps 坐标与 SSID 过滤的 iwlist 扫描相匹配,然后只要有 wifi 连接,就会通过电子邮件将结果文件发送出去。

我的问题是,结果是连续缓冲的,因此 gps 坐标可能与扫描的 SSID 相距甚远。

我在 while 循环开始时刷新了串行线,但它似乎不起作用。我也有运行无缓冲的python(-u,但这可能仅适用于文本文件..)我添加了Output.flush(),但我还没有能够测试它。我想我会先问。

所以,我的问题是,有没有办法关闭串行线路缓冲区,以便每次迭代都在 while 循环执行时获取 GPS 坐标?我所有的文本文件在写入后都有 file.flush() 。是否需要在写入文件之前进行,或者这不会影响串行缓冲区?我错过了什么?

任何帮助,将不胜感激