我是靠谱客的博主 外向夏天,最近开发中收集的这篇文章主要介绍如何利用USB获得GPS信息如何利用USB获得GPS信息,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

如何利用USB获得GPS信息

最近在使用GPS做定位,想要在自己电脑上得到GPS位置,然后弄个差分组网,提高局部定位精度。

硬件

我使用的是M8N GPS,之前是用在无人机上面的
自己搞了个接头把TTL转成了USB
如下图所示:
在这里插入图片描述在这里插入图片描述

注意:我的GPS模块使用的是3.3V的电压,不同的GPS模块可能供电电压不同,
以及Tx和Rx线不一定接的对,换着看一下是不是收到数据就知道对不对了

安装软件

如何查看是不是收到数据了呢?

cat /dev/ttyUSB0

我是在Ubuntu系统下进行操作的,所以比较简单,首先安装需要的软件

    sudo apt-get update
    sudo apt-get install gpsd gpsd-clients python-gps

软件还需要进行一些配置,需要disable一些fix

   sudo systemctl stop gpsd.socket
   sudo systemctl disable gpsd.socket

为什么要这样做的呢?参考这篇文章:
https://learn.adafruit.com/adafruit-ultimate-gps-hat-for-raspberry-pi/use-gpsd
接着直接启动就OK了

sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock
注意端口可能不同

有两种界面

gpsmon #详细信息,可惜看不懂
cgps -s #简化版,不过也很详细了

在这里插入图片描述
在这里插入图片描述

用一个简单的C++程序读取经纬度坐标

因为我想要将经纬度坐标转化为本地坐标,所有需要能读取GPS数据
先安装一个库

sudo apt-get install libgps-dev

程序如下:

#include <gps.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <math.h>

int main() {
int rc;
struct timeval tv;

struct gps_data_t gps_data;
if ((rc = gps_open("localhost", "2947", &gps_data)) == -1) {
    printf("code: %d, reason: %sn", rc, gps_errstr(rc));
    return EXIT_FAILURE;
}
gps_stream(&gps_data, WATCH_ENABLE | WATCH_JSON, NULL);

while (1) {
    /* wait for 2 seconds to receive data */
    if (gps_waiting (&gps_data, 2000000)) {
        /* read data */
        if ((rc = gps_read(&gps_data)) == -1) {
            printf("error occured reading gps data. code: %d, reason: %sn", rc, gps_errstr(rc));
        } else {
            /* Display data from the GPS receiver. */
            if ((gps_data.status == STATUS_FIX) && 
                (gps_data.fix.mode == MODE_2D || gps_data.fix.mode == MODE_3D) &&
                !isnan(gps_data.fix.latitude) && 
                !isnan(gps_data.fix.longitude)) {
                    //gettimeofday(&tv, NULL); EDIT: tv.tv_sec isn't actually the timestamp!
                    printf("latitude: %f, longitude: %f, speed: %f, timestamp: %lfn", gps_data.fix.latitude, gps_data.fix.longitude, gps_data.fix.speed, gps_data.fix.time); //EDIT: Replaced tv.tv_sec with gps_data.fix.time
            } else {
                printf("no GPS data availablen");
            }
        }
    }

    sleep(3);
}

/* When you are done... */
gps_stream(&gps_data, WATCH_DISABLE, NULL);
gps_close (&gps_data);

return EXIT_SUCCESS;
}

使用

gcc -o gps filename.c -lm -lgps

进行编译
参考连接:https://stackoverflow.com/questions/32000328/libgps-c-code-example

有时间可以写个坐标转换试试

最后

以上就是外向夏天为你收集整理的如何利用USB获得GPS信息如何利用USB获得GPS信息的全部内容,希望文章能够帮你解决如何利用USB获得GPS信息如何利用USB获得GPS信息所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部