GPS定位函数

GPS模块中定位函数的分析

最近接触到了一个项目,使用了GPS定位模块,想在这里分享一下自己是如何一步一步编写出的定位函数!模块通过串口和单片机进行通信,所以发送过来的数据必然是字符串,而要对定位数据设定误差阈值,只有对数值型变量才可以进行比较分析。故首先第一步是对目标位置信息进行数据预处理,确定取值范围;第二步是将字符串转换为数值;第三步是结合阈值范围,对当前位置进行判断。

数值预处理

通过手机软件获得当前的位置信息,即得到原始数据;

北纬 N 度东经 E 度
41.73149343123.5039363A
41.73099301123.501415B
41.72953978123.4998111C共7站
41.72801044123.4968714D
41.72714568123.4925959E
41.72642503123.4894685F
41.72404682123.492274G

将原始数据按照GPS打印的数据,进行格式转换;

4173.14934312350.39363A
4173.09930112350.1415B
4172.95397812349.98111C共7站
4172.80104412349.68714D
4172.71456812349.25959E
4172.64250312348.94685F
4172.40468212349.2274G

考虑到单片机的性能有限,不能进行浮点型数据直接转换,所以需要取消掉一些不变化的字符;

4173.134173.154173.1712350.3712350.3912350.41A
4173.084173.14173.1212350.1212350.1412350.16B
4172.934172.954172.9712349.9612349.9812350C共7站
4172.784172.84172.8212349.6712349.6912349.71D
4172.74172.724172.7412349.2412349.2612349.28E
4172.624172.644172.6612348.9312348.9512348.97F
4172.394172.414172.4312349.2112349.2312349.25G

从上表知道了,选定的是±0.02作为误差范围,因为按照计算,这是20~40米的误差范围。但是数据还是不够精简,通过字符串转数值,还会进行精简。

数值转换

去掉一些并没有发生变化的数字,即简化了程序的编写,也精简了单片机系统运行的压力,所以可以提升位置判断的效率。

313315317503750395041A
308310312501250145016B
293295297499649985000C共7站
278280282496749694971D
270272274492449264928E
262264266489348954897F
239241243492149234925G
位置判断

当GPS采集到的位置信息落入当前的位置区间后,单片机会判断出这是哪个区间,从而执行对应位置上的操作。代码如下:

#include<stdio.h>
#include<string.h>
#define u16 unsigned int 	  //对数据类型进行声明定义
#define u8  unsigned char 
#define uchar unsigned char
#define uint  unsigned int

/*-----字符串转化为数字-----*/
/*-----只有当是数值型的字符串时,才可以完成字符串的转换。目前仅仅是完成了整数部分的转换,*/
u8 set_station(u8 lat[11], u8 lon[12])
{
    u8 station_value;
    u16 lat1;
    u16 lon1;

    lat1 = (lat[3] - '0') * 100 + (lat[5] - '0') * 10 + (lat[6] - '0');
    lon1 = (lon[3] - '0') * 1000 + (lon[4] - '0') * 100 + (lon[6] - '0') * 10 + (lon[7] - '0');

    if (lat1 >= 313 && lat1 <= 317 && lon1 >= 5037 && lon1 <= 5041)
        station_value = 0;
    else
    {
        if (lat1 >= 308 && lat1 <= 312 && lon1 >= 5012 && lon1 <= 5016)
            station_value = 1;
        else
        {
            if (lat1 >= 293 && lat1 <= 297 && lon1 >= 4996 && lon1 <= 5000)
                station_value = 2;
            else
            {
                if (lat1 >= 278 && lat1 <= 282 && lon1 >= 4967 && lon1 <= 4971)
                    station_value = 3;
                else
                {
                    if (lat1 >= 270 && lat1 <= 274 && lon1 >= 4924 && lon1 <= 4928)
                        station_value = 4;
                    else
                    {
                        if (lat1 >= 262 && lat1 <= 266 && lon1 >= 4893 && lon1 <= 4897)
                            station_value = 5;
                        else
                        {
                            if (lat1 >= 239 && lat1 <= 243 && lon1 >= 4921 && lon1 <= 4925)
                                station_value = 6;
                            else
                                station_value = 100;
                        }


                    }
                }
            }      
        }
       
    }  

    return(station_value);

}
int main()
{
    u8 data;
	u8 lat[11];
    u8 lon[12];

	printf("please input string including any ASCII !  \n ");  //打印字符串
	scanf_s ("%s", lat,11);    //借助scanf_s输入字符串,这个函数包含三个参数,第一个是输入类型,第二个是变量名,第三个是输入字符串的上限
    scanf_s("%s", lon, 12);  //借助scanf_s输入字符串,这个函数包含三个参数,第一个是输入类型,第二个是变量名,第三个是输入字符串的上限
    data = set_station(lat,lon);
	printf("%d \n", data);

}

运行结果如下图所示:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: GPS(全球定位系统)定位原理是通过测量接收器和多个卫星之间的时间差,从而确定接收器的位置的一种技术。GPS系统由一组卫星组成,这些卫星绕地球轨道运行。接收器接收来自这些卫星的信号,并计算信号传播的时间差。 GPS定位原理的实现过程如下:首先,接收器需要收到至少4个卫星的信号,以计算出接收器的三维位置和时间。每个卫星都会向接收器发送包含时间戳的无线信号。接收器接收到这些信号后,通过计算信号传播的时间差来确定接收器与卫星的距离。 接收器通过比较接收到的信号与卫星发送的信号之间的时间差,可以计算出接收器与每个卫星之间的距离。为了准确计算距离,接收器需要知道卫星发送信号的时间。因此,卫星会定期向接收器发送当前时间戳。 一旦接收器确定了与至少4个卫星之间的距离,它可以通过三角定位法计算出接收器的精确位置。通过测量距离和已知的卫星位置,接收器可以推断出自己的位置。 Matlab是一种功能强大的数学软件,可以用于处理和分析GPS信号数据。要实现GPS定位原理,可以使用Matlab提供的信号处理和数学函数来计算接收器与卫星之间的距离,以及推断接收器的位置。Matlab还可以用于可视化GPS定位结果和分析定位误差。 总之,GPS定位原理通过接收器和卫星之间的时间差来确定接收器的位置。Matlab可以提供强大的数学和信号处理功能,用于实现GPS定位原理并进行数据处理和分析。 ### 回答2: GPS定位原理是利用地球上的多个卫星系统进行测量和计算,从而确定地理位置的方法。GPS系统由一组卫星组成,这些卫星绕地球轨道运行,并向接收器发送信号。接收器接收到至少三个卫星的信号后,使用接收到的信号的延迟时间差来计算出接收器与卫星之间的距离。 GPS定位原理中,卫星发射的信号包含了卫星的位置和发射的时间信息。接收器接收到这些信号后,通过计算信号的延迟时间差,可以确定接收器和卫星之间的距离。接收器同时接收到三个及以上卫星的信号后,利用三边测量原理计算出自身与卫星的距离。再通过卫星的位置信息,接收器可以确定自己的位置。 Matlab实现GPS定位可以通过处理接收到的卫星信号来计算位置。首先,需要通过Matlab编程读取卫星信号数据。然后,使用信号的延迟时间差计算出自身与卫星的距离。接下来,根据卫星的位置信息,利用三角测量原理计算自己的位置。最后,通过Matlab显示和分析定位结果。 在Matlab中,可以使用内置函数如`readmatrix`读取卫星信号数据,使用`pdist`计算距离,使用三角函数计算位置,使用`plot`函数显示结果等。通过使用这些函数和Matlab的数学计算、图形显示和数据处理功能,可以实现GPS定位的算法和可视化分析。 总之,GPS定位原理是通过测量卫星信号的延迟时间差来计算位置,而Matlab提供了丰富的数学计算和数据处理函数,可以实现GPS定位算法并对定位结果进行可视化分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值