На самом деле, первым моим желанием было написать не кренометр, а акселерометр, что бы замерять ускорение с места, с 0 до 100 км/ч.
Дело в том, что пару лет назад (о, как время-то летит) я прикупил себе маленький кроссовер, Tiguan. А автопроизводители, как известно, барыги жадные, вовсю используют ценовую дискриминацию для того, что бы максимизировать прибыль. Например, за порт USB в мультимедиа-системы некоторые просят доплатить 10 тыс. рублей или больше.
Или за форсирование двигателя просят несколько сотен тысяч рублей. Ну, то есть физически двигатель один и тот же, меняется только константы в блоке управления (может быть, и сам алгоритм в каких-то случаях, но мне известно только про данные). Разница в мощности одного и того же дефорсированного двигателя и его самой мощной модификации может составлять в районе сотни л.с., а разница в ценнике - в несколько сотен тысяч рублей. Это вот как раз мой случай.
Ну, а коли изменение параметров двигателя меняется так легко, то (спрос рождает предложение) появились мелкие конторки, которые за гораздо меньшую сумму, чем автопроизводитель, меняют прошивку в блоке управления двигателем на более мощную. Естественно, именно так я и поступил.
Не менее естественно, мне было интересно, реально ли были внесены изменения в прошивку или я заплатил деньги за воздух? Проще всего проверить это можно, замерив разгон до 100 км/ч. Если разгон занял меньше времени, чем по заводским характеристикам, значит, прошивка прошла успешно.
Понятно, что первым делом я выполнил такой замер, правда, вручную. Ручной замер показал, что прошивка прошла удачно. Одновременно с этим (банально, да?), выяснилось, что вручную замерять очень не удобно, соответственно, страдает точность измерений. Захотелось написать программку для замера ускорения, но так получилось, что сначала я сделал кренометр.
Но оно и к лучшему. Дело в том, что пользуясь калибровочной информацией кренометра можно очень точно получить информацию о момента начала заезда. Это можно сделать, во-первых, автоматически, а во-вторых, гораздо точнее, чем при использовании данных GPS.
Вот один из последних результатов, полученных при проверке готовой версии:
По-моему, неплохой результат, с учетом того, что он был получен на зимней шипованной резине при температуре +8 и на мокром асфальте. Заводские данные для дефорсированного мотора - 9.9 сек. Летом повторю заезд в сухих условиях и на нормальной резине. По идее, должен выехать из 8.5 сек, так это время соответствует 200 л.с., а у меня, теоретически, должно быть 239.
Теперь об особенностях разработки акселерометра. Основная проблема - получение точных данных. Несколько моментов:
1. GPS координаты могут быть очень неточны. Например, в условиях плотной застройки точность может быть около 5 м. Это значит, что с вероятность 68% реальное местонахождение находится в окружности радиусом 5 м вокруг переданных системой GPS координат. И с вероятностью 32%, что за пределами этого радиуса. Максимальная точность, что удавалось мне получить на моем смартфоне - 2 м. И если для больших скоростей (и больших перемещений за единицу времени) такая погрешность относительно не высока, то для медленных перемещений может приводить к совершенно не корректным результатам.
Вертикальная точность может быть еще хуже. Например, при отладке приложения я прошел пешком около 20-30 минут, от Октябрьского по Дружбе до Тольятти и далее в сторону Кирова. Так данные GPS показали, что за это время по высоте я переместился на несколько сотен метров, хотя реальный перепад высот не превышает и 10 метров.
Но в этом отношении есть и хорошая новость. С 2018 года некоторые смартфоны будут оснащаться новыми GPS-приемниками, которые принимают сигнал L-5, что повысить точность даже в условиях плотной застройки до нескольких десятков сантиметров.
2. Частота опроса GPS-приемника у большинства смартфонов не превышает 1 Гц. Для замера ускорения достаточно медленных машин, с разгоном более 10 сек. проблем тут особых нет. А вот если разгон занимает меньше 5-6 сек, то точность уже оставляет желать лучшего. Попытался найти смартфоны, которые могут возвращать данные GPS чаще, но найти их не смог. Но знаю, что есть профессиональные GPS-приемники, которые выдают сигнал 5 и 10 раз в секунду. Их периодичности будет вполне достаточно для автомобильного акселерометра даже в случае спортивного автомобиля.
Для более точного определения скорости я сначала планировал аппроксимировать траекторию автомобиля с помощью полинома. У меня есть серьезные основания полагать, что такой подход даст более точные результаты. Однако он усложняет автоматическое определение завершение заезда и повышает требование к торможение.
Поэтому пока остановился на самой простой схеме. Скорость определяется по левым производным по узлам траектории, а точное значение в заданных точка (40, 60, 80, 90, 100, 200 км/ч) - линейным приближением между рассчитанными скоростями в узлах.
Может быть, имеет смысл перейти на центральные производные, вроде бы у них меньше погрешность. Однако не понятно, даст ли это существенное улучшение при столь крупном шаге по времени.

Про GPS ничего сказать не могу, не экспериментировал с ним, а вот с неразумными ценами на элементарные улучшения абсолютно согласен. Скажем в нашем минивэне есть 10 разных регулировок водительского сидения, все из них по кнопкам, но вот память положения и автоматическая подстройка по ключу водителя, увы только в следующей комплектации... Хонда, вы все уже сделали, ну не жадничайте и включите все сразу :)))
ОтветитьУдалить