如何将NMEA数据导入gpsfake以配合gpsd运行测试?
问题
我有一个包含GPS点位的NMEA测试数据文件,内容如下:
$GPGGA,170358.132,5230.704,N,01324.262,E,1,12,1.0,0.0,M,0.0,M,,*63 $GPGSA,A,3,01,02,03,04,05,06,07,08,09,10,11,12,1.0,1.0,1.0*30 $GPRMC,170358.132,A,5230.704,N,01324.262,E,4152.6,050.1,150822,000.0,W*4B $GPGGA,170359.132,5231.634,N,01325.380,E,1,12,1.0,0.0,M,0.0,M,,*6D $GPGSA,A,3,01,02,03,04,05,06,07,08,09,10,11,12,1.0,1.0,1.0*30 $GPRMC,170359.132,A,5231.634,N,01325.380,E,2369.6,047.3,150822,000.0,W*4D $GPGGA,170400.132,5232.183,N,01325.977,E,1,12,1.0,0.0,M,0.0,M,,*6C $GPGSA,A,3,01,02,03,04,05,06,07,08,09,10,11,12,1.0,1.0,1.0*30 $GPRMC,170400.132,A,5232.183,N,01325.977,E,1313.3,288.5,150822,000.0,W*40
我第一次使用gpsd,尝试用这个文件的数据通过gpsfake导入,配合自己的演示脚本测试,但单独运行gpsfake、管道连接gpsd、单独运行gpsd都没成功。之前用物理GPS dongle时运行正常,命令和输出如下:
~$ /usr/sbin/gpsd -n -G -b /dev/ttyUSB0 & [1] 4514 ~$ ./demo WARNING: Opening interface localhost:gpsd WARNING: Entering GPS poll loop (2000000us) Speed: 0.017 Speed: 0.018 Speed: 0.018 Speed: 0.021 speed: 0.046976 { "timestamp": 1660331437857, "latitude": 33.6973963, "longitude": -117.7707148, "eph": 4.563, "speed": 0.047, "eps": 0.460, "track": 0.000, "satellites_used": 8, "hdop": 0.000000, "vdop": 0.000000 } Speed: 0.021 [1]+ Done /usr/sbin/gpsd -n -G -b /dev/ttyUSB0
想知道怎么用gpsfake导入虚拟数据替代物理GPS dongle。
解决方案
方法一:一键式gpsfake+gpsd联动
- 清理现有gpsd进程:
sudo killall gpsd
- 让gpsfake自动启动并连接gpsd,直接加载你的NMEA文件:
gpsfake -P /tmp/gpsd.sock -U your_nmea_file.txt
-P指定gpsd的套接字路径,确保脚本能正常连接-U参数让gpsfake自动启动gpsd并绑定到模拟数据源
- 运行你的演示脚本:
./demo
方法二:手动创建虚拟串口分离模拟与监听
- 安装虚拟串口工具(未安装时执行):
sudo apt-get install socat
- 创建一对互相连通的虚拟串口:
socat PTY,link=/tmp/vgps0,raw,echo=0 PTY,link=/tmp/vgps1,raw,echo=0 &
- 启动gpsfake向其中一个串口发送数据(
-c 1表示每秒发送一组,匹配你的数据时间间隔):
gpsfake -c 1 your_nmea_file.txt /tmp/vgps0 &
- 启动gpsd监听另一个虚拟串口,参数和物理设备一致:
/usr/sbin/gpsd -n -G -b /tmp/vgps1 &
- 运行演示脚本:
./demo
注意事项
- 确保NMEA文件每行都是有效语句,无多余空行或格式错误
- 若gpsfake命令找不到,尝试使用完整路径
/usr/bin/gpsfake - 测试完成后清理进程:
sudo killall gpsd gpsfake socat
内容的提问来源于stack exchange,提问作者wiswasi
相关产品推荐
相关产品推荐

