室内定位算法入门篇

本文是室内定位的入门教程,涵盖了平面坐标系、概率、欧氏距离等基础知识,以及惯性导航、蓝牙定位、指纹法和定位融合等算法的简单介绍。通过实例解释了如何利用这些方法进行室内定位,适合零基础的学习者。
摘要由CSDN通过智能技术生成

前言

貌似今年做室内定位的人多起来了,总有人问我一些非常基础问题,一方面有的人确实是零基础,另一方面我之前写的一些文章也确实没说的很详细,这里就弄个入门篇。

这里写的算法和代码,我会尽量使用用最最简单的,可能在实际运用中并不是那么实用,但是可以帮助零基础的朋友快速入门。

注意

俗话说的好,师父领进门,修行在个人。如果有朋友是想把代码抄过去直接拿来用,那么你可能会失望的。

你需要懂的基础知识

平面坐标系

坐标系咱们小学数学肯定都学过的,这个相信不用我多说了吧。

我这里就用C语言写个类型Position,分别有两个参数x和y,代表平面坐标系的坐标,表示如下:

struct Position{
   
	int x;
	int y;
}

概率

这个应该是高中知识,这里给各位回顾一下。

一个袋子里有五个球,三个白球,两个红球。从中取出一个球,取到白球的概率是多少?取到红球的概率是多少?
答案:白球0.6,红球0.4

另外,所有事件的概率和等于1。大概只需要知道这么多就够了。

欧氏距离

听名字挺玄乎的,其实还是咱们小学知识。

欧式距离放在二维、三维坐标系里,就是两点之间的直线距离。举个例子,小明在 ( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x1,y1,z1),小明他爸在 ( x 2 , y 2 , z 2 ) (x_2,y_2,z_2) (x2,y2,z2),小明和他爸的欧式距离就是:
d = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 + ( z 1 − z 2 ) 2 d=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2+(z_1-z_2)^2} d=(x1x2)2+(y1y2)2+(z1z2)2
所以欧氏距离的本质就是任意维度中两个点之间的距离。

算法

惯性导航

假设小明在一个平面坐标系的原点 ( 0 , 0 ) (0,0) (0,0)上,他向北( 90 ° 90\degree 90°)走了10米,又向东( 0 ° 0\degree 0°)走了10米,咱们都知道他现在应该在 ( 10 , 10 ) (10,10) (10,10)的位置上对吧。那么我们就先用代码来表示小明是怎么移动的:

//oldPosition表示移动前的坐标
//distace表示移动的距离
//angle表示移动的方向
Position getNewPosition(Position oldPosition,float distance,float angle){
   
	Position newPosition;
	
	newPosition.x = oldPosition.x + distance.x * cos(angle);
	newPosition.y = oldPosition.y + distance.y * sin(angle);
	
	return newPosition;
}

然后把小明的移动过程用代码描述一遍(下面的 P I = π PI=\pi PI=π,代码里面打不出来,这里说明下):

static float PI = 3.141592;

void XiaoMingMove(){
   
	//初始化坐标起点(0,0)
	Position position;
	position.x=0;
	position.y=0;
	
	//向北走10米,北的方向在坐标系里是90度,转换成弧度也就是PI/2
	position=getNewPosition(position,10
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值