Список форумов Форум @ BelAstro.Net Форум @ BelAstro.Net
Форум белорусской любительской астрономической сети
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   Администрация форумаАдминистрация форума   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Это боги устроили так, что всякий может отнять у нас жизнь, но никто не в состоянии избавить нас от смерти. /Сенека Младший/

Калибровка 3-осного акселерометра

зарегистрированных: 0, скрытых: 0 и гостей: 0
Зарегистрированные пользователи: Нет
Начать новую тему   Ответить на тему    Список форумов Форум @ BelAstro.Net -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Site Admin Deimos
hv
Site Admin

Зарегистрирован: 10.07.2007

Сообщения: 6184
Благодарности: 75



Добавлено: Чт Сен 19, 2013 21:40    Заголовок сообщения: Калибровка 3-осного акселерометра Ответить с цитатой

Было дело, заморачивался задачей калибровки 3-осного акселерометра, имеющего 6 калибровочных параметров: смещения нуля и усиление для каждой оси. Получилась не вполне тривиальная математика, однако успешно работающая.
Сегодня Андрей Прокопович столкнулся с той же задачей, поэтому я решил сделать эту тему как конспект по такой калибровке, описав математику всего процесса.
Приступим.

_________________
Алексей

Профи-диванщик с опытом, есть диплом А4 в рамке.
Вернуться к началу
Deimos сейчас оффлайн  Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Site Admin Deimos
hv
Site Admin

Зарегистрирован: 10.07.2007

Сообщения: 6184
Благодарности: 75



Добавлено: Чт Сен 19, 2013 21:43    Заголовок сообщения: Ответить с цитатой

Постановка задачи.
Требуется найти семейство калибровочных коэффициентов:
\( dX, dY, dZ \) - вектор смещения нуля.
\( sX, sY, sZ \) - коэффициенты усиления.

Исходные данные:
Набор измерений большой длины, содержащий отсчёты, которые обозначим \( (X,Y,Z)_i \), \((X_i, Y_i, Z_i) \). Использовать будем то обозначение, которое будет удобнее в контексте.

_________________
Алексей

Профи-диванщик с опытом, есть диплом А4 в рамке.
Вернуться к началу
Deimos сейчас оффлайн  Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Site Admin Deimos
hv
Site Admin

Зарегистрирован: 10.07.2007

Сообщения: 6184
Благодарности: 75



Добавлено: Чт Сен 19, 2013 21:57    Заголовок сообщения: Ответить с цитатой

Исходя из ортонормированности системы координат \( \displaystyle \left( \vec{e_i}\vec{e_j} = \delta_{ij}\right)\) запишем равенство, справедливое в условиях отсутствия шумов (электронных, оцифровки, квантования и т.п.)
\( \displaystyle \left(sX(X_i + dX)\right)^2 + \left(sY(Y_i + dY)\right)^2 + \left(sY(Y_i + dY)\right)^2 = 1\)
То есть ускорение свободного падения в 1g всегда проецируется на 3 оси с учётом усиления и сдвига нуля.
Коэффициенты усиления зададим так, чтобы ускорение свободного падения получилось единичным, то есть пронормируем их на величину 1g с учётом динамического диапазона датчика. Это надо будет учесть при задании констант в датчике.

Однако каждое измерение содержит шумовую компоненту, что приводит к тому, что возникает шум:
\( \displaystyle \left(sX(X_i + dX)\right)^2 + \left(sY(Y_i + dY)\right)^2 + \left(sZ(Z_i + dZ)\right)^2 = 1 + N_i\)
Или
\( \displaystyle \left(sX(X_i + dX)\right)^2 + \left(sY(Y_i + dY)\right)^2 + \left(sZ(Z_i + dZ)\right)^2 - 1 = N_i\)

Составим выражение для невязки:

\( \displaystyle \Theta = \sum\limits_i N_i^2 = \sum\limits_i \left\{ \left(sX(X_i + dX)\right)^2 + \left(sY(Y_i + dY)\right)^2 + \left(sZ(Z_i + dZ)\right)^2 - 1 \right\}^2 = \sum\limits_i \left\{ sX^2(X_i + dX)^2 + sY^2(Y_i + dY)^2 + sZ^2(Z_i + dZ)^2 - 1 \right\}^2\)

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

_________________
Алексей

Профи-диванщик с опытом, есть диплом А4 в рамке.
Вернуться к началу
Deimos сейчас оффлайн  Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Site Admin Deimos
hv
Site Admin

Зарегистрирован: 10.07.2007

Сообщения: 6184
Благодарности: 75



Добавлено: Чт Сен 19, 2013 22:19    Заголовок сообщения: Ответить с цитатой

\(
\left\{
\begin{aligned}

\frac{\partial\Theta}{\partial dX} &= 0\\
\frac{\partial\Theta}{\partial dY} &= 0\\
\frac{\partial\Theta}{\partial dZ} &= 0\\
\frac{\partial\Theta}{\partial sX^2} &= 0\\
\frac{\partial\Theta}{\partial sY^2} &= 0\\
\frac{\partial\Theta}{\partial sZ^2} &= 0\\

\end{aligned}
\right.
\)

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

Распишем частные производные:
\( \displaystyle \frac{\partial\Theta}{\partial {dX}} = \sum\limits_i \left\{2\cdot\left\{ sX^2(X_i + dX)^2 + sY^2(Y_i + dY)^2 + sZ^2(Z_i + dZ)^2 - 1 \right\} \times sX^2 \times 2\cdot(X_i+dX)\right\} = 0\)
\( \displaystyle \frac{\partial\Theta}{\partial {sX^2}} = \sum\limits_i \left\{2\cdot\left\{ sX^2(X_i + dX)^2 + sY^2(Y_i + dY)^2 + sZ^2(Z_i + dZ)^2 - 1 \right\} (X_i+dX)^2\right\} = 0\)
Аналогично,
\( \displaystyle \frac{\partial\Theta}{\partial {dY}} = \sum\limits_i \left\{2\cdot\left\{ sX^2(X_i + dX)^2 + sY^2(Y_i + dY)^2 + sZ^2(Z_i + dZ)^2 - 1 \right\} \times sY^2 \times 2\cdot(Y_i+dY)\right\} = 0\)
\( \displaystyle \frac{\partial\Theta}{\partial {sY^2}} = \sum\limits_i \left\{2\cdot\left\{ sX^2(X_i + dX)^2 + sY^2(Y_i + dY)^2 + sZ^2(Z_i + dZ)^2 - 1 \right\} (Y_i+dY)^2\right\} = 0\)
и
\( \displaystyle \frac{\partial\Theta}{\partial {dZ}} = \sum\limits_i \left\{2\cdot\left\{ sX^2(X_i + dX)^2 + sY^2(Y_i + dY)^2 + sZ^2(Z_i + dZ)^2 - 1 \right\} \times sZ^2 \times 2\cdot(Z_i+dZ)\right\} = 0\)
\( \displaystyle \frac{\partial\Theta}{\partial {sZ^2}} = \sum\limits_i \left\{2\cdot\left\{ sX^2(X_i + dX)^2 + sY^2(Y_i + dY)^2 + sZ^2(Z_i + dZ)^2 - 1 \right\} (Z_i+dZ)^2\right\} = 0\)

Итого имеем 6 нелинейных уравнений с 6 неизвестными.

Опуская постоянные множители, перепишем
\( \displaystyle \sum\limits_i \left\{ sX^2(X_i + dX)^2 + sY^2(Y_i + dY)^2 + sZ^2(Z_i + dZ)^2 - 1 \right\} (X_i+dX) = 0\)
\( \displaystyle \sum\limits_i \left\{ sX^2(X_i + dX)^2 + sY^2(Y_i + dY)^2 + sZ^2(Z_i + dZ)^2 - 1 \right\} (Y_i+dY) = 0\)
\( \displaystyle \sum\limits_i \left\{ sX^2(X_i + dX)^2 + sY^2(Y_i + dY)^2 + sZ^2(Z_i + dZ)^2 - 1 \right\} (Z_i+dZ) = 0\)

\( \displaystyle \sum\limits_i \left\{ sX^2(X_i + dX)^2 + sY^2(Y_i + dY)^2 + sZ^2(Z_i + dZ)^2 - 1 \right\} (X_i+dX)^2 = 0\)
\( \displaystyle \sum\limits_i \left\{ sX^2(X_i + dX)^2 + sY^2(Y_i + dY)^2 + sZ^2(Z_i + dZ)^2 - 1 \right\} (Y_i+dY)^2 = 0\)
\( \displaystyle \sum\limits_i \left\{ sX^2(X_i + dX)^2 + sY^2(Y_i + dY)^2 + sZ^2(Z_i + dZ)^2 - 1 \right\} (Z_i+dZ)^2 = 0\)

И, очевидно, прямыми методами решить их не выйдет. О способах решения подобных систем уравнений и о методах улучшения результатов я напишу позже.

_________________
Алексей

Профи-диванщик с опытом, есть диплом А4 в рамке.


Последний раз редактировалось: Deimos (Пт Сен 20, 2013 17:04), всего редактировалось 2 раз(а)
Вернуться к началу
Deimos сейчас оффлайн  Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Site Admin Deimos
hv
Site Admin

Зарегистрирован: 10.07.2007

Сообщения: 6184
Благодарности: 75



Добавлено: Пт Сен 20, 2013 16:28    Заголовок сообщения: Ответить с цитатой

Приступим к решению данных уравнений.
Прямого решения не выйдет, поэтому будем решать его итеративно, методом последовательных приближений.
Начальные условия для смещения, очевидно, нулевые, то есть
\( {_{0}dX} = 0,\ {_{0}dY},\ {_{0}dZ} = 0 \)
Для номера итерации я буду применять нижний предваряющий индекс.
Для масштаба начальные условия будут зависеть от того, как мы считаем наши отсчёты \((X,Y,Z)\). Если за ускорение 1g принята единица и мы считаем числа дробными, то масштабные коэффициенты будут равны 1. Если же за 1g принято, скажем, 1024 единицы отсчёта АЦП, то масштабный коэффициент будет равен 1/1024. (Речь о начальном приближении). Впрочем, это не столь важно. В обоих случаях это будет абстрактное \(\displaystyle \ _{0}sX^2 =\ _{0}sY^2 =\ _{0}sZ^2 = \frac{1}{(1g)^2}\), только конкретное численное выражение может отличаться: один и тот же множитель входит в \(sX\) и \(X\), в одном случае в числителе, во втором - в знаменателе, да и не принципиально это.

Теперь надо выбрать итеративный метод, который:
1) Достаточно просто реализовать
2) Быстро сходится
3) Устойчиво сходится

_________________
Алексей

Профи-диванщик с опытом, есть диплом А4 в рамке.


Последний раз редактировалось: Deimos (Пт Сен 20, 2013 20:04), всего редактировалось 1 раз
Вернуться к началу
Deimos сейчас оффлайн  Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Site Admin Deimos
hv
Site Admin

Зарегистрирован: 10.07.2007

Сообщения: 6184
Благодарности: 75



Добавлено: Пт Сен 20, 2013 17:00    Заголовок сообщения: Ответить с цитатой

Тройки уравнений являются линейными по отношению к \(sX, sY, sZ\) и могут решаться прямым методом.
Поскольку первые три имеют более низкие степени по смещению, относительно масштаба будем решать вторую тройку.
Обозначим

\( \displaystyle \ _{k}A_{PP} = \sum\limits_i (P_i + \ _{k}dP)^4 \), где P - одна из координат X,Y,Z.
\( \displaystyle \ _{k}A_{PQ} = \sum\limits_i (P_i + \ _{k}dP)^2(Q_i + \ _{k}dQ)^2 \), где P и Q - пара различных координат X,Y,Z
\( \displaystyle \ _{k}B_{P} = \sum\limits_i (P_i+\ _{k}dP)^2 \), где P - одна из координат X,Y,Z.
Тогда уравнение примет вид
\( \displaystyle
\begin{aligned}
\ _{k}A_{XX}\ _{k+1}sX^2 + \ _{k}A_{YX} \ _{k+1}sY^2 + \ _{k}A_{ZX} \ _{k+1}sZ^2 &= \ _{k}B_{X}; \\
\ _{k}A_{XY}\ _{k+1}sX^2 + \ _{k}A_{YY} \ _{k+1}sY^2 + \ _{k}A_{ZY} \ _{k+1}sZ^2 &= \ _{k}B_{Y}; \\
\ _{k}A_{XZ}\ _{k+1}sX^2 + \ _{k}A_{YZ}\ _{k+1}sY^2 + \ _{k}A_{ZZ} \ _{k+1}sZ^2 &= \ _{k}B_{Z}. \\
\end{aligned}
\)
Обратим внимание, что матрица \(||_{k}A||\) симметрична.
Решаем систему уравнений методом Крамера (можно любым другим, в принципе):
\( \displaystyle
\Delta = A_{XX} A_{YY} A_{ZZ} + A_{ZX} A_{XY} A_{YZ} + A_{XZ} A_{ZY} A_{YX} - A_{XZ} A_{YY} A_{ZX} - A_{XX} A_{ZY} A_{YZ} - A_{ZZ} A_{XY} A_{YX}; \\
\Delta_X = B_{X} A_{YY} A_{ZZ} + A_{ZX} B_{Y} A_{YZ} + B_{X} A_{ZY} A_{YX} - B_{Z} A_{YY} A_{ZX} - B_{X} A_{ZY} A_{YZ} - A_{ZZ} B_{Y} A_{YX}; \\
\Delta_Y = A_{XX} B_{Y} A_{ZZ} + A_{ZX} A_{XY} B_{Z} + A_{XZ} A_{ZY} B_{X} - A_{XZ} B_{Y} A_{ZX} - A_{XX} A_{ZY} B_{Z} - A_{ZZ} A_{XY} B_{X}; \\
\Delta_Z = A_{XX} A_{YY} B_{Z} + B_{Z} A_{XY} A_{YZ} + A_{XZ} B_{Y} A_{YX} - A_{XZ} A_{YY} B_{X} - A_{XX} B_{Y} A_{YZ} - B_{Z} A_{XY} A_{YX}.
\)

\( \displaystyle
\begin{aligned}
\ _{k+1}sX^2 &= \frac{\Delta_X}{\Delta}; \\
\ _{k+1}sY^2 &= \frac{\Delta_Y}{\Delta}; \\
\ _{k+1}sZ^2 &= \frac{\Delta_Z}{\Delta}. \\
\end{aligned}
\)

_________________
Алексей

Профи-диванщик с опытом, есть диплом А4 в рамке.
Вернуться к началу
Deimos сейчас оффлайн  Посмотреть профиль Отправить личное сообщение Посетить сайт автора
aeromash
ЛА

Зарегистрирован: 03.01.2009

Сообщения: 2833
Благодарности: 108



Добавлено: Чт Окт 03, 2013 13:05    Заголовок сообщения: Ответить с цитатой

Красива! Вычисленные статические и динамические коэффициенты осей - это конечно хорошо. Но в формулах не вижу ,как минимум температурного коэффициента. Коим в основном и порождается статический сдвиг по осям и изменение угла наклона (усиления). Как ни крути, а напильник и молоток все равно понадобится для калибровки. Very Happy И еще вопрос, куда это мона всунуть?
_________________
Когда на свет появляется истинный гений, то узнать его можно хотя бы потому, что все тупоголовые объединяются в борьбе против него. Дж. Свифт
Хочу шапку Перельмана, жилетку Вассермана и ботинки Эйнштейна!
(SKYPE - yuri.rabishko, МТС - +375-29-7518860 Юрий Рабышко)
"Все пришельцы в Россию будут гибнуть под Смоленском" - фильм "Формула любви"
Вернуться к началу
aeromash сейчас оффлайн  Посмотреть профиль Отправить личное сообщение [hidden] Посетить сайт автора
Andrey Prokopovich
ЛА

Зарегистрирован: 29.11.2007

Сообщения: 3423
Благодарности: 209



Добавлено: Пт Окт 04, 2013 00:36    Заголовок сообщения: Ответить с цитатой

Цитата:
И еще вопрос, куда это мона всунуть?

Формулы или акселерометр?

_________________
©Но что-то, кажется, идет не так...
Вернуться к началу
Andrey Prokopovich сейчас оффлайн  Посмотреть профиль Отправить личное сообщение [hidden] Посетить сайт автора
aeromash
ЛА

Зарегистрирован: 03.01.2009

Сообщения: 2833
Благодарности: 108



Добавлено: Пт Окт 04, 2013 22:28    Заголовок сообщения: Ответить с цитатой

Формулы в какой акселерометр?
_________________
Когда на свет появляется истинный гений, то узнать его можно хотя бы потому, что все тупоголовые объединяются в борьбе против него. Дж. Свифт
Хочу шапку Перельмана, жилетку Вассермана и ботинки Эйнштейна!
(SKYPE - yuri.rabishko, МТС - +375-29-7518860 Юрий Рабышко)
"Все пришельцы в Россию будут гибнуть под Смоленском" - фильм "Формула любви"
Вернуться к началу
aeromash сейчас оффлайн  Посмотреть профиль Отправить личное сообщение [hidden] Посетить сайт автора
aeromash
ЛА

Зарегистрирован: 03.01.2009

Сообщения: 2833
Благодарности: 108



Добавлено: Пт Окт 04, 2013 22:30    Заголовок сообщения: Ответить с цитатой

Иначе это это как то непонятно все выглядит, особенно для человека с напильником. Wink
_________________
Когда на свет появляется истинный гений, то узнать его можно хотя бы потому, что все тупоголовые объединяются в борьбе против него. Дж. Свифт
Хочу шапку Перельмана, жилетку Вассермана и ботинки Эйнштейна!
(SKYPE - yuri.rabishko, МТС - +375-29-7518860 Юрий Рабышко)
"Все пришельцы в Россию будут гибнуть под Смоленском" - фильм "Формула любви"
Вернуться к началу
aeromash сейчас оффлайн  Посмотреть профиль Отправить личное сообщение [hidden] Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Форум @ BelAstro.Net -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

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


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB