如何将 GPS 位置打印到标准输出(Ubuntu 16.04 / 18.04)?

juz*_*lin 2 gps nmea gpsd ubuntu-16.04 ubuntu-18.04

我对 Linux 上的 GPS 设备完全是新手。

我有一个GlobalSat G-STAR IVUSB 设备,我只想将 GPS 位置(纬度、经度)打印到标准输出。我怎样才能做到这一点?我正在阅读有关 的内容gpsd,但不确定如何获取实际位置。该文档似乎很旧。

有什么常用工具等吗?

看来与

$ sudo stty -F /dev/ttyUSB0 4800
$ sudo cat /dev/ttyUSB0
Run Code Online (Sandbox Code Playgroud)

我可以从设备读取一些 NMEA(?) 数据:

$GPGGA,113935.199,,,,,0,00,,,M,0.0,M,,0000*5B

$GPGSA,A,1,,,,,,,,,,,,,,,*1E

$GPRMC,113935.199,V,,,,,,,100918,,,N*41

$GPGGA,113936.186,,,,,0,00,,,M,0.0,M,,0000*56

$GPGSA,A,1,,,,,,,,,,,,,,,*1E

$GPRMC,113936.186,V,,,,,,,100918,,,N*4C

$GPGGA,113937.185,,,,,0,00,,,M,0.0,M,,0000*54

$GPGSA,A,1,,,,,,,,,,,,,,,*1E

$GPRMC,113937.185,V,,,,,,,100918,,,N*4E

$GPGGA,113938.200,,,,,0,00,,,M,0.0,M,,0000*55

$GPGSA,A,1,,,,,,,,,,,,,,,*1E
Run Code Online (Sandbox Code Playgroud)

我仍然看不到$GPGLL应该包含该位置..?

编辑:我也明白了:

$ sudo gpsd /dev/ttyUSB0 -N
gpsd:ERROR: can't bind to IPv4 port gpsd, Address already in use
gpsd:ERROR: maybe gpsd is already running!
gpsd:ERROR: can't bind to IPv6 port gpsd, Address already in use
gpsd:ERROR: maybe gpsd is already running!
Run Code Online (Sandbox Code Playgroud)

我已经杀死了所有gpsd实例并删除了套接字,但仍然得到了..

小智 5

您发布的输出sudo cat /dev/ttyUSB0是您对 GPS 模块的期望,该模块(尚未)没有修复,即它没有足够的信息来计算其当前位置(+其他信息)。

消息提供的唯一信息是一天中的当前时间、11 小时 39 分 35 秒等。在您从 GPS 模块收到的消息中,该消息不仅$GPGLL可以告诉您您的位置,还可以告诉您您确实收到的消息$GPGGA$GPRMC如果您的模块有修复,您将不会看到连续的几个逗号,而是看到中间的实际值。
有关不同消息格式的更多详细信息,请参阅此概述中找到。

缺少 GPS 修复的可能根本原因是什么(假设您的硬件 + 天线都正常)?

  • 您刚刚开始使用这个刚出厂的模块,需要一些时间来获取其坐标。这此类全新设备的首次修复时间长达 15 分钟。
  • 您的模块所在位置的 GPS 信号强度不够强。

因此我的建议是:

  • 确保您所在位置的卫星 GPS 信号足够强。最好是搬到户外。
  • 如果您的模块以前从未修复过,请给您的模块一些时间。等待最多 20 分钟。

全球定位系统:

GPSD(如果已安装)通常会在您插入 GPS 模块时自动启动。您可以使用以下命令检查当前状态

systemctl status gpsd.service
systemctl status gpsd.socket
Run Code Online (Sandbox Code Playgroud)

如果处于活动状态,gpsd守护进程会读出通过串行接口传入的 GPS 数据,并通过特定端口(默认:端口 2947)上的套接字将其提供给其他应用程序。在这种情况下,串行监视器将无法再访问串行端口。