我想使用陀螺仪,加速度计和磁力计在3轴上获得完全平滑的旋转.
第一个问题是我的输出单独有噪音,我想知道如何删除它.
第二个问题是我认为它应该用卡尔曼滤波器解决的陀螺漂移.
第三个问题是加速度计.如果我在不旋转设备的情况下移动设备时将陀螺仪和加速度计组合在一起,输出将会改变.卡尔曼滤波器是否也能从输出中消除移动效果?
我想获得手机传感器测量的磁场的三个坐标值.为此,我SensorManager
通过使用获得了一个句柄sm=(SensorManager)getApplicationContext().getSystemService(Context.SENSOR_SERVICE)
,然后获取传感器cm=sm.getDefaultSensor(SensorManager.SENSOR_MAGNETIC_FIELD)
.然后我注册SensorEventListener
的SensorManager
有sm.registerListener(new SensorListener(),cm,SensorManager.SENSOR_DELAY_UI)
.
该类SensorListener
是我自己实现SensorEventListener
接口的类.在它的OnSensorChanged
方法中,我从传感器获取值并显示它们.问题是我只得到值1,0和0.并且它们很少更新(我已经在onSensorChanged
调用上设置了一个计数器,以查看更新发生的频率).改变时间SENSOR_DELAY_NORMAL
不改善任何事情.
为了检查问题是否与磁传感器有关,我以相同的方式添加了加速计传感器的监听器.结果非常混乱:现在,磁传感器会产生更新,但不会产生加速度计.如果我移除加速计传感器事件监听器,我仍然会在添加加速计传感器事件监听器之前收到丢失的磁传感器事件.(???????????)
我的代码中有什么问题吗?
我在使用 Core Motion 和 SwiftUI 输出磁力计、加速度计和陀螺仪的数据时遇到问题。我假设我的问题与 startMagnetometerUpdates() 有关。
我尝试使用在堆栈溢出以及 GitHub/google 上找到的源代码。问题是我发现的所有代码都使用 UIKit 而不是 SwiftUI。是否可以在不使用 UIKit 的情况下实现这一点?
import CoreMotion
let motionManager = CMMotionManager()
var x = 0.0; var y = 0.0; var z = 0.0
func magnet() {
motionManager.magnetometerUpdateInterval = 1/60
motionManager.startMagnetometerUpdates()
if let magnetometerData = motionManager.magnetometerData {
x = magnetometerData.magneticField.x
y = magnetometerData.magneticField.y
z = magnetometerData.magneticField.z
}
}
struct Magnetometer: View {
var body: some View {
VStack {
Text("Magnetometer Data")
Text("X: \(x)")
Text("Y: \(y)")
Text("Z: \(z)")
}
}
} …
Run Code Online (Sandbox Code Playgroud) 要在 Android 中从欧拉角(例如俯仰、滚转、方位角)中获取方向,需要执行以下操作:
在第一个中,我意识到它使用了一种 TRIAD 算法;旋转矩阵(R[])由重力、地磁X重力、重力X(地磁X重力)---X为叉积组成。
请参阅以下代码:
float Ax = gravity[0];
float Ay = gravity[1];
float Az = gravity[2];
final float Ex = geomagnetic[0];
final float Ey = geomagnetic[1];
final float Ez = geomagnetic[2];
float Hx = Ey*Az - Ez*Ay;
float Hy = Ez*Ax - Ex*Az;
float Hz = Ex*Ay - Ey*Ax;
final float normH = (float)Math.sqrt(Hx*Hx + Hy*Hy + Hz*Hz);
if (normH < 0.1f) {
// device is …
Run Code Online (Sandbox Code Playgroud) 我正在使用带有简单3轴磁力计的嵌入式设备。我目前在微特斯拉中显示XYZ值,但是如何将其转换为指南针方向?我曾尝试在Google上查找它,但我发现的所有内容似乎都非常复杂/解释得很差。
如果可能的话,我想知道如何进行倾斜补偿和不倾斜补偿。
在某种程度上有帮助的情况下,我目前在平面上获得的X,Y,Z值分别为70、0.8和34.1。
附注:如果这有帮助,请参见我用于磁力计的代码片段:
mSensor.enable();
while(true){
wait(1);
mSensor.getAxis(mData);
lcd.cls();
lcd.locate(0,3);
lcd.printf("X=%4.1f micro-Tesla\n\rY=%4.1f micro-Tesla\n\rZ=%4.1f micro-Tesla", mData.x, mData.y, mData.z);
Run Code Online (Sandbox Code Playgroud) 有人知道CMMotionmanager.deviceMotion及其子属性的每个属性,它们基于什么样的硬件(磁力计,加速度计,陀螺仪......)?
我的问题是关于硬件,而不是软件.
我需要知道CMMotionManager从哪个硬件中获取其值,以了解我的CMMotionManager调用哪种类型的iPhone将起作用.并在我的网站上写下随后的文字.
那么用什么硬件构建:
deviceMotion.attitude.roll
deviceMotion.attitude.pitch
deviceMotion.attitude.yaw
deviceMotion.rotationRate(唯一的陀螺仪?带iOS4的Iphone 4/4S)
deviceMotion.gravity(唯一的加速计?所以它适用于所有iOS4的iPhone)
deviceMotion.userAcceleration(唯一的加速度计?所以它应该适用于iOS4的所有iPhone)
deviceMotion.magneticFied(唯一的磁力计?Iphone 3GS/4/4S与iOS4)
基本上我想知道iPhone高精度指向的方向,我尝试了CLLocationManager:问题是CLHeading.magnetHeading返回一个双精度值,例如36.44323,但是当我开始转动设备时,CLLocationManager仅在达到1度时更新方向,所以数字如下所示:36.44323、37.44323、38.44323 等等。是否可以有更高的准确度?
在Battlestar Galactica
这里
http://kickasstorrentsan.com/usearch/Battlestar%20Galactica/
可以用泛滥来下载.
可以验证磁铁是:
magnet:?xt=urn:btih:2D2CAE6AC83800490327547053597BAFF6701C2F&dn=battlestar+galactica+season+1+s01+1080p+bluray+x265+hevc+aac+5+1+joy+utr&tr=udp%3A%2F%2Ftracker.publicbt.com%2Fannounce&tr=udp%3A%2F%2Fglotorrents.pw%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce
Run Code Online (Sandbox Code Playgroud)
1. $ url变量是磁铁的正确地址.
2.aria2c命令可以正确执行.
3. aria2c $url
已beeen约一hour.Why没有执行的,可以dowlonaded?
我有一个申请.它有两个活动,一个是用于拍照的自定义相机,另一个是用于显示该图片.
我的要求是每当我拍照时,应该根据拍摄照片时设备的方向以及设备的当前方向显示该照片.您可能在全景应用程序中看到了类似的功能.
例如,假设我拍摄了一张视图并移动了手机,那么我需要以一定角度显示相同的图片.我怎样才能做到这一点?
magnetometer ×9
android ×3
gyroscope ×2
ios ×2
rotation ×2
bash ×1
c++ ×1
compass ×1
core-motion ×1
embedded ×1
filter ×1
hardware ×1
heading ×1
iphone ×1
java ×1
magnet-uri ×1
orientation ×1
swift ×1
swiftui ×1