如何计算磁航向值以获得地理方向,即北,东北,东,东南,南,西南,西,西北?
由于磁航向仅返回度数值,并且我需要在不断更新的磁航向的基础上显示地理方向.
我怎样才能成功呢?
我正在创建一个增强现实应用程序,只需在手机面向兴趣点时(手机上存储gps位置)就可以显示文本视图.textview绘制在屏幕中的兴趣点位置.
它工作正常,问题是指南针和加速度计非常"变化",并且textview不断地左右上下移动,因为传感器的真空度.
有办法解决吗?
我是Android的新手,我想根据我的相机获得方向.如何根据相机获取方向信息?你能给出一个想法吗?
有没有人已经编程了iphone罗盘标题倾斜补偿?
我有一些方法,但一些帮助或更好的解决方案将是很酷的!
首先,我定义一个向量Ev,由Gv和Hv的叉积计算得出.Gv是由加速度计值构建的重力矢量,Hv是构建磁力计值的标题矢量.Ev与Gv和Hv垂直,因此它正朝着东方的方向前进.
SECOND我定义了一个向量Rv,由交叉积Bv和Gv计算得出.Bv是我的向量,它被定义为[0,0,-1].Rv垂直于Gv和Bv并始终显示在右侧.
第三,这两个向量Ev和Rv之间的角度应该是我的校正标题.计算角点i构建点积和arcos.
phi = arcos(Ev*Rv/| Ev |*| Rv |)
理论上它应该可以工作,但也许我必须规范化向量?!
有没有人为此得到解决方案?
谢谢,m01d
我需要为我的应用程序构建指南针.
从阅读文档看起来有两种合理的方法:
任何解决这个问题的建议都将不胜感激.
我想在屏幕上显示电话所面对的方向.例如:
0
|- []
|_
South --- North
Run Code Online (Sandbox Code Playgroud)
在上图中,手机将显示"北".由于用户(头部为0的棒)正在拿出指向北方的电话(图中的[]).
我找到了这个例子.我理解它在做什么,除了它似乎计算偏航,俯仰,滚动和倾斜.那些是什么以及如何使用它们来简单地找到手机指向的方向?
此Android文档还提到X,Y和Z轴,但我没有看到任何说明这些轴如何对应手机?Z是从手机底部走到顶端吗?
我正在尝试使用指南针移动机器人.我们使用指南针使机器人沿直线移动,它使用2个轮子,它们移动有点不同.因此我们将0到359之间的值设置为方向,然后检查当前方向,计算错误并修复它.像error = current_direction - 实际方向.
问题是,例如,如果我们的初始方向是90度而我们的机器人是45,那么错误将是45并且它将修复它.如果为0,则错误将为90并且将修复它.问题是如果它移动了一点多于0并且例如变为359,则误差将是-269,因此不是在一个方向上移动90而是在另一个方向上移动-269.
我使用错误的符号来决定移动哪个轮子以固定方向.任何想法如何解决它?
我正在开发一个使用Android OS的应用程序,我需要知道如何计算设备在垂直方向上的移动.
例如,设备处于静止状态(A点),用户手拿它(B点),现在A点和B点之间有高度变化,我该如何计算?
我已经阅读了有关传感器和加速度计的文章,但我找不到任何可以帮助我的东西.有人有主意吗?
我正在尝试开发一个迷你"我身边",比如使用相机,指南针和位置.我想在屏幕上显示地方的图像.目前我有我的位置和指南针的方向.我想知道如何确定我想要显示的地方的位置.
谢谢你的帮助 ;)
我的增强现实应用程序需要摄像机视图的罗盘方位,并且有很多从传感器管理器获取方向的示例.
然而,我发现结果值取决于手机方向 - 旋转到右侧的景观与旋转到左侧的景观大约相差10度(ROTATION_0和ROTATION_180之间的差异较小,但仍然不同).这种差异足以破坏任何AR效应.
它与校准有关吗?(我不相信我正在做正确的8件事 - 我尝试过在youtube上找到的各种方法).
任何想法为何有区别?我搞砸了旋转矩阵的东西吗?我可以选择将应用程序限制为单一方向,但仍然担心罗盘读数仍然不是很准确(即使过滤后它相当稳定)
public void onSensorChanged(SensorEvent event) {
if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE) {
return;
}
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) mGravity = event.values;
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) mGeomagnetic = event.values;
if (mGravity != null && mGeomagnetic != null) {
float[] rotationMatrixA = mRotationMatrixA;
if (SensorManager.getRotationMatrix(rotationMatrixA, null, mGravity, mGeomagnetic)) {
float[] rotationMatrixB = mRotationMatrixB;
Display display = getWindowManager().getDefaultDisplay();
int deviceRot = display.getRotation();
switch (deviceRot)
{
// portrait - normal
case Surface.ROTATION_0: SensorManager.remapCoordinateSystem(rotationMatrixA,
SensorManager.AXIS_X, SensorManager.AXIS_Z,
rotationMatrixB);
break;
// …Run Code Online (Sandbox Code Playgroud) android orientation augmented-reality android-sensors compass-geolocation