对于我大学的项目,我必须收集有关Google室内地图的信息.我花了几个小时搜索有关Google Indoor Navigation真正有效的信息.我找到了几个关于如何创建Google楼层平面图的链接:
http://support.google.com/gmm/bin/answer.py?hl=en&answer=1685896
以及如何使用Google Maps Floor Plan Marker应用提高位置准确度:
http://support.google.com/gmm/bin/answer.py?hl=en&answer=2667756&topic=1685871&ctx=topic
他们说该应用程序收集公共广播数据.但是没有关于收集哪些信息以及如何收集信息的信息.这里的几个讨论和我发现的一些文章说谷歌使用wifi接入点和蜂窝天线进行室内定位.但我找不到谷歌的任何官方信息,我可以在我的项目中使用.
你能建议我在哪里可以找到以下问题的答案:
我发现很多关于室内定位和室内导航的东西.但没有关于谷歌如何使用它们.
提前致谢.
navigation google-maps google-maps-api-3 indoor-positioning-system
我想设计一个Android应用程序,它可以帮助学生和其他人在特定建筑物(一层楼)中导航,显示走向教室的步行路线.
我需要帮助.
使用WWDC提供的示例代码,我一直在尝试编写一个简单的概念验证应用程序,在我的办公楼中执行室内定位.我有一个平面图图像并替换了演示代码中的标准图像.我还完成了GPS坐标到两个锚点像素的必要映射.
当我在模拟器中运行应用程序并指定静态GPS坐标时,我看到模拟器中的位置已按预期更新.然而,当我在手机上运行它时,体验并不像Apple在视频中宣传的那样无缝.在我的iPhone 5s上,定位遍布整个地方,很少接近准确.即使坐在靠近天空视线的窗户旁边,我仍然会得到非常不准确的结果.
我认为这可能与我们的物理布局,WiFi拓扑或其他此类参数有关.但是,我也注意到Apple有一个门户网站,您可以在其中注册您的设施以用于室内定位.这与我的应用程序中的糟糕结果有关吗?我无法想象Apple如何能够帮助解决这种情况,但认为它可能与它有关.
我应该采取其他措施来提高应用的准确性吗?有没有办法利用iBeacons改善室内定位?我没有发现任何文件表明这一点,但想到也许有人会知道.
我应该为某个地方开发一个室内定位系统,所以我开始收集有关如何开发这样一个系统的信息,我现在的问题是:什么控制定位的准确性以及如何改进它?我找到了不同的API和项目,具有不同的精度,例如:爱立信室内定位API提供10米内的精度,而Qubulus API提供4米内的精度,我遇到了一些项目,如iDOCNET,声称提供约1.2的准确度米.那么,控制精度的室内导航系统的主要组成部分是什么?
对于我的一个项目,我目前想要构建一个Ionic应用程序,为iOS和Android平台编写一次代码.我正在寻找一种方法来衡量两个移动设备之间的距离.一个设备应放置在特定位置,另一个设备应在进入第一个设备的范围(或更具体地说是第一个设备所在的位置)时检测到.
特定位置的设备1将连接到互联网,对于访问该位置的设备2也是如此.
我已经阅读了很多不同的实现,但大多数时候它需要Android或iOS的本机代码.
以下是我已经找到的解决方案:
我实际上已经没想完了.实现应该在Javascript中编写快速原型,以便限制选项.
我在StackExchange上看了一篇帖子:Stack,但问题是没有描述任何实现.
换句话说,我希望检入系统知道设备2在设备1的位置.即使在请求我们的服务器的API之间进行交换,我们怎么能确定两个设备是关闭的,或者至少设备2已关闭在特定的位置?
为了给那些可能面临同样情况的人提供更多选择,我联系了在微软工作的人和一个叫做ThaliProject的项目,你可以在Google上找到这是一个PeerToPeer库,可以在移动设备之间进行通信.但它不适合这个问题:
不幸的是,Thali不会解决你的问题.:(我们依赖Android上的蓝牙4.2支持(所以我们可以是BLE中心和外围设备).
如果您需要在Android和iOS设备之间工作,蓝牙也将无法工作,因为Apple使用的蓝牙专有变体不起作用.
现在BLE可以在Android和iOS之间工作.虽然许多Android手机不能作为外围设备,但大多数都可以作为中心设备.
不同的人正在玩的另一种可能性是声音.类似于 https://developers.google.com/nearby/messages/overview?hl=en.许多小组一直在通过超声波通信进行局部发现试验.只需发送挑战并通过超声波获得响应,您已经证明设备1和2彼此非常接近.
我偶然发现了一个名为SonicNet.JS的JavaScript库,它能够通过超声波发送数据和字符串,但实际上我正在努力让它在我的计算机上运行.这可能是一种解决方案,可以避免互操作性问题.
javascript bluetooth-lowenergy indoor-positioning-system ibeacon ionic-framework
我有两部搭载Android 5.0.2的手机,它们都安装了最新的Radius Beacon应用程序:Locate Beacon,同时,我打开了2个IBeacon发送器,可以看到RSSI 在两款手机中随着应用程序不断变化.
但是当我尝试编写一些示例代码来模拟上述情况时,我发现ble扫描回调总是在调用2或3次后停止调用,我最初怀疑'Locate Beacon'可能使用不同的方式,所以我尝试了2种API,一个用于旧的4.4,另一个是在android 5中引入的新方式,但两者都是相同的行为(但都在android 5上运行).
4.4一:
public class MainActivity extends Activity {
private BluetoothAdapter mBluetoothAdapter;
private static final String LOG_TAG = "BleCollector";
private TextView calledTimesTextView = null;
private int calledTimes = 0;
// Device scan callback.
private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, int rssi,
byte[] scanRecord) {
calledTimes++;
runOnUiThread(new Runnable() {
@Override
public void run() {
calledTimesTextView.setText(Integer.toString(calledTimes));
}
});
Log.e(LOG_TAG, "in onScanResult, " …Run Code Online (Sandbox Code Playgroud) android bluetooth-lowenergy indoor-positioning-system ibeacon
我正在尝试在我的Android应用程序中实现三边测量算法,以确定用户的室内位置.我正在使用超宽带信标来获得到固定点的距离.我能够调整Trilateration Method Android Java中建议的方法如下:
public LatLng getLocationByTrilateration(
LatLng location1, double distance1,
LatLng location2, double distance2,
LatLng location3, double distance3){
//DECLARE VARIABLES
double[] P1 = new double[2];
double[] P2 = new double[2];
double[] P3 = new double[2];
double[] ex = new double[2];
double[] ey = new double[2];
double[] p3p1 = new double[2];
double jval = 0;
double temp = 0;
double ival = 0;
double p3p1i = 0;
double triptx;
double tripty;
double xval;
double yval;
double …Run Code Online (Sandbox Code Playgroud) 情况:
我正在尝试通过指纹识别来建立一个室内定位系统,利用建筑物内部的磁场变化.作为传感器,我正在使用我的手机Galaxy Nexus.
基本上,获取指纹的想法是分别测量x,y和z方向的磁场,并通过移动的方向旋转矢量以将矢量带入世界坐标系.为了定位某人,他还测量磁场,旋转矢量并将其发送到我将运行我的定位算法的服务器.
我的问题:
当我在不同方向上测量同一点处的磁场时,在旋转矢量后我得不到相同的结果.即使场强也不一样.
为了表明这一点,我在同一位置进行了四次测量,并将手机绕其z轴(标准Android规格)逆时针旋转90度,180度和270度.结果可以在下面的"表格"和Matlab图表(点击链接)上看到(如果您想要其他观点让我知道)
编辑: 更确切地说:我真正做的是我定义了自己的坐标系,称为房间坐标系.我拿了房间的一面墙,把它定义为北面.我的手机的y轴外挂在那个墙上(在第一个位置),而它在桌子上是平的.因此,正z轴指向天空,x轴定义为90度的墙.以'Raw'命名的矢量是手机的原始值,因此它们位于手机的坐标系中.以"旋转"命名的Vector将旋转到"房间坐标系"中.在图中,虚线矢量是原始矢量,实心矢量是旋转矢量.
?????????????????????????????????????????????????????
? Vector ? X ? Y ? Z ? Strength ?
?????????????????????????????????????????????????????
? 0°Raw ? 17.55 ? 8.21 ? -36.83 ? 41.62 ?
? 0°Rotated ? 17.55 ? 8.21 ? -36.83 ? 41.62 ?
? 90°Raw ? 15.74 ? -11.36 ? -36.86 ? 41.66 ?
? 90°Rotated ? 11.36 ? 15.74 ? -36.86 ? 41.66 ?
? 180°Raw ? -65.06 ? -16.18 ? -44.79 ? 80.63 ?
? …Run Code Online (Sandbox Code Playgroud) android orientation magnetometer android-sensors indoor-positioning-system
我一直在苦苦挣扎,我目前正在Android上使用Estimote Beacon而我正在收集他们的RSSI和TxPower以计算他们的范围.一旦我得到这些数据并且我知道它们的位置(纬度,经度,海拔高度),我需要计算我的粗略位置以用于室内位置.
提供的所有解决方案仅针对三个单点或不起作用.必须有一个现有的Java解决方案,因为它是一个常见的问题.
现在我知道之前有人问过,但在我的案例中没有任何答案真正帮助我.以下是其中一些简历:
另一个问题如果我可能会问,在我计算这个时,我应该使用什么单位来测量距离?我虽然无论使用何种距离单位都会得到相同的结果,但事实证明,如果我插入米或公里,结果会有很大变化...
使用内置惯性测量单元(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
android ×5
gps ×2
ibeacon ×2
java ×2
magnetometer ×2
beacon ×1
google-maps ×1
gyroscope ×1
ios ×1
iphone ×1
javascript ×1
navigation ×1
objective-c ×1
orientation ×1
wifi ×1