相关疑难解决方法(0)

将方向存储到数组 - 并进行比较

我想实现以下目标:

我希望用户能够使用陀螺仪"记录"iPhone的运动.之后,用户应该能够复制相同的动作.我使用以下方法提取俯仰,滚转和偏航:

 [self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue]
                                       withHandler: ^(CMDeviceMotion *motion, NSError *error)
     {
         CMAttitude *attitude = motion.attitude;
         NSLog(@"pitch: %f, roll: %f, yaw: %f]", attitude.pitch, attitude.roll, attitude.yaw);
     }];
Run Code Online (Sandbox Code Playgroud)

我想如果用户处于记录模式,我可以将这些值存储到数组中.当用户尝试复制该移动时,我可以将复制的移动阵列与录制的移动阵列进行比较.问题是,如何以智能方式比较两个阵列?它们永远不会具有完全相同的值,但它们可能有些相同.

我在这里走在正确的轨道上吗?

更新:我想也许Alis回答有关使用DTW的方法对我来说可能是正确的方法.但是我并不那么聪明(显然),所以如果有人能帮助我完成与阵列比较的第一步,我会是一个快乐的人!

谢谢!

iphone math android artificial-intelligence gesture-recognition

22
推荐指数
2
解决办法
1万
查看次数

欧拉角到四元数然后四元数到欧拉角

我正在使用lib glm(http://glm.g-truc.net/)进行测试四元数,但我遇到了问题; 当我将欧拉角转换为四元数然后立即将四元数转换为欧拉角时,我的结果与我的初始欧拉角完全不同.这是正常的吗?可能是因为轮换不是交际?

代码测试:

#include <glm\quaternion.hpp>
#include <math.h>

#define PI M_PI
#define RADTODEG(x) ( (x) * 180.0 / PI )
#define DEGTORAD(x) ( (x) * PI / 180.0 )

int         main( void )
{
    float RotX = 90.f;
    float RotY = 180.f;
    float RotZ = -270.f;

    if ( RotX || RotY || RotZ )
    {
        std::cout << "Init: x= " << RotX << ", y= " << RotY << ", z= " << RotZ << "\n";
        glm::quat key_quat(glm::detail::tvec3<float>(DEGTORAD( …
Run Code Online (Sandbox Code Playgroud)

c++ math rotation quaternions euler-angles

13
推荐指数
3
解决办法
4万
查看次数

javascript'deviceorientation'事件 - 它测量的传感器是什么?

如果我有一个简单的网页和脚本,如下所示:

<body>
    <div id="alpha">a</div>
    <div id="beta">b</div>
    <div id="gamma">g</div>
</body>

<script>
window.addEventListener('deviceorientation', function(event) {
    var alpha = event.alpha;
    var beta = event.beta;
    var gamma = event.gamma;

    document.getElementById("alpha").innerHTML = alpha;
    document.getElementById("beta").innerHTML = beta;
    document.getElementById("gamma").innerHTML = gamma;

}, false);
</script>
Run Code Online (Sandbox Code Playgroud)

我可以在Android的移动Firefox中打开它,它将输出3个如下所示的数字:

89.256125
3.109375
0.28125
Run Code Online (Sandbox Code Playgroud)

旋转设备时,数字会根据旋转轴而变化.我注意到"alpha"的值非常嘈杂 - 即使手机在桌面上休息,它们也会不间断地反弹,而其他两个保持稳定.我明白阿尔法是我的标题.我好奇的是,它是从指南针(有噪音问题)得到"alpha"值而另外两个来自陀螺仪吗?

另一个问题是当我改变音高时,由于某种原因,标题也会改变,即使我实际上没有改变音标.我只是好奇为什么会这样,以及如何纠正它?

此外,由于陀螺仪测量角速度,我认为这个事件监听器是自动集成的 - 集成算法是否与任何一个一样好?它是否使用加速度计来校正漂移?

在这个谷歌技术讲座视频中,从15:00到19:00,演讲者谈到通过使用加速器来校正陀螺仪固有的漂移,以及校准相对于重力的方向:http://www.youtube .com/watch?v = C7JQ7Rpwn2k 我该怎么做呢?

感谢任何人的见解.

javascript android sensor accelerometer gyroscope

11
推荐指数
1
解决办法
4067
查看次数

两个3d矢量之间的欧拉角

你如何找到2个3D矢量之间的3个欧拉角?当我有一个Vector并且我想获得它的旋转时,通常可以使用此链接:计算旋转以查看3D点?

但是如何按照彼此计算它们呢?

math 3d geometry vector euler-angles

7
推荐指数
1
解决办法
3万
查看次数

从四元数到欧拉角以及反向的错误转换

我正在将角度轴表示形式转换为欧拉角。我决定检查并确保从转换中得到的欧拉角会回到原始的轴角。我打印出值,但它们不匹配!我已经阅读了http://forum.onlineconversion.com/showthread.php?t=5408http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles以及本网站上的类似转换问题。

在下面的代码中,我从角度“ angle”和轴(rx,ry,rz)开始,然后将其转换为四元数(q0,q1,q2,q3)。我将四元数转换为欧拉角(滚动,俯仰,偏航)。然后要检查它,我将(roll,pitch,yaw)转换为cAngle和(cRx,cRy,cRz)的轴角。然后,我对(滚动,俯仰,偏航)进行一些边界检查,以将数字保持在-pi和pi之间,然后将它们打印出来。应该是cAngle = angle和(cRx,cRy,cRz)=(rx,ry,rz),但这两个都是错误的。

我相信旋转是常见的Z * Y * X顺序。我的数学有问题吗?我打算最终在俯仰为0或PI时添加特殊情况,如http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/,但现在我认为问题是独立的。

        //input is angle 'angle' and axis '(rx,ry,rz)'

        //convert rx,ry,rz, angle, into roll, pitch, yaw
        double q0 = Math.Cos(angle / 2);
        double q1 = Math.Sin(angle / 2) *Math.Cos(rx);
        double q2 = Math.Sin(angle / 2) * Math.Cos(ry);
        double q3 = Math.Sin(angle / 2) * Math.Cos(rz);
        double roll = Math.Atan2(2 * (q0 * q1 + q2 * q3), 1 - 2 * (q1 * q1 + q2 …
Run Code Online (Sandbox Code Playgroud)

math angle rotation quaternions

4
推荐指数
1
解决办法
6099
查看次数

Android Pitch and Roll问题

我正在开发适用于Android的倾斜应用.我遇到了纵向和横向模式的问题.当音高= 90度(电话结束)时,甚至在滚动值没有发生任何物理变化时,滚动值变得疯狂之前.我一直无法找到解决这个问题的方法.如果有人能指出我正确的方向,我们将不胜感激.

这是一个简短的代码转储,所以你知道它不是加速度计误差.

final SensorEventListener mEventListener = new SensorEventListener(){
     public void onAccuracyChanged(Sensor sensor, int accuracy) {}  
 public void onSensorChanged(SensorEvent event) {
     setListners(sensorManager, mEventListener);

      SensorManager.getRotationMatrix(mRotationMatrix, null, mValuesAccel, mValuesMagnet);
     SensorManager.getOrientation(mRotationMatrix, mValuesOrientation);


        synchronized (this) {

            switch (event.sensor.getType()){
                case Sensor.TYPE_ACCELEROMETER:

                    System.arraycopy(event.values, 0, mValuesAccel, 0, 3);

                    long actualTime = System.currentTimeMillis();

                    //Sensitivity delay
                    if (actualTime - lastUpdate < 250) {
                        return;
                        }
                    else {
                        sysAzimuth = (int)Math.toDegrees(mValuesOrientation[0]);
                        sysPitch = (int)Math.toDegrees(mValuesOrientation[1]);
                        sysRoll = (int)Math.toDegrees(mValuesOrientation[2]);

                        //invert direction with -1
                      pitch = (sysPitch - pitchCal)*-1;
                      roll = (sysRoll - …
Run Code Online (Sandbox Code Playgroud)

android sensor pitch tilt

3
推荐指数
1
解决办法
1万
查看次数

如何从Android中的旋转矩阵中获取四元数?

我正在尝试获取Android设备的方向,我需要它在四元数结构(float[4]基本上).

我现在拥有的是:

if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
    last_acc = (float[])event.values.clone();
}
else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD){
    last_mag = (float[])event.values.clone();
}
if (last_acc != null && last_mag != null){
    SensorManager.getRotationMatrix(rotation, inclination, last_acc, last_mag);
    SensorManager.getOrientation(rotation, orientation);
Run Code Online (Sandbox Code Playgroud)

在"旋转"中,我有4x4旋转矩阵,并且在方向上我有一个float [3]向量,其中我有方位角,俯仰和滚动.

我怎样才能得到四元数?

android quaternions android-sensors

2
推荐指数
1
解决办法
9086
查看次数

减少wiimote俯仰/滚动变化

我想使用wiimote来控制没有红外传感器条的光标.我正在使用它的音高和滚动值.问题是,当音高接近0度时,滚动非常不稳定,当音高接近90度时,它本身非常不稳定,但滚动很好.我经常轮询wiimote,所以我平均最后20个音高和滚动值,我可以让光标移动到我想要的位置.唯一的问题是还有很多无法控制的震动.关于如何减少它的任何想法?(或者甚至在没有IR传感器的情况下获得更精确的位置?)

谢谢!

戴夫

c++ wii noise wiimote vibration

1
推荐指数
1
解决办法
2857
查看次数