使用内置惯性测量单元(IMU)(也称为行人航位推算(PDR))的用户定位的简单公式如下:
x= x(previous)+step length * sin(heading direction)
y= y(previous)+step length *cos(heading direction )
Run Code Online (Sandbox Code Playgroud)
我们可以使用CMMotionManager类的motionManager属性来访问加速度计,陀螺仪和磁力计的原始值.此外,我们可以获得attitudes滚动,俯仰和偏航等值.步长可以计算为加速度的双平方根.但是,我对标题方向感到困惑.一些已发表的文献使用磁力计和陀螺仪数据的组合来估计航向.我可以看到它CLHeading也提供了标题信息.有一些在线教程,特别是对于像这样的Android平台来估计用户位置.但是,它没有给出任何适当的数学解释.
我跟着像许多在线资源这个,这个,这个和这个做一个PDR应用.我的应用程序可以检测步骤并正确地给出步长,但其输出充满错误.我认为错误是由于缺乏合适的航向.我使用以下关系从磁力计获得前进方向.
magnetometerHeading = atan2(-self.motionManager.magnetometerData.magneticField.y, self.motionManager.magnetometerData.magneticField.x);
Run Code Online (Sandbox Code Playgroud)
同样,来自陀螺仪:
grysocopeHeading +=-self.motionManager.gyroData.rotationRate.z*180/M_PI;
Run Code Online (Sandbox Code Playgroud)
最后,我给前一个标题干涉,gryoscopeheading和磁力计的比例权重如下:
headingDriection = (2*headingDirection/5)+(magnetometerHeading/5)+(2*gryospoceHeading/5);
Run Code Online (Sandbox Code Playgroud)
我从已发表的期刊论文中采用了这种方法.但是,我的工作中出现了很多错误.我的方法有误吗?我究竟应该做些什么才能获得正确的航向,以便定位估算误差最小?
任何帮助,将不胜感激.
谢谢.
编辑
我注意到在使用陀螺仪数据计算航向时,我没有将旋转速率(以弧度/秒为单位)与增量时间相乘.为此,我添加了以下代码:
CMDeviceMotion *motion = self.motionManager.deviceMotion;
[_motionManager startDeviceMotionUpdates];
if(!previousTime)
previousTime = motion.timestamp;
double deltaTime = motion.timestamp - previousTime;
previousTime = motion.timestamp;
然后我更新了陀螺仪标题:
gyroscopeHeading+= -self.motionManager.gryoData.rotationRate.z*deltaTime*180/M_PI;
本地化结果仍然不接近真实位置.我的方法是否正确?
objective-c accelerometer magnetometer gyroscope indoor-positioning-system
我想开发一个基于室内定位的iOS应用程序,旨在帮助用户找到办公楼中的不同房间.我在这里看到Apple现在提供了一种获取iOS 8设备室内位置的方法.它需要我到Maps Connect,并要求我在那里注册并提供有关我想要启用室内定位的场地的一些信息.
我没有找到更多关于此功能的Apple文档,而不是示例代码(具有核心位置的室内定位).我不明白创建提供室内定位的iOS 8应用程序的过程:
1)Apple对"场地"的确切含义是什么?室内定位功能是否仅允许用于博物馆或体育场等公共建筑?在私人建筑中使用它是不可能的?
2)如果我不能用这种方式制作一个基于室内定位的应用程序,那么替代方案可能是什么?ASFAIK,iOS SDK没有提供API来获得WiFi信号强度,因为Android确实...如果我希望它在iOS 7中工作,同样的问题.
这是第一次,我想开发一个室内定位的应用程序,我有点迷失.我已经阅读了一些相关的帖子(有点旧),例如:
但是我还没有清楚地知道开始开发这个的起点应该是什么,还是我实际拥有的选项.我会感谢一些已经开发出类似内容的人的指导和/或一些意见.
编辑:至少我想知道更多关于Apple iOS iOS室内功能的细节:它是否可以用于任何建筑物,私人或公共场所,如果它或多或少准确,以及某种教程或指南提供一些步骤来开发这种系统,因为Apple本身似乎没有提供进一步的先前解释......
提前致谢.
我想通过使用WiFi信号而不是开发iOS的室内定位系统iBeacon.我在这里读到最近推出的这个功能.它说:
您可以注册以了解有关如何与Apple合作以在您的场地进行室内定位的更多信息.向我们提供有关您的场地的一些基本信息,以便开始使用.
它导致Apple Maps Connect,您可以在其中提供有关您想要进行室内定位的场地的一些信息.几个星期前我发送了请求,我还没有回复,因为他们说他们有大量的请求,他们根据几个条件优先排序.
但是,我不确定这个请求Apple Maps Connect是否只是为了从Apple获取有关如何开发室内定位应用程序的更多信息,或者是因为你需要获得他们明确的许可才能做到这一点,或者为什么.有人已经完成了这个过程吗?
另一方面,除了iBeacon相关之外,处理室内定位的唯一信息是此示例代码.
要确保:启用WiFi的室内定位仅从iOS 8开始提供?只是开发它就足够了,还是需要任何特定的许可来启用基于室内定位的WiFi信号应用程序?
提前致谢
我正在使用 iBeacons 构建一个基于室内位置的应用程序,但是我使用了很多 iPhone 传感器来获得准确的运动表示(速度、方向等)。我目前一直在使用 CoreMotion 计步器及其计步属性。我有一段代码,可以简单地计算步数并将其打印在标签中,我注意到设备需要大约 10 步才能记录我的动作,然后每三步或四步更新一次标签。“步行”状态下的这些更新很好,但我很想知道是否可以加快初始响应和从静止到步行的转换,而不是从 10 减少到 5,这是可以接受的。这是计算步数的代码:
if(CMPedometer.isStepCountingAvailable()){
self.pedoMeter.queryPedometerDataFromDate(NSDate(), toDate: NSDate()) { (data : CMPedometerData!, error) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
if(error == nil){
self.steps.text = "\(data.numberOfSteps)"
}
})
}
self.pedoMeter.startPedometerUpdatesFromDate(NSDate()) { (data: CMPedometerData!, error) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
if(error == nil){
self.steps.text = "\(data.numberOfSteps)"
}
})
}
}
}
Run Code Online (Sandbox Code Playgroud)
我还将更新间隔增加到最大
manager.deviceMotionUpdateInterval = 0
Run Code Online (Sandbox Code Playgroud)
这些是我正在使用的课程
let activityManager = CMMotionActivityManager()
let manager = CMMotionManager()
let pedoMeter = …Run Code Online (Sandbox Code Playgroud) accelerometer ios core-motion indoor-positioning-system swift
对于三角测量,你需要有你的设备接收信号的方向.我们可以计算到达的角度,但计算该角度需要一组接收器.是一部能够计算到达角度的手机吗?我问这个是因为我遇到了诸如wifi/BLE三角测量,通过三角测量计算位置等术语,但在大多数情况下它们实际上指的是Trilateration.我知道trilateration如何适用于移动设备和所有细节,但我不认为三角测量是可能的.如果可能的话,如果使用ibeacons来近似位置,那么它是如何可能的以及哪一个(三角测量或三角测量)预期会给出更好的结果?
android triangulation trilateration bluetooth-lowenergy indoor-positioning-system
我想提高室内定位框架的准确性,因此应用kalmanfilter.我发现apache commons数学库支持Kalmanfilter,所以我尝试使用它并遵循教程:https://commons.apache.org/proper/commons-math/userguide/filter.html 我想我已正确设置矩阵用于2D定位,而状态由位置和速度组成.我的问题在于方法estimatePosition().如何获得正确的pNoise和mNoise变量?为什么我必须指定它们.我认为这就是Q和R矩阵的用途......我会给予每一个帮助!
public class Kalman {
//A - state transition matrix
private RealMatrix A;
//B - control input matrix
private RealMatrix B;
//H - measurement matrix
private RealMatrix H;
//Q - process noise covariance matrix (error in the process)
private RealMatrix Q;
//R - measurement noise covariance matrix (error in the measurement)
private RealMatrix R;
//PO - error covariance matrix
private RealMatrix PO;
//x state
private RealVector x;
// discrete time interval (100ms) between to steps …Run Code Online (Sandbox Code Playgroud) java android indoor-positioning-system apache-commons-math kalman-filter
我Sample Code在 Apple 的开发者网站上找到了这个:https :
//developer.apple.com/library/ios/samplecode/footprint/Introduction/Intro.html
说明说:
使用核心位置获取纬度/经度位置并将其投影到平面平面图上。演示如何在地理坐标系(纬度/经度)、平面图 PDF 坐标系(x、y)和 MapKit 之间进行转换。
我试过了,效果很好。基本上,您为建筑物提供地图图像并手动指定两个坐标。然后,使用 CoreLocation,它将纬度/经度转换为 (x,y) 位置。
我的问题是 - 如何在室内获取纬度/经度?我看过一些 Apple 的视频,他们说他们大大改进了 CoreLocation,但是我的 iPhone 如何获得正确的信息?
TL; DR:它有效。我只是想知道如何。
我正在为我的大学开发导航系统作为某种研究活动.我正在使用SVGKit来显示平面图.现在我需要提供用户定位服务以进行导航和跟踪.所以这是我的问题:
1)我是否需要在大学安装一些特殊硬件(例如Cisco MSE或更便宜的类似物),或者我可以将一些软件/技术应用于我们当前的硬件以确定服务器端用户位置?如果我这样做,我需要什么设备?我的意思是,它将是整个大学的一个单元,或每层一个,或者什么? 2)这是否意味着RedPin在AppStore中是不可接受的,所以我不能使用它? 3)除了标准路由器外,Navizon ITS是否需要一些特定的硬件设备?问:为什么Redpin iPhone客户端不符合iPhone SDK协议?答:Apple不提供检索WiFi数据的公共API.为了让iPhone客户端正常工作,我们不得不使用私有API,iPhone SDK协议不允许这样做.
谢谢大家,也许你可以为我提供更好的解决方案.提前致谢.
我正在开发一个将iBeacons用于室内导航的应用程序,我发现locationManager:rangingBeaconsDidFailForRegion:withError:调用该函数的速率不够高,所以我要从CoreBluetooth中添加RSSI数据centralManager:didDiscoverPeripheral:advertisementData:RSSI:.
我发现了一个奇怪的事实:当我使用CoreLocation监听iBeacon并记录外设ID时:
- (void)centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData
RSSI:(NSNumber *)RSSI
{
NSLog(@"%@, RSSI: %@", peripheral, RSSI);
Run Code Online (Sandbox Code Playgroud)
在不同设备上报告每个信标具有不同的UUID:
A25804BD-D77A-5004-4C2C-301D996C7367 - my iPhone 5
843F4237-6059-9A5E-AA34-0BD92304BE1F - colleague's iPhone 5
77685805-C253-52BD-B787-8B95308834FB - other colleague's iPad mini
Run Code Online (Sandbox Code Playgroud)
我们的想法是将每个信标的UUID绑定到它的位置,因此这种行为非常具有功能性.
为什么物理上相同的信标(未关闭/打开)的UUID在不同设备上有所不同?这是预期的行为吗?如果是,我怎么能选择退出呢?
我想使用室内定位系统开发一个应用程序来跟踪我的应用程序用户的位置.我研究互联网,但没有使用除移动设备之外的任何其他设备,无法找到任何方式开发它ibeacon.我找到了以下git repo和使用的文档ibeacon.
https://github.com/Estimote/iOS-Indoor-SDK
摘自以上链接
我们知道构建下一代上下文感知移动应用需要的不仅仅是iBeacon™硬件.这就是为什么我们构建了更智能的软件,它可以消除在给定空间内理解接近度和位置的难度.
我想利用移动设备的蓝牙技术.建议我使用蓝牙实现IPS的链接或方法.
如何在Android应用上访问Google Indoor Maps?我目前有一个使用Google Maps API的GPS应用程序,但它没有显示瑞士的室内地图.
我可以使用Android上的官方谷歌地图应用程序访问瑞士(Sihlcity,苏黎世机场)的室内地图,因此理想情况下它也可以在我的个人Android应用程序中运行.
它是否可以使用相同的Google Maps API,还是有单独的室内地图逻辑?
非常感谢您的回复.
google-maps google-maps-api-3 google-maps-mobile indoor-positioning-system
我正在开发一个需要室内导航的项目.一直在搜索,我只找到了一些付费的sdk和其他工具.我只是想知道室内导航是如何工作的以及使用的架构是什么?另外我想知道ibeacon如何用于室内导航.只有iOS设备才需要实现室内导航.请告诉我.提前致谢!!
ios ×8
android ×3
ibeacon ×3
iphone ×2
location ×2
wifi ×2
bluetooth ×1
core-motion ×1
google-maps ×1
gyroscope ×1
hardware ×1
java ×1
magnetometer ×1
map ×1
maps ×1
objective-c ×1
swift ×1