gpt4 book ai didi

android - 使用安卓手机原始数据的旋转角度

转载 作者:行者123 更新时间:2023-11-29 20:02:20 25 4
gpt4 key购买 nike

我需要找到圆盘转动时的转动角度(请看图片)。我实际上只需要一个旋转角度,但数据是通过 Sensors2OSC 从 Samsung Galaxy S4 获得的。这个应用程序使我能够接收加速度计和陀螺仪 float 据以通过 OSC 进行处理。手机安装在板的背面..

https://github.com/SensorApps/Sensors2OSC

哪种方法提供的结果最准确,我必须使用哪些传感器进行传感器融合?

image


import oscP5.*;
import netP5.*;

OscP5 oscP5;
NetAddress myRemoteLocation;

LowPass lp;
float number1 = 0.0;

void setup() {
size(1200, 600, P3D);
oscP5 = new OscP5(this, 9000);
lp = new LowPass(10); //The argument is the FIFO queue length
}

void draw() {
background(0);
lights();

pushMatrix();
translate(300, height/2, -100);
rotateZ(-number1);
box(330, 200, 40);
popMatrix();

pushMatrix();
translate(900, height/2, -100);
lp.input(number1);
rotateZ(lp.output);
box(330, 200, 40);
popMatrix();
}

/* incoming osc message are forwarded to the oscEvent method. */
void oscEvent(OscMessage theOscMessage) {

if ( theOscMessage.addrPattern().equals("/rotationvector/z") );
number1 = theOscMessage.get(0).floatValue();
}

class LowPass {
ArrayList buffer;
int len;
float output;

LowPass(int len) {
this.len = len;
buffer = new ArrayList(len);
for (int i = 0; i < len; i++) {
buffer.add(new Float(0.0));
}
}

void input(float v) {
buffer.add(new Float(v));
buffer.remove(0);

float sum = 0;
for (int i=0; i<buffer.size (); i++) {
Float fv = (Float)buffer.get(i);
sum += fv.floatValue();
}
output = sum / buffer.size();
}
}

最佳答案

听起来您并不是在询问如何从手机本身获取传感器值。您已经从 Sensors2OSC 获取传感器值,它通过 OSC 将它们发送到 Processing。你可能正在使用类似 oscP5 的东西.

我想您是在问如何解析进入您的 Processing 草图的消息,以便您可以访问 Processing 代码中的传感器值,然后如何将这些传感器值转换为角度。

第 1 步 是通过 OSC 获取消息。你可以找到一个例子 here ,而您关心的函数是 oscEvent(OscMessage theOscMessage) 函数。

完成该工作后,第 2 步 是解析来自消息的数据。你可以看看the OscMessage documentation获取可能派上用场的功能列表。你的最终目标是拥有这样的东西:

void oscEvent(OscMessage theOscMessage) {
float xAccel = //parse theOscMessage to get X accelerometer reading
float yAccel = //parse theOscMessage to get Y accelerometer reading
float zAccel = //parse theOscMessage to get Z accelerometer reading

println(xAccel + ", " + yAccel + ", " + zAccel);
}

第 3 步 是将这些原始加速度计值转换为角度。谷歌搜索“android accelerometer to angle”返回大量结果,包括:

你的目标是拥有这样的东西:

void oscEvent(OscMessage theOscMessage) {
float xAccel = //parse theOscMessage to get X accelerometer reading
float yAccel = //parse theOscMessage to get Y accelerometer reading
float zAccel = //parse theOscMessage to get Z accelerometer reading

float angle = //calculate angle
println(angle);
}

从那里你可以用角度值做任何你想做的事。请注意,它可能比这稍微复杂一些,因为我不确定您的 Android 应用程序是否会在一条消息中发送所有加速度计值,或者它是否会分成多条消息。在您真正理解消息包含的内容之前,您将不得不不断尝试。

关于android - 使用安卓手机原始数据的旋转角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36095767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com