Когда ветеран исследования, Ноам Шазир, увидел ранний вариант работы, он был удивлён, что его имя стоит первым, что говорит о том, что его вклад был первостепенным.
А мне часто публикующиеся рассказывали, что настоящий автор либо на первом, либо на последнем месте (чаще всего). Потому что на первое место часто ставят всякое нахрен не нужное начальство, которое страшно хочет быть в публикации, но делать ничего не делало для исследования.
Обычно, все эти задачи решают микроконтроллеры устройств. У них и быстродействие не очень, да и памяти мало. Причём , решают непрерывно. И ещё фильтр довольно быстро перестроится, если поменяется расположение магнитных объектов вокруг магнитометра (на судне, например, сгрузили грузовой контейнер), а вот МНК так не сможет автоматически. Нужно сбрасывать накопленный массив данных и запускать калибровку заново.
Кстати, для апостериорной обработки можно решить ту же задачу с помощью МНК. Единственно, точек будет много и решать такую систему довольно затратно. Фильтр же позволяет делать корректировку прямо во время движения объекта.
Так. Погодите-ка. Я только что такую плату на 9250 вчера получил. И вчера попытался впервые её опросить по SPI. Может, я неправильно опрашиваю магнитометр, но только данных я нифига не получил (принимаются застывшие биты). Я вообще думал, сама 9250 внутри с магнитометром. И он там этот самый аналог AK8963. И я как-то не догадывался, что в 9250 внутри меняют схемотехнику. Отвратительно.
Есть. Только это будет просто экспериментальная программа. Буквально на попробовать. Я такое даже на свой гитхаб класть не хочу. Но все операции с матрицами там есть.
Магнитомягкие материалы постоянно добавляют свой вектор магнитного поля, совпадающий с полем Земли+поле магнитотвёрдого материала около них+поле другого магнитомягкого материала около них, причём, эти магнитомягкие материалы находятся где-то сбоку от магнитометра (но вращаются вместе с ним), и поэтому результирующий вектор, действующий на магнитометр получается как сумма всех этих векторов. Вот если бы магнитомягкие материалы находились бы внутри магнитометра, тогда никакого искажения не было бы.
Наверное, вы имели в виду двумерный вектор, а не одномерный? Магнитометр в приборе вовсе не всегда будет находиться в плоскости горизонта, поэтому используются все три координаты.
Анизотропия влиять на направление будет. Если бы она не влияла, матрица W осталась бы единичной.
Нет, всё равно не работает правильно. Причина в матрице H у китайцев.
Что-то тут не то. Потому что на следующем шаге надо от измеренных показаний отнимать вот этот вектор D и получать ошибку. И эта ошибка будет неверная. Всё из-за удвоения произведения W*B. Вся проблема в матрице H - она должна отражать взаимосвязь датчиков, но получилось так, что в неё входят сами текущие показания датчиков.
Придумал сделать так. Wk/k-1 сделать единичной в матрице Hk. Это даст Bпоказаний=Bистинное*I+Bистинное*Wk/k-1+Vk (здесь Wk/k-1 - элементы матрицы Xk/k-1!). То есть, показания есть истинные показания+смещённые от истинных за счёт магнитомягких материалов+смещения нуля. Тогда фильтр подбирает эти самые смещения (Wk/k-1 и Vk). Тогда чтобы получить истинный результат из показаний прибора, нужно Bистинное=(Wk+I)^-1x(Bпоказаний-Vk). Вроде бы работает (пока без имитации магнитомягких материалов). До этого вообще не сходился никак. Завтра добавлю имитацию магнитомягких материалов и проверю точнее.
В чём проблема? Вот тут есть вектор состояния Xk. В него входят показания магнитометров (Bc,kT), шесть элементов матрицы компенсации магнитомягких материалов (она симметричная) Wk и вектор смещений показаний магнитометров Vk.
Здесь получается прогнозный вектор состояния Xk/k-1. И всё бы ничего, но вот взаимосвязь Xk/k-1 с показаниями реального магнитометра осуществляется через матрицу Hk.
А она делается так:
И вот тут непонятно. Wk/k-1 - это элементы матрицы Xk/k-1? Но тогда получается, что H*Xk/k-1 - показания реального магнитометра - получается после раскрытия выражения как Wk/k-1xBc,kT+Wk/k-1*Bc,kT+Vk !!! То есть, тут по сути-то 2*Wk/k-1xBc,kT-V. И фильтр нихрена не сходится. И что это за физическая компенсация магнитомягкого материала такая? Где-то ошибка в матрице Hk у меня. Но где? Что я неверно сделал?
Уже из этого ограничения вытекают проблемы. Кажется что 1/60 секунды - это довольно маленькое время (17 миллисекунд, если быть точным), однако в мире физики может случиться многое. Например, пуля, летящая сквозь тонкую стенку. Один кадр она с одной стороны стенки, а следующий кадр уже с другой. С точки зрения дискретной физики между ними не было контакта и пуля летит дальше.
Справедливости ради обычно пули так в играх не делают, применяют трассировку луча. Или используют другие подходы в обнаружении столкновений (об этом позже).
я там не припомню. Стало быть, автор добавил апостериорно после моего вопроса.
Теперь, когда тела заняли свои новые позиции, нужно проверить не столкнулись ли они.
А как быть, если объект, например, пуля. И за 1/60 на позициях пули ни до, ни после интервала времени столкновения как бы и нет. Но в промежутке-то оно было - там стена стоит.
А мне часто публикующиеся рассказывали, что настоящий автор либо на первом, либо на последнем месте (чаще всего). Потому что на первое место часто ставят всякое нахрен не нужное начальство, которое страшно хочет быть в публикации, но делать ничего не делало для исследования.
А может и не подавать. Да и вообще, странное решение для управления пищалкой брать PNP транзистор с вывернутым включением.
Я бы, кстати, на месте китайцев повторитель бы и поставил. И избавился от двух резисторов - экономия как-никак.
А это от логики работы P21 зависит. Если он на земле лежит, то писка не будет. Единственно, R44 для эмиттерного повторителя лишний.
А не тип транзистора (NPN)? Тогда получится эмиттерный повторитель.
Обычно, все эти задачи решают микроконтроллеры устройств. У них и быстродействие не очень, да и памяти мало. Причём , решают непрерывно. И ещё фильтр довольно быстро перестроится, если поменяется расположение магнитных объектов вокруг магнитометра (на судне, например, сгрузили грузовой контейнер), а вот МНК так не сможет автоматически. Нужно сбрасывать накопленный массив данных и запускать калибровку заново.
Кстати, для апостериорной обработки можно решить ту же задачу с помощью МНК. Единственно, точек будет много и решать такую систему довольно затратно. Фильтр же позволяет делать корректировку прямо во время движения объекта.
У меня пришла перемаркировання MPU6500. Регистр WHOAMI выдаёт 0x70. Магнитометра там, ожидаемо, нет.
Так. Погодите-ка. Я только что такую плату на 9250 вчера получил. И вчера попытался впервые её опросить по SPI. Может, я неправильно опрашиваю магнитометр, но только данных я нифига не получил (принимаются застывшие биты). Я вообще думал, сама 9250 внутри с магнитометром. И он там этот самый аналог AK8963. И я как-то не догадывался, что в 9250 внутри меняют схемотехнику. Отвратительно.
А она может и не решиться. Шумы измерений не позволят.
Есть. Только это будет просто экспериментальная программа. Буквально на попробовать. Я такое даже на свой гитхаб класть не хочу. Но все операции с матрицами там есть.
Вот она.
Магнитомягкие материалы постоянно добавляют свой вектор магнитного поля, совпадающий с полем Земли+поле магнитотвёрдого материала около них+поле другого магнитомягкого материала около них, причём, эти магнитомягкие материалы находятся где-то сбоку от магнитометра (но вращаются вместе с ним), и поэтому результирующий вектор, действующий на магнитометр получается как сумма всех этих векторов. Вот если бы магнитомягкие материалы находились бы внутри магнитометра, тогда никакого искажения не было бы.
Наверное, вы имели в виду двумерный вектор, а не одномерный? Магнитометр в приборе вовсе не всегда будет находиться в плоскости горизонта, поэтому используются все три координаты.
Анизотропия влиять на направление будет. Если бы она не влияла, матрица W осталась бы единичной.
Ступил. :) Исправлю.
А RFID-метку вживить/на ошейник не было бы проще?
Нет, всё равно не работает правильно.
Причина в матрице H у китайцев.
Что-то тут не то. Потому что на следующем шаге надо от измеренных показаний отнимать вот этот вектор D и получать ошибку. И эта ошибка будет неверная. Всё из-за удвоения произведения W*B. Вся проблема в матрице H - она должна отражать взаимосвязь датчиков, но получилось так, что в неё входят сами текущие показания датчиков.
Придумал сделать так. Wk/k-1 сделать единичной в матрице Hk. Это даст Bпоказаний=Bистинное*I+Bистинное*Wk/k-1+Vk (здесь Wk/k-1 - элементы матрицы Xk/k-1!). То есть, показания есть истинные показания+смещённые от истинных за счёт магнитомягких материалов+смещения нуля. Тогда фильтр подбирает эти самые смещения (Wk/k-1 и Vk). Тогда чтобы получить истинный результат из показаний прибора, нужно Bистинное=(Wk+I)^-1x(Bпоказаний-Vk). Вроде бы работает (пока без имитации магнитомягких материалов). До этого вообще не сходился никак. Завтра добавлю имитацию магнитомягких материалов и проверю точнее.
Основной фрагмент кода
Пробую сделать фильтр с компенсацией магнитомягких материалов.
Вот тут есть статья: https://iopscience.iop.org/article/10.1088/1742-6596/1627/1/012028/pdf
В чём проблема? Вот тут есть вектор состояния Xk. В него входят показания магнитометров (Bc,kT), шесть элементов матрицы компенсации магнитомягких материалов (она симметричная) Wk и вектор смещений показаний магнитометров Vk.
Здесь получается прогнозный вектор состояния Xk/k-1. И всё бы ничего, но вот взаимосвязь Xk/k-1 с показаниями реального магнитометра осуществляется через матрицу Hk.
А она делается так:
И вот тут непонятно. Wk/k-1 - это элементы матрицы Xk/k-1? Но тогда получается, что H*Xk/k-1 - показания реального магнитометра - получается после раскрытия выражения как Wk/k-1xBc,kT+Wk/k-1*Bc,kT+Vk !!! То есть, тут по сути-то 2*Wk/k-1xBc,kT-V. И фильтр нихрена не сходится. И что это за физическая компенсация магнитомягкого материала такая? Где-то ошибка в матрице Hk у меня. Но где? Что я неверно сделал?
Отвечу сам себе. Матрицу Q выбросил. А матрицу R взял отсюда. https://habr.com/ru/articles/491476/
Я-то статью читал. Только вот фрагмента
я там не припомню. Стало быть, автор добавил апостериорно после моего вопроса.
А как быть, если объект, например, пуля. И за 1/60 на позициях пули ни до, ни после интервала времени столкновения как бы и нет. Но в промежутке-то оно было - там стена стоит.