在哪里可以搜到室内定位算法的程序

在哪里可以搜到室内定位算法的程序,第1张

室内定位在一些特定场合的实用性和必要 性已经日趋显著,其应用前景广阔,研究意义非常大,目前也是一个非常热门的议题。本文阐述几种常用的室内定位技术手段,并具体阐述这些技术的典型实例,对比其精度及优缺点。在比较中作者认为基于RFID的室内定位系统性价比比较高,对其进行详细介绍。ZigBee则是一种基于RFID的能很好地解决室内定位的方案技术手段。

1 引言

随着时代飞速变迁,科学技术迅猛发展,信息服务质量效率提高,受干扰度小,在人们的生活工作及科学研究中起到了非常重要的作用。室内定位技术非常实用,具有较大的拓展空间,其应用范围广泛,在复杂环境下,如图书馆,体育馆,地下车库,货品仓库等都可以实现对人员以及物品的快速定位。

室内定位系统有最基本的5种算法:

(1) 起源蜂窝小区技术;

(2)时间到达法(TOA);

(3)时间到达差法(TDOA);

(4)信号强度法(RSSI);

(5)到达角度差法(AOA)。

常用的室内定位技术主要包括以下几种:

(1) 基于超声波定位技术;

(2) 基于红外线的定位技术;

(3) 基于超宽带的定位技术;

(4)射频识别定位技术(WLAN、ZigBee)等。

2 几种室内定位技术的比较

2.1 超声波技术

超声波定位目前大多数采用反射式测距法。系统由一个主测距器和若干个电子标签组成,主测距器可放置于移动机器人本体上,各个电子标签放置于室内空间的固定位置。定位过程如下:先由上位机发送同频率的信号给各个电子标签,电子标签接收到后又反射传输给主测距器,从而可以确定各个电子标签到主测距器之间的距离,并得到定位坐标。

目前,比较流行的基于超声波室内定位的技术还有下面两种:一种为将超声波与射频技术结合进行定位。由于射频信号传输速率接近光速,远高于射频速率,那么可以利用射频信号先激活电子标签而后使其接收超声波信号,利用时间差的方法测距。这种技术成本低,功耗小,精度高。另一种为多超声波定位技术。该技术采用全局定位,可在移动机器人身上4个朝向安装4个超声波传感器,将待定位空间分区,由超声波传感器测距形成坐标,总体把握数据,抗干扰性强,精度高,而且可以解决机器人迷路问题。

定位精度:超声波定位精度可达厘米级,精度比较高。缺陷:超声波在传输过程中衰减明显从而影响其定位有效范围。

2.2 红外线技术

红外线是一种波长间于无线电波和可见光波之间的电磁波。典型的红外线室内定位系统Active badges使待测物体附上一个电子标识,该标识通过红外发射机向室内固定放置的红外接收机周期发送该待测物唯一ID,接收机再通过有线网络将数据传输给数据库。这个定位技术功耗较大且常常会受到室内墙体或物体的阻隔,实用性较低。

如果将红外线与超声波技术相结合也可方便地实现定位功能。用红外线触发定位信号使参考点的超声波发射器向待测点发射超声波,应用TOA基本算法,通过计时器测距定位。一方面降低了功耗,另一方面避免了超声波反射式定位技术传输距离短的缺陷。使得红外技术与超声波技术优势互补。

定位精度:5~10m。缺陷:红外线在传输过程中易于受物体或墙体阻隔且传输距离较短,定位系统复杂度较高,有效性和实用性较其它技术仍有差距。

2.3 超宽带技术

超宽带技术是近年来新兴的一项无线技术,目前,包括美国,日本,加拿大等在内的国家都在研究这项技术,在无线室内定位领域具有良好的前景。UWB技术是一种传输速率高(最高可达1000Mbps以上),发射功率较低,穿透能力较强并且是基于极窄脉冲的无线技术,无载波。正是这些优点,使它在室内定位领域得到了较为精确的结果。超宽带室内定位技术常采用TDOA演示测距定位算法,就是通过信号到达的时间差,通过双曲线交叉来定位的超宽带系统包括产生、发射、接收、处理极窄脉冲信号的无线电系统。而超宽带室内定位系统(如图1所示)则包括UWB接收器、UWB参考标签和主动UWB标签。定位过程中由UWB接收器接收标签发射的UWB信号,通过过滤电磁波传输过程中夹杂的各种噪声干扰,得到含有效信息的信号,再通过中央处理单元进行测距定位计算分析。

图1 UWB室内定位结构图

基于超宽带技术的室内定位系统典型实例为:Ubisense,其定位方法为三边定位,定位精度为:6~10cm,缺陷:造价较高。

2.4 射频识别技术

射频定位技术实现起来非常方便, 而且系统受环境的干扰较小,电子标签信息可以编辑改写比较灵活。下面具体介绍该技术的相关应用。

3 基于射频识别(RFID)的室内定位技术

3.1 RFID技术原理

射频识别(RFID)技术是一种 *** 控简易,适用于自动控制领域的技术,它利用了电感和电磁耦合或雷达反射的传输特性,实现对被识别物体的自动识别。射频(RF)是具有一定波长的电磁波,它的频率描述为:kHz、MHz、GHz,范围从低频到微波不一。

我有matlab的。

太多了,我的QQ:39400877

%|

%| SCRIPT: simMLE

%|

%| PURPOSE: Simulate a relative location system by generating

%|random measurements and maximizing the likelihood fcn.

%|After many trials, show the results vs. the Cramer-Rao Bound.

%|

%| AUTHOR: Neal Patwari

%| http://www.engin.umich.edu/~npatwari/

%|

%| REFERENCE: Relative Location Estimation in Wireless Sensor Networks

%| (N. Patwari, A. O. Hero, M. Perkins, N. S. Correal, R. J. O'Dea),

%| IEEE Trans. Signal Processing, vol. 51, no. 8, Aug. 2003, pp. 2137-2148.

%|

tic

% Use globals to allow minimization functions access to network info,

% debugging info.

global refDevices blindDevices totalDevices linearRefLocs dhat funcEvals dfuncEvals

% Basic simulation parameters

roomSize= [1,1] % Room size, meters

gridSize= 5 % How many sensors per side

refDevices = 4 % How many references (must be same length as actualRefLocs)

trials = 20 % How many indep trials to run

measMethod = 'R'% Use 'R' for RSS, 'T' for TOA

totalDevices= gridSize^2

blindDevices= totalDevices - refDevices

blindCoords = 2*blindDevices

actualRefLocs = [0,00,11,11,0]

linearRefLocs = [actualRefLocs(:,1)', actualRefLocs(:,2)']

% Optimization parameters

ftol = 0.00001

if measMethod == 'R',

func = 'calcError' % Use for RSS

dfunc = 'calcDError' % Use for RSS

else

func = 'calcErrorTOA' % Use for TOA

dfunc = 'calcDErrorTOA' % Use for TOA

end

%| 1. Set up the blindfolded device locations

delta= 1/(gridSize-1)

coords = 0:delta:1

xMatrix = ones(gridSize,1)*coords

yMatrix = xMatrix'

xBlind = [xMatrix(2:gridSize-1), ...

xMatrix(gridSize+1:totalDevices-gridSize), ...

xMatrix(totalDevices-gridSize+2:totalDevices-1)]

yBlind = [yMatrix(2:gridSize-1), ...

yMatrix(gridSize+1:totalDevices-gridSize), ...

yMatrix(totalDevices-gridSize+2:totalDevices-1)]

actualBlindLocs = [xBlind', yBlind']

actualAllLocs = [actualRefLocsactualBlindLocs]

xActual = actualAllLocs(:,1)'

yActual = actualAllLocs(:,2)'

actualDist = L2_distance(actualAllLocs', actualAllLocs',0)

%| 2. Define the channel model

if measMethod == 'R'

sigmaOverN = 1.7

% If C==1, then this simulation runs the _true_ MLE.

% If C==exp( 0.5* (log(10)/10 *sigmaOverN)^2), then this runs a

% bias-corrected (pseudo-) MLE.

% C = exp( 0.5* (log(10)/10 *sigmaOverN)^2)

C = 1

else

sigma_d = 0.2 % Use for TOA

end

for trial = 1:trials,

if measMethod == 'R'

%| 3.0 Generate a random set of RSS-based distance measurements. When RSS

%| is expressed in dB, errors are Gaussian. Here, dhat is an interim

%| variable which has units of distance, and represents an estimate for

%| the range. It is correctly randomly generated as follows:

dhat = actualDist.*10.^(sigmaOverN/10 .*symrandn(totalDevices))./C

else

%| 3.1 Generate a set of TOA measurements, which are Gaussian around the

%| true value with variance sigma_d.

dhat = actualDist + sigma_d .* symrandn(totalDevices)

end

%| 4. Make an initial guess of the coordinates.

blindLocs0 = [xBlind, yBlind]% Use the true coordinates (unrealistic but best case)

%| 5. Find optimum locations of neurfons (fixed and relative)

funcEvals = 0 dfuncEvals = 0

[coordsMLE, iter, errorMin] = frprmn(blindLocs0, ftol, func, dfunc, 0)

disp(sprintf('%d: Function / Deriv. evals: %d / %d.', trial, funcEvals, dfuncEvals))

%| 6. Save the resulting estimated coords

coordEsts(trial, 1:blindCoords) = coordsMLE

end % for trial

estMean = mean(coordEsts)

estCov = cov(coordEsts)

estVars = diag(estCov)

estStds = sqrt(estVars)

locVars = estVars(1:blindDevices) + estVars((blindDevices+1):(2*blindDevices))

locStd = sqrt(locVars)

toc % show time of execution

% Plot the location estimates for sensors, one at a time.

if 0,

figure

for i=1:blindDevices,

clf

plot(coordEsts(:,i), coordEsts(:,blindDevices+i),'.', ...

estMean(i), estMean(blindDevices+i), 'ro')

hold on

set(gca,'xlim',[-0.2 1.2])

set(gca,'ylim',[-0.2 1.2])

set(gca,'FontSize',20)

set(gca,'DataAspectRatio',[1 1 1])

xlabel('X Position (m)')

ylabel('Y Position (m)')

set(gca,'xTick',0:0.25:1)

set(gca,'yTick',0:0.25:1)

grid

pause

end

end

% Calculate and plot CRB vs. estimator performance.

figureclf

if measMethod == 'R'

[locstdCRB, coordCRB] = calcLocalizationCRB('R', [xBlind, actualRefLocs(:,1)'], ...

[yBlind, actualRefLocs(:,2)'], blindDevices, totalDevices, sigmaOverN)

else

[locstdCRB, coordCRB] = calcLocalizationCRB('T', [xBlind, actualRefLocs(:,1)'], ...

[yBlind, actualRefLocs(:,2)'], blindDevices, totalDevices, sigma_d)

end

for i=1:blindDevices,

hold on

R = cov(coordEsts(:,i), coordEsts(:,blindDevices+i))

drawOval(estMean(i), estMean(blindDevices+i), R, 'k-','v', 8, 0, 1)

R_CRB = coordCRB([i, i+blindDevices],[i, i+blindDevices])

drawOval(xBlind(i), yBlind(i), R_CRB, 'r--','.',20, 0, 1)

end

set(gca,'xlim',[-0.2 1.2])

set(gca,'ylim',[-0.2 1.2])

set(gca,'FontSize',18)

set(gca,'DataAspectRatio',[1 1 1])

xlabel('X Position (m)')

ylabel('Y Position (m)')

set(gca,'xTick',0:0.25:1)

set(gca,'yTick',0:0.25:1)

grid

% Use for comparison

RMS_est_Std = sqrt(mean(locStd.^2))

RMS_crb_Std = sqrt(mean(locstdCRB.^2))

没有用过这种定位模块,但可以很肯定,商家发给你的除了这个物理装置外,肯定还会给你一套SDK或者说API接口文档。

整个使用过程大概如些:所谓的定位模块里面应该是GRS模块,你还需要买一个单片机开发板(不想买的话用自己的电脑也行,甚至连接到手机也行,当然现在的电脑和手机可能都不会有串口了,可以买根USB转串口的线),将定位模块连接到电脑或开发板或手机,这个连接应该是用串口连接的,所以你需要学串口通信编程。

接下来是写代码了,如果连的是电脑或单片机,开发语言无疑问是C语言。连手机开发,则开发的是APP,安卓系统就需要学习JAVA,苹果手机则需要学习Objective-C。如果商家只提供C语言的接口,那手机的你就不用考虑了。你可以咨询商家试试,有什么问题可以讨论,希望你能坚持下去,我高中就学了C语言,结果没坚持挺悔的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11629821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存