Сохраните ориентацию в массив - и сравните

Я хочу добиться следующего:

Я хочу, чтобы пользователь мог «записывать» движение 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);
     }];

Я думаю, что я мог бы сохранить эти значения в массив, если пользователь находится в режиме записи. И когда пользователь пытается воспроизвести это движение, я могу сравнить скопированный массив движений с записанным. Дело в том, как разумно сравнить два массива? Они никогда не будут иметь в точности одинаковые значения, но могут быть в чем-то одинаковыми.

Я вообще на правильном пути здесь?

ОБНОВЛЕНИЕ: я думаю, что, возможно, ответ Элис об использовании DTW может быть правильным для меня здесь. Но я не настолько умен (видимо), поэтому, если бы кто-нибудь мог помочь мне с первыми шагами по сравнению с массивами, я был бы счастлив!

Спасибо!


person Mikael    schedule 16.06.2011    source источник
comment
Вы хотите сравнить ориентацию (вращение), ускорение (~= движение) или и то, и другое? Имеет ли значение ориентация относительно земли?   -  person tc.    schedule 28.06.2011
comment
Али, спасибо, завтра попробую. Потом сообщу как дела:)   -  person Mikael    schedule 29.06.2011
comment
@tc: просто движение. Это не должно быть относительно земли.   -  person Mikael    schedule 29.06.2011
comment
Итак, ориентация или ускорение? Или оба? Или что-то другое?   -  person tc.    schedule 29.06.2011
comment
@zebulon Я рад, что вы нашли мой ответ полезным, спасибо за щедрость. Пожалуйста, дайте мне знать, как DWT работал для вас.   -  person Ali    schedule 05.07.2011
comment
@Али, да, спасибо! Сейчас клиент решил не идти по этому пути. Но я все равно попытаюсь заставить его работать, это может быть очень полезно в будущем.   -  person Mikael    schedule 05.07.2011
comment
@ Микаэль, тебе удалось выполнить кодирование? Думаете поделиться или нет?   -  person Infinite Possibilities    schedule 03.04.2013


Ответы (2)


Попробуйте динамическую деформацию времени. Вот наглядный пример с одномерными массивами. В базе у нас уже есть следующие 2 массива:

Массив 1: [5, 3, 1]
Массив 2: [1, 3, 5, 8, 8]

Мы измерили [2, 4, 6, 7]. Какой массив больше всего похож на вновь измеренный? Очевидно, второй массив подобен вновь измеренному, а первый нет.

Давайте рассчитаем матрицы стоимости согласно этой статье, подраздел 2.1:

D(i,j)=Dist(i,j)+MIN(D(i-1,j),D(i,j-1),D(i-1,j-1))

Здесь D(i,j) — элемент (i,j) матрицы затрат, см. ниже. Посмотрите на рисунок 3 этой статьи, чтобы увидеть, что это рекуррентное соотношение применяется. Вкратце: сначала вычисляются столбцы, начиная с D(1,1); D(0,*) и D(*,0) не учитываются в MIN. Если мы сравниваем массивы A и B, то Dist(i,j) — это расстояние между A[i] и B[j]. Я просто использовал ABS(A[i]-B[j]). Матрицы стоимости для этого примера:

Динамическое искажение времени, матрицы стоимости

Для Массива 1 у нас есть 13 очков, для Массива 2 у нас есть 5. Побеждает меньший показатель, поэтому наиболее похожим массивом является Массив 2. Лучший путь деформации отмечен серым цветом.

Это всего лишь набросок DTW. Существует ряд проблем, которые необходимо решить в реальном приложении. Например, использование смещения вместо фиксированных конечных точек или определение мер соответствия: см. этот документ, стр. 363, 5. граничные условия и стр. 364. В приведенном выше связанном документе также есть дополнительные подробности.

Я только что заметил, что вы используете рыскание, тангаж и крен. Проще говоря: не делайте и еще одна причина не делать этого. Можно ли вместо этого использовать данные акселерометра? "Акселерометр – это прямое измерение ориентации" (из манускрипта DCM), и что это то, что вам нужно. А что касается вопроса тс, имеет ли значение ориентация относительно севера? Думаю, нет.

Гораздо проще сравнивать векторы ускорения, чем ориентации (углы Эйлера, матрицы вращения, кватернионы), как указал tc. Если вы используете данные об ускорении, у вас есть 3-мерные векторы в каждый момент времени, координаты (x, y, z). я бы просто вычислил

Dist(i,j)=SQRT((A[i][X]-B[j][X])^2+(A[i][Y]-B[j][Y])^2+(A[i][Z]-B[j][Z])^2),

это евклидово расстояние между двумя точками.

person Ali    schedule 16.06.2011
comment
Ооо, это было сложно. Я пытаюсь понять, как это работает. Спасибо! - person Mikael; 16.06.2011
comment
@Mikael Микаэль Я думаю, что из-за этого ответа название этого вопроса следует изменить, чтобы упростить доступ к нему для будущего пользователя. Кроме того, я настоятельно рекомендую акселерометр выполнять распознавание движения, не удаляя влияние гравитации и дополнительно интегрируя его с целью избежать шума. Таким образом, гравитация будет распределена по осям и даст вам уникальные данные в виде включенной информации об ориентации. Не интегрируйте данные, потому что я замедляю ваши измерения. Я написал диссертацию по DTW и ACC, так что поверьте мне. Отличный короткий содержательный ответ, я тоже благодарю. - person murt; 26.01.2016
comment
@murt — это данные ускорения, такие как Dist(i,j)/t, где t — временной интервал A и B? Как данные об ускорении включают информацию об ориентации? это потому, что он рассчитывается из данных ориентации? Не могли бы вы поделиться некоторыми из ваших опубликованных статей, касающихся этой темы? Заранее спасибо! - person Bruce Yo; 06.11.2016
comment
@BruceYo данные представлены в виде D(x,y,z) и включая гравитацию. Итак, если вы положите телефон на нижний край, то одна из осей покажет вам значение около 8-9 м/с^2. Идем дальше. Теперь, если вы будете двигать смартфон, на каждую ось будет влиять эта гравитация, поэтому конечная сила на каждой оси будет состоять из распределенной силы гравитации, следовательно, она будет, скажем, имитировать ориентацию. Конечно, это непросто, поэтому вы не можете определить, где находится север, восток и т. д. Это больше похоже на то, в каком положении по отношению к силе тяжести находится ваш телефон. GitHubMurt/GestureRecognition - person murt; 06.11.2016

Я думаю, что подход Али в целом хорош, но есть общая проблема, которая называется карданная блокировка (или SO обсуждения по этой теме) при использовании углов Эйлера, т.е. тангажа, крена и рыскания. Вы столкнетесь с этим, когда будете записывать более сложное движение, длящееся дольше нескольких тиков и приводящее, таким образом, к большим угловым дельтам в разных угловых направлениях.

В двух словах это означает, что у вас будет более одного математического представления для одной и той же позиции, просто в зависимости от порядка движений, которые вы сделали, чтобы добраться туда - и потеря информации с другой стороны. Рассмотрим самолет, летящий в воздухе слева направо. Ось X идет слева направо, ось Y направлена ​​вверх. Следующие две последовательности движений приведут к одному и тому же конечному положению, хотя вы доберетесь туда совершенно разными путями:

Последовательность А:

  1. Поворот вокруг рыскания +90°
  2. Вращение вокруг тангажа +90°

Последовательность Б:

  1. Вращение вокруг тангажа +90°
  2. Поворот вокруг крена +90°

В обоих случаях ваш самолет смотрит вниз на землю, и вы можете видеть его днище с вашего места.

Единственное решение — избегать углов Эйлера и, таким образом, все усложнять. Кватернионы — лучший способ справиться с этим, но мне потребовалось некоторое время, чтобы получить представление об этом довольно абстрактном представлении. Хорошо, этот ответ не продвинет вас ни на шаг вперед в отношении вашей первоначальной проблемы, но может помочь вам избежать пустой траты времени. Может быть, вы можете внести некоторые концептуальные изменения, чтобы закрепить свою идею.

Кей

person Kay    schedule 27.06.2011
comment
Вместо этого у кватернионов есть проблема двойного покрытия (к счастью, не такая ужасная). В любом случае вам нужно сравнить расстояние между двумя ориентациями, что не особенно тривиально с любым из представлений. - person tc.; 28.06.2011