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

How to print GPS location to stdout (Ubuntu 16.04 / 18.04)?

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

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

有什么常用工具吗?

好像跟

$ sudo stty -F /dev/ttyUSB0 4800
$ sudo cat /dev/ttyUSB0

我可以从设备读取一些 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

我仍然没有看到应该包含位置的 $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!

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

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

消息提供的唯一信息是当前时间、11 点 39 分 35 秒等。在您从 GPS 模块收到的消息中,不仅 $GPGLL 消息可以告诉您您的位置,还有您收到的 $GPGGA$GPRMC 消息。如果您的模块已修复,您将不会在一行中看到多个逗号,而是在它们之间看到实际值。
有关不同消息格式的更多详细信息,请参见 overview

GPS 修复丢失的可能根本原因是什么(假设您的硬件和天线都没有问题)?

  • 您刚刚开始使用这个刚出厂的模块,需要一些时间来了解它的坐标。对于这样一个全新的设备,time to first fix 最长可达 15 分钟。
  • 您模块所在位置的 GPS 信号强度不够强。

因此我的建议是:

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

GPSD:

GPSD(如果已安装)通常会在您插入 GPS 模块时自动启动。您可以使用

查看当前状态
systemctl status gpsd.service
systemctl status gpsd.socket

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

使该设备正常工作的步骤是:

# Switch the device to NMEA mode
sudo gpsctl -f -n /dev/ttyUSB0

# Set baudrate to 4800
sudo stty -F /dev/ttyUSB0 4800

# Start gpsd 
gpsd -S 4000 /dev/ttyUSB0

现在创建到 localhost:4000 的 TCP/IP 套接字连接并说 ?WATCH={"enable":true,"json":true}; 或使用 libgps 等:

http://www.catb.org/gpsd/client-howto.html