Программа для калибровки магнитометра
Oct. 26th, 2021 06:32 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Используется алгоритм МНК для подгонки эллипсоида, то же, что и почившая в бозе https://web.archive.org/web/20201019170034/https://sites.google.com/site/sailboatinstruments1/home программа magneto*, только переписанная на Лазарусе и более удобная для применения.
https://yadi.sk/d/MBuhWR_B_lgxsw
Параметры соединения задаются в файле connect.ini. При нажатии на кнопку "сбор данных->начать" надо крутить магнитометр до тех пор, пока его показания не образуют более-менее эллипсовидное облако точек -

Параметр "делитель" - это на сколько будут поделены сырые данные с магнитометра прежде чем отобразиться на графиках и претерпеть обработку**.
По нажатии кнопки "обработка данных->рассчитать" будет построена матрица трансформации и вектор сдвига. По нажатии кнопки "обработка данных->проверить" снятые данные претерпят аффинное преобразование от этих параметров и проиллюстрируются -

Матрица и вектор будут отображены на вкладке "результат" -

Для того, чтобы не колупаться, переводя эти значения в текст скетча, я сделал его создание. Есть два файла, header.txt и end.txt. Текст скетча создается сначала из текста файла header.txt, далее код, который описывает матрицу и вектор, далее текст файла end.txt, и сохраняется все в файле, поименованном в тестовом поле "имя файла"

Например, строки 1-2 принадлежат файлу header.txt, далее сгенерированный текст, строки 9-25 принадлежат файлу end.txt
______________
* Сохраненная копия этой программы лежит здесь - https://wunderwaffe.dreamwidth.org/30898.html
** Для магнитометра с платы Troyka удобно использовать 6842 - тогда магнитометр по умолчанию будет выдавать значения в гауссах -
// Sensor sensitivity depending on selectable full scales
// Use the datasheet for details
constexpr float SENS_4GAUSS = 6842;
(с) Compass.h (там, кстати, ошибка в библиотеке - https://wunderwaffe.dreamwidth.org/31713.html)
https://yadi.sk/d/MBuhWR_B_lgxsw
Параметры соединения задаются в файле connect.ini. При нажатии на кнопку "сбор данных->начать" надо крутить магнитометр до тех пор, пока его показания не образуют более-менее эллипсовидное облако точек -

Параметр "делитель" - это на сколько будут поделены сырые данные с магнитометра прежде чем отобразиться на графиках и претерпеть обработку**.
По нажатии кнопки "обработка данных->рассчитать" будет построена матрица трансформации и вектор сдвига. По нажатии кнопки "обработка данных->проверить" снятые данные претерпят аффинное преобразование от этих параметров и проиллюстрируются -

Матрица и вектор будут отображены на вкладке "результат" -

Для того, чтобы не колупаться, переводя эти значения в текст скетча, я сделал его создание. Есть два файла, header.txt и end.txt. Текст скетча создается сначала из текста файла header.txt, далее код, который описывает матрицу и вектор, далее текст файла end.txt, и сохраняется все в файле, поименованном в тестовом поле "имя файла"

Например, строки 1-2 принадлежат файлу header.txt, далее сгенерированный текст, строки 9-25 принадлежат файлу end.txt
______________
* Сохраненная копия этой программы лежит здесь - https://wunderwaffe.dreamwidth.org/30898.html
** Для магнитометра с платы Troyka удобно использовать 6842 - тогда магнитометр по умолчанию будет выдавать значения в гауссах -
// Sensor sensitivity depending on selectable full scales
// Use the datasheet for details
constexpr float SENS_4GAUSS = 6842;
(с) Compass.h (там, кстати, ошибка в библиотеке - https://wunderwaffe.dreamwidth.org/31713.html)
Версия 2
Date: 2022-05-30 09:54 am (UTC)Начало и конец скетча лежат здесь -
data/header_eeprom.txt
data/end_eeprom.txt
Результат записывается в директорию result
Аналогично с генерацией файла, использующего матрицу и смещение, которые сохраняются туда же.
Пример скетча, считывающего данные с EEPROM -
https://disk.yandex.ru/d/M1LdORyFHFXr2g