Пришло время поговорить о том, как я обрабатывал данные с датчиков телефона. Не буду тянуть резину и скажу сразу — время круга мне посчитать не удалось. Но тем не менее, мне хочется немного углубиться в то, что именно я делал.
Первый способ которым не удалось посчитать время круга — это через восстановление траектории движения. Это не было для меня сюрпризом, так как с датчиков я получаю ускорение, а это вторая производная от перемещения в пространстве. Т.е. сначала нужно интегрированием восстановить скорость с накоплением ошибки, а потом, проинтегрировав скорость, восстановить координату. Никаких сюрпризов — получилась полная хрень.
Но был и второй способ, в который я верил сильно больше. Дело в том, что картинговая трасса в Пафосе не плоская, а значит на ней есть самая высокая и низкая точки. То есть чтобы узнать время круга достаточно найти время между прохождением через самые высокие или самые низкие точки. Да, это будет не точно то же самое время круга, которое мы получили бы, если бы мерили от стартовой линии, но достаточно неплохое приближение к нему. И свой прогресс по нему точно можно будет отслеживать.
Когда я понял этот хак, в список датчиков, логи с которых должно собирать приложение, я добавил датчик давления. Но, несмотря на то, что я подписался на получение давления каждую миллисекунду, в логе появилась только одна новая строчка:
Data Source: Pressure
То есть Андроид дал мне подписаться на показания, но самого датчика в телефоне не оказалось. Пришлось вернуться к интегрированию ускорений, но на этот раз мне достаточно было найти точки изменения знака у вертикальной скорости. То есть вместо двух интегрирований задача свелась к одному. Увы, это снова ни к чему не привело. На графики скоростей в течение заезда по разным осям можно посмотрять на прикрепленной картинке. И ни одна из скоростей не переходит через ноль с похожей на время круга периодичностью.
При дальнейшем анализе я понял свою главную ошибку. Я тупо брал данные акселерометра, а надо было сначала их сметчить с компасом и гироскопом, чтобы ускорение по оси Z было действительно вертикальным ускорением, а не ускорением вдоль вертикальной оси телефона. Но быстрых ответов, какие взять библиотеки, чтобы сделать этот
sensor fusion в пару вызовов функций, ChatGPT мне не подсказал. Стало понятно, что обработка данных с датчиков телефона — это само по себе интересный проект на месяц.
Буду ли я брать такой проект на следующий месяц? Точно нет. После постов про этот проект ко мне в личку пришли друзья и накидали гоночных приложений, которые решают эту задачу с помощью GPS. И только в этот момент я вспомнил, то, о чем писал в прошлом посте. В Москве я катался в крытом картинге и ни на какой GPS рассчитывать не мог, а значит и те приложения для меня не работали. Сейчас же они отлично отвечают на вопрос — какое у меня время круга. А значит решение, которое я смогу найти, никакой дополнительно ценности не принесёт. Так что мы с ChatGPT пока пойдём порешаем другие задачи!