singlepost

Задача вычислить на сколько объект вращается << На главную или назад  

Помогите пожалуйста сделать это. Или подскажите какие то идеи.

Значит есть треугольник с 3мя точками. они отражают сигналы от камеры которые говорят их позицию в x,y,z. этот треугольник двигается и крутится и мне надо сказать на сколько он прокрутился относительно x,y, или з оси. Только вот проблема позиции этих точек не очень точные. Например когда крутится вокруг оси з, разница между отрезками з 2х точек должна оставаться одинаковой. Но она меняется на 1мм. А когда я считаю углы, то эта ошибка становится большой.Так как мне уменьшить ошибку?

Вот например что я пробовал. Я считаю насколько какой ни будь отрезок из 2х точек(3таких отрезка возможны) крутится.И 1 из них показывает лучше результаты чем другой.1 причина это потому что один из отрезков почти параллелен оси движения, и тогда ошибка очень сильно увеличивается.

Так я пока что сделал следующие критерии–
если отрезок крутится вокруг оси з и сумма его длины x+y очень маленькая, значит он почти параллелен и не стоит использовать его результаты. Это потому что угол меняется в зависимости от x/y и когда эти величины маленькие то очень чувствителен к ошибкам.Ну можно еще придумать похожие критерии.

Но другая проблема, это все координаты меняются на маленькие дистанции. Например если длина y маленькая а x большая то возможно что во время каждого измерения y меняется на .1mm а x на .01mm. Но ошибка может быть .05мм.Иногда даже когда отрезок не параллелен оси вращения он ошибается на 50%, т.е. y двигается гораздо больше или меньше чем на самом деле. так я не знаю как это наладить.И не знаю какие еще критерии использовать что бы выбрать самый аккуратный отрезок из 3х для измерения.

17 ответов в теме “Задача вычислить на сколько объект вращается”

  1. 17
    ischu tovar ответил:

    ух, я нашел свою ошибку! файл который мне дали имеет свою координаты по отношению к камере. т.е. начальные координаты у точки могут быть -67,-7,18 и когда каждая точка меняется надо просто строить вектор между этой точкой и камерой а не между 2мя точками! даже посмотрев на excel уже видно что ошибка не более 2ух градусов из 20! там есть небольшие погрешности над которыми можно поработать что бы еще уменьшить ошибку, но моя огромная ошибка была именно в этом!

  2. 16
    ischu tovar ответил:

    сделал нормали. запустил туда примеры где ось вращения перпендикулярна вектору нормали. использовал 3 комбинации вектора нормали, т.е. ab*bc,ab*ac,bc*ac. все они дали полностью одинаковый результат. для некоторых примеров попал в точку а для некоторых полностью промахнулся. т.е. так же как и использование одного из параллельных отрезков иногда дает аккуратный результат а иногда нет. Странно.

  3. 15
    ischu tovar ответил:

    Александр, я не смог скачать программу, ее там больше нет. Но я думал над статистикой. Из того что я прочитал вроде эта програма может посчитать распределение величин точки на каком то интервале. Т.е. например он найдет что в одном отрезке точки растут одним темпом(а потом допустим уменьшаются) а в другом другим темпом. Но один из этих темпов правильный а другой нет!

    И я думал над таким методом:
    1) узнаю что вращение например вокруг оси Z и что координата Y меняется гораздо больше чем координата X, т.к. начальная длина X между точками гораздо больше чем длина Y. Тогда большинство ошибок в измерение будет исходить из неточностей в Y.
    2) Если (y2-y1)к- это изменение в длине Y между точками AB после каждого измерения, и он вращается на примерно одинаковой скорости, то это изменение должно быть равномерным на маленьком интервале.
    3) тогда для каждого отрезка, например AB,BC,AC, медиана, я беру интервал из 20 измерений(i) и если median(y2-y1) для интервала i/2 вперед или i/2 назад наиболее близка к теперешнему (y2-y1)k для этого отрезка, то этот отрезок имеет наиболее равномерные или точные изменения y.

    но я не думаю что это сработает. может там действительно координаты камеры не совпадают с теми координатами точек которые она выдает и это влияет еще больше чем вибрация или другие источники погрешностей.

    я раньше уже пробовал брать median изменений отрезка при интервале например 50 измерений, и это результат сильно не изменило. один отрезок все равно вращался больше чем другой взависимости от ориентации треугольника.

  4. 14
    ischu tovar ответил:

    Спасибо Леонид. Я не вижу разницу между аркосинус и арктангенс потому что например аркосинус это будет x/(x^2+y^2)^.5 при каждом измерение. т.е. если новые числа для х и y ошибочны то их длина такая же ошибочная. Да, возможно ось немножко сбита. Но так же это можно объяснить вибрациями камеры. Ведь даже когда треугольник совсем не двигается координаты точек все равно меняются. Например у одной точки координата вдоль направления от камеры поменялась на 1.5мм! Я добавлю функцию для измерения нормали и сообщу результаты. У меня как раз есть несколько примеров где ось вращения перпендикулярна нормали.

  5. 13
    ischu tovar ответил:

    Спасибо Александр. Я сейчас прочитаю описание этой программы.

  6. 12
    Леонид Максимов ответил:

    сильно не вникал, но предварительно ось вращения не совпадает с осью z, а параллельна ей (возможно сбито начало координат в измерителе).

    и еще, не используйте арктангенсы. попробуйте арккосинус скалярного произведения нормалей последовательных измерений. не забудьте нормали подкорректировать, если вы допускаете вращение вокруг только одной оси.

  7. 11
    Александр Чигринец ответил:

    Вообще есть стандартный аппарат обработки результатов эксперимента. Мне кажется, что в данном случае им и нужно пользоваться, поскольку имеется серия независимых равноточных измерений, которые нужно обработать и обсчитать.
    Мат аппарат описан, например, здесь: //mi-kron.narod.ru/student/lab_rab/lab_01/index...

    Это позволит отбросить точки, выходящие за доверительный интервал и минимизировать погрешность.

  8. 10
    ischu tovar ответил:

    вот координаты треугольника в одном примере.между точками А и Б, дистанция между координатами X равна 20мм вначале.координаты Y равны 0мм(т.е. треугольник лежит в плоскости XZ), и Z равны 30мм. Между точками Б и С дистанция Х равна 13мм, дистанция Y равна 0 и дистанция Z 20мм вначале. Теперь когда треугольник поворачивается вокруг Z, меняется в основном дистанция координат Y. Так у AB она поменялась на 3.5мм а у BC на 3мм. Хотя в идеале дистанции Y должны меняться пропорционально X. Т.е. если в BC Y поменялась на 3.0мм то в AB Y должна поменяться на 3.0*20/13 что бы дать тот же угол.

    если я знаю что крутится вокруг оси Z (дистанция между этими координатами меняется меньше всех в каком то интервале например 20 измерений), то я просто беру арктан(Yi/Xi)-arctan(Yi-1/Xi-1) между каждым измерением. Но я выбираю какой то 1 отрезок для которого считать эти изменения.если посчитать для 2 отрезков и взять их среднее то не всегда будет лучше потому что 1 из отрезков мог дать очень аккуратный рельзутат а другой мог ошибиться на 100%.

    Я кажется вижу объяснение почему нормаль к плоскости должна улучшить ошибки, потому что теперь вместе сравнения точек внутри 1го отрезка можно сравнивать изменения в2 отрезках сразу. но медиана мне кажется это по прежнему зависит от 2х точек внутри 1го отрезка.

  9. 9
    ischu tovar ответил:

    Леонид, спасибо! Но если я использую просто один из отрезков, паралелльных плоскости, то если его вектор почти параллелен оси вращения то опять же будет большая ошибка. Например если один отрезок дает вращение 0градусов потому что он полностью параллелен а другой отрезок дает больше или меньше реальной величины в зависимости от других погрешностей, то почему же медиан между ними даст лучший результат? И если сравнить все 3 медиана я подозреваю что они дадут очень разные результаты так же как и 3 обычных отрезка между точками.

    Я думал что у всех этих точек погрешность примерно одинаковая(до 1мм в течение экспиремента у каждой координаты) потому что они все примерно 50см от камеры. Но я заметил что даже вдоль направления они двигаются по разному. например один отрезок имеет длину меджу х изначально 20мм и его y двигается на 3.5мм с 0, а у другого отрезка х изначально 13мм и его y двигается 3.0мм с 0. в итоге более короткий из них повернулься на 15градусов а длинный на 10 когда правильный результат 15. а в другом примере наоборот отрезок с более длинным х повернулься больше. так я не понимаю почему медиан или нормаль будет лучше.

  10. 8
    Леонид Максимов ответил:

    > например один отрезок имеет длину меджу х изначально 20мм и его y двигается на 3.5мм с 0, а у другого отрезка х изначально 13мм и его y двигается 3.0мм с 0. в итоге более короткий из них повернулься на 15градусов а длинный на 10 когда правильный результат 15.

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

  11. 7
    ischu tovar ответил:

    Александр, да. Там 2 треугольника и на вход приходят 18колонок с координатами каждой из 6точек после каждого измерения. координаты это могут быть дистанции от камеры или еще какого то предмета. Я должен вернуть графу с изменениями углов, т.е. эти дельты изменений.

  12. 6
    Леонид Максимов ответил:

    > Я не знаю как оценить ошибку, но она действительно разная для каждой точки и зависит от ориентации треугольника что наверное связано с дистанцией до камеры, как вы сказали.

    погрешность измерения для вашего измерителя будет такой: погрешность вдоль направления на точку определяется дальномерои (может зависеть от расстояния, это определяется типом дальномера). погрешность поперек направления на точку определяется погрешностью измерения угла, умноженной на расстояние.

    > если вектор нормали параллелен оси Y и вращение тоже идет вокруг той же оси то нормаль покажет 0 изменений.

    для этого помимо нормали к плоскости можете рассмотреть одну из медиан треугольника.

  13. 5
    Александр Чигринец ответил:

    А можно ещё раз сформулировать условия задачи? В смысле, что приходит на вход и что нужно дать на выход?

    Я правильно понял, что на вход приходит серия из 2000 измерений, сделанных за последние двадцать секунд?
    А какой вердикт должна выдать программа? Дельты изменения углов поворота по трём осям?

  14. 4
    ischu tovar ответил:

    спасибо! и почему же ошибка от этого вектора нормали будет меньше чем от одного из тех 3х отрезков(они все параллельны плоскости)? если вектор нормали параллелен оси Y и вращение тоже идет вокруг той же оси то нормаль покажет 0 изменений. или если этот вектор почти параллелен оси вращения то ошибка будет большой. а вот если нормаль перпендикулярна оси вращения то я не знаю почему ошибка дожна уменьшится или увеличится. я по любому должен попробовать этот метод.

  15. 3
    Леонид Максимов ответил:

    для уменьшения ошибки рассматривайте треугольник как плоскую фигуру и следите за изменением нормали к плоскости, в которой он лежит.

  16. 2
    ischu tovar ответил:

    Вершины треугольника(на самом деле точки на металлической плоскости) измеряются камерами последовательно. Это дейтсвительно может быть частью ошибки(камера измеряет 100точек в секунды и т.к. в экспиременте всего 6точек или 2треугольника, то она делает 16измерений в секунду). Еще может быть проблема с вибрацией камерой, т.к. есть ошибка на 2градуса когда треугольник даже неподвижный.Но я не знаю как камера работает, я просто получаю результаты координат этих 3х или 6ти точек в течение 2000 измерений, и я их пытаюсь перевести в углы. Я не знаю откуда эти результаты берутся. Я не знаю как оценить ошибку, но она действительно разная для каждой точки и зависит от ориентации треугольника что наверное связано с дистанцией до камеры, как вы сказали. В течение 2000 измерений обычно ошибка около 1мм для каждой координаты, а в течение 1го измерения она может меняться очень сильно.

    Да задача как вы сказали!

    Я могу определить вокруг какой оси она крутится если я например беру интервал из 10измерений и смотрю какая координата меньше всего двигалась.Это можно еще улучшить если вместо этого взять координату которая больше всего вращается а для других 2х сравнивать их отношение движения по сравнению с длиной.

    Но даже если я точно знаю вокруг какой оси он вращается, например z, и все что мне надо что бы измерить угол это тан(y/x) я все равно получаю большие ошибки. Спасибо.

  17. 1
    Леонид Максимов ответил:

    сформулировано очень неясно, поэтому попробую уточнить:

    измеряются координаты вершин треугольника (не совсем ясно, измеряются ли они одновременно или последовательно, и следует ли учитывать запаздывание сигнала, связанное с разной удаленностью вершни треугольника от измерителя). при этом измерения производятся с погрешностью 0.05мм (что странно, учитывая различное расстояение от вершин треугольника до измерителя).

    задача состоит в том, чтобы определить, вокруг которой из осей (x, y или z, но только одной) треугольник повернулся, и на какой угол.

    поправьте, где я не прав.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.