Перейти к содержанию
    

коррекция корявого sin/cos энкодера, самокалибровка

Есть измеряемая функция f(x), которая похожа на синус конечной длительности, пусть будет ~100 периодов, но достаточно корявая чтобы её нельзя было просто использовать в качестве квадратурного энкодера с заданной точностью.

То есть если просэмплировать в двух точках x0 и x0-L/4 и взять арктангенс, получится не достаточно аккуратно, из-за неравномерности и корявости этого "синуса", (период и амплитуда слегка меняются от периода к периоду и есть немного гармоник).

Сама f(x) стабильна и не меняется от времени и вдоль этой функции f(x) можно ездить туда-сюда и измерять её, но проблема в том, что нет возможности откалибровать реальное положение x при измерении. 

То есть проехав по x и измерив f(x) на самом деле измеряем f(g(x)), где g(x) почти линейна (можно каким-нибудь полиномом небольшой степени представить с не очень большими коэффициентами у степеней >1), но, опять же, достаточно корявая и не очень стабильная от измерения к измерению, чтобы просто положиться на точность этой "координаты" и просто померить f(x) для дальнейшей коррекции. проблема курицы и яйца.

Но есть возможность прицепить два датчика на определённом, но фиксированном расстоянии d (примерно четверть периода), и получить два измерения

A(x) = f(g(x))

B(x) = f(g(x)-d)

Теперь надо каким-нибудь образом из двух этих измерений вытащить отдельно f(x) или g(x).

По разности B(x) и A(x-d): f(g(x)-d) - f(g(x-d)) как-то должно быть видно что едем не совсем равномерно, от есть отличия g(x) от g(x)==x.

И если представить g(x) в виде полинома, то можно начать численно подгонять коэффициенты чтобы эту самую разницу занулить, точнее минимизировать во всех точках, но наверное должен быть какой-то более прямой способ в общем случае превратить N измеренных точек A и B в N значений f и реальной координаты g.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А покажите эту самую корявость в виде графика кучи точек с координатами x и y? Может там сначала надо банально прикинуть матрицу коррекции для того, чтобы из какого-нибудь сдвинутого эллипса сделать нормальный круг в центре координат, а потом уже "индексная дырка" справится без лишних телодвижений?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

корявость не периодическая, а например какой-то отдельный полупериод из сотни может съехать (по амплитуде - не особо страшно, частоте/фазе прихватив все последующие).

то есть нужна коррекция по всей длине (абсолютному углу от 0 до 200Pi), а не средняя по периоду

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужна карта всей линейки. И знать начальное положение. Поиск по градиенту невязки измерений и карты.

Если начальное положение не известно и надо распознать его во время движения, то это перебор гипотез.

Карту можно снять многократным равномерным проездом по всей длине. В каком-то виде все равно нужен эталон, если катать неравномерно и всегда одинаково, то будут дефекты (сжатия/растяжения) в карте.

Изменено пользователем amaora

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 minutes ago, amaora said:

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

как отличить неравномерность проезда от неравномерности самой линейки?

эталона нет, есть два измерения с известным смещением.

 

можно взять за начальные значения для предполагаемой амплитуды линейки измерения с "синусного" датчика, и считать что едем абсолютно равномерно и линейно, то есть что точки просэмплированы ровно в x_i = dx*i, а не где попало.

потом проинтерполировать синусный канал и взять значение в "координате" где должен быть "косинусный" датчик, сравнить с показаниями собственно реального "косинусного" датчика, и потом подвинуть немного и амплитуду и координату x_i так чтобы они совпали, если так много-много раз проитись по всем точкам куда-то оно должно сойтись.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 minutes ago, _pv said:

как отличить неравномерность проезда от неравномерности самой линейки?

При формировании карты никак, если какая-то зазубрина будет давать неравномерность движения, то это нельзя отличить от корявости датчика в этом месте. Без дополнительных знаний о сигнале датчика по крайней мере.

Когда карта готова и уже определяем положение, например по измерениям в двух смещённых точках, то это не проблема. Смотрим разности показаний датчиков и выборки из карты в предполагаемом месте их нахождения, двигаем оценку положения в соответствии с градиентом карты, так чтобы минимизировать невязки.

При снятии карты видимо надо ещё определять расстояние между датчиками. А может быть под каждый датчик свою карту надо.

Изменено пользователем amaora

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, _pv сказал:

как отличить неравномерность проезда от неравномерности самой линейки?

эталона нет, есть два измерения с известным смещением.

Если на этап градуировки/калибровки допустимо, временно на "телегу" поставить акселерометр.

Какого порядка точность, микрометры или сантиметры ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 minutes ago, k155la3 said:

Если на этап градуировки/калибровки допустимо, временно на "телегу" поставить акселерометр.

Какого порядка точность, микрометры или сантиметры ?

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

вопрос исключительно по математике.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похожая задача была. Тоже неравномерность -  незначительная, но есть. Временно ставил эталонный оптический датчик с равномерной линейкой, снимал показания моего датчика и эталонного через определенные интервалы, а потом - кусочно-линейно интерполировал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если я правильно понял, у вас n слегка плывущих точек, назовем их координаты как \(g_1,...,g_n\), и вы можете измерить свой сигнал 
\(f_i = \sin(\alpha g_i), ~~ i=1,...,n\) в этих точках и сигнал, который слегка сдвинут на d, то есть
\(h_i = \sin(\alpha g_i + d), ~~ i=1,...,n.\)

Обозначим \(p_i = \alpha g_i, ~~ i=1,...,n\) и запишем задачу минимизации

\(\displaystyle \min_{p, d} \sum_i ||f_i - \sin(p_i)||_2^2 + ||h_i - \sin(p_i + d)||_2^2.\)

В ней очевидно, что можно при заданном d получить аналитическое решение для каждого \(p_i\), потом его туда подставить и найти d.

Из \(p_i\) потом получается методом линейного МНК неизвестная частота и фаза, ибо по хорошему там \(f_i = \sin(\alpha g_i + \beta), ~~ i=1,...,n\), где та самая бета и есть фаза.

Проверьте, пожалуйста, правильно ли я понял вашу задачу, если да, то напишу окончательные формулы для \(p_i\) и d.

PS: в аналогичных задачах, что мне попадались, при сдвиге на d у меня другой сенсор измерял немного с отличным коэффициентом (интенсивностью), а у вас это надо учитывать? Если да, там все также, только формулы немного сложнее получаются.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 часов назад, _pv сказал:

И если представить g(x) в виде полинома

Что если представить искаженный синус в виде фазомодулированного, несколько раз проехать, искать и усреднять фазу чтобы избавиться от "не очень стабильная от измерения к измерению". Затем рассчитать усредненный сигнал и  корреляционным способом находить координату, (если допустимо, то, т.к. КФ мала вначале шкалы , проводить измерение начиная от противоположного конца).. Но КМК от корявости самой "линейки" f(x) два датчика не помогут, т.к. непонятно какой из них на корявом участке, т.е. все равно как тянет себя Мюнхаузен одной рукой или двумя - точки опоры нет, (ошибку измерения в корень из двух уменьшить смогут).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эталонный датчик не всегда впихнуть получится. Для калибровки использовали инерционность механической системы, грубо говоря маховик. Снимали приводной ремень чтобы отсоединить сервопривод от остальной части механизма, раскручивали до установившихся оборотов, синхронизировали начала сбора данных по Z- каналу ( один импульс на оборот) и потом собирали карту ошибок по принципу RIS ( random interval sampling) т к канал опроса энкодера просто не успевал все сделать за один оборот маховика, поэтому собирали карту за много оборотов, привязав момент сбора данных к таймеру контроллера.

у нас проблема была в том, что фотошаблон для диска энкодера печатали на машине с X-Y координатами, а не полярной системой координат и цифровая интерполяция при печати давала в диагональных секторах 45 градусов ошибки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

32 minutes ago, vervs said:

Но КМК от корявости самой "линейки" f(x) два датчика не помогут

от точности измерений зависит, f(g(x)-d) не совсем то же самое что f(g(x-d)) даже при неизвестном f(x)

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

и по их разнице можно понять в какую сторону g(x) отличается от простого равномерного движения g(x)==x

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

 

1 hour ago, iiv said:

В ней очевидно, что можно при заданном d получить аналитическое решение для каждого pipi, потом его туда подставить и найти d.

на самом деле надо найти \( f(g_i) \) так как это не совсем синус, а с локальными косяками в виде иногда меняющейся амплитуды/фазы/частоты, то есть ещё и нельзя расчитывать на его периодичность

при том что истинные значения \( g_i \) неизвестны, их надо вытащить из \(f_i\) и \(h_i\)

но при известном d, собственно это единственное что здесь можно отдельно точно измерить, поездив по другой эталонной линейке с дополнительной калибровкой истинного положения обоих датчиков интерферометром

 

1 hour ago, iiv said:

PS: в аналогичных задачах, что мне попадались, при сдвиге на d у меня другой сенсор измерял немного с отличным коэффициентом (интенсивностью), а у вас это надо учитывать? Если да, там все также, только формулы немного сложнее получаются.

датичики калибруются отдельно, так что их можно считать идеальными и абсолютно одинаковыми.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 minutes ago, _pv said:

так как это не совсем синус, а с локальными косяками в виде иногда меняющейся амплитуды/фазы/частоты, то есть ещё и нельзя расчитывать на его периодичность

Тогда метод Прони. Но для этого надобно знать как сильно у вас может скакать g от i до i+1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть основной вопрос - что известно про f - на сколько, например, про нее можно сказать, что f(x), f(x+a), f(x+b) - на равномерной сетке без скачков в g образуют 1-2 ранговую структуру, то есть одно можно через два остальных выразить (это если применить метод Прони)? Или примерно сколько измерений на период в f (это если применить метод compressed sensing)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...