Полагаю, вы имеете в виду магнитометр внутри Героя.
Каллибровка - это сложная задача, и она всегда будет требовать взаимодействия с пользователем для надежной калибровки.Есть отдельные стратегии, чтобы справиться с этим.Вы можете попросить пользователей удерживать там устройство в северном направлении, а затем повторно калибровать.Если пользователи не знают, где находится север, вы можете попросить их направить устройство к солнцу, и на основе местоположения и времени вы можете рассчитать, где это находится.
Если оставить калибровку в стороне, я думаю, что вашапроблема в том, что показания, которые вы получаете от датчика, являются неточными.Конечно, калибровка является необходимым условием для точных показаний, но есть и другие факторы в игре.
Обычной практикой является добавление данных датчика с одного датчика данными другого датчика для повышения точности.Вы можете использовать GPS, чтобы определить курс, когда пользователь движется.Однако, если он движется медленно, это тоже неточно.Вы можете интегрировать данные, сообщаемые акселерометром, чтобы угадать об изменениях ориентации (а не об абсолютной ориентации).Но, честно говоря, гирометр в этом случае был бы более идеальным.
Системы, которые работают подобным образом, иногда называют Инерциальные навигационные системы (INS), потому что они могут, учитывая фиксированную точку в пространстве, определятьих последующее относительное положение и ориентация точно без дополнительных внешних данных.Использование фильтра Калмана является обычной практикой для периодической повторной калибровки системы, когда доступна абсолютная позиция (например, полученная с помощью GPS).
Хотя реализовать полноценную ИНС нереально, вы, конечно, можете нарисоватьнесколько идей о том, как они работают, чтобы сделать ваши ориентационные показания более точными.