Als je wilt bepalen in wat voor stand het voorwerp zich bevindt ten opzichte van de zwaartekracht, kun je de waarden van drie versnellingssensoren gebruiken. Als je een versnellingsensor op een voorwerp (bijvoorbeeld een robot) vastmaakt om metingen te doen zul je vaak niet alleen de bedoelde bewegingen meten maar ook bijvoorbeeld trillingen. En die ruis kunnen het meetresultaat behoorlijk verstoren. Om meer nauwkeurig de stand van het object te bepalen kun je daarnaast gebruik maken van een gyroscoop. Die heeft echter weer een ander nadeel: drift.
Drift ontstaat omdat de gyroscoop geen continue waarde meet maar werkt met een eindig aantal snel na elkaar genomen waarden. Door deze benadering ontstaan er fouten. Wanneer de gegevens van de gyroscoop sneller veranderen dan de snelheid waarmee de waarden gemeten worden zullen we de fouten niet detecteren. Dit wordt drift genoemd omdat de grootte van de fout toeneemt in de tijd. Het resultaat is dan dat de sensormeting niet terugkeert naar 0 in de rustpositie. Kortom, de gyroscoop gegevens zijn alleen betrouwbaar op korte termijn omdat deze op de lange termijn door de drift gaan afwijken.
Door de meetwaarden van de versnellingssensor en de gyroscoop te combineren kun je dus de nauwkeurigheid vergroten. Het combineren van die waarden doe je met een zogenaamd filter.
Je kunt bijvoorbeeld gebruik maken van het Kalman filter. Maar die is erg ingewikkeld, lastig te implementeren en bovendien heb je er een behoorlijk krachtige processor voor nodig. Een eenvoudiger oplossing is het complementaire filter. Het complementaire filter combineert de gegevens van zowel de versnellingsmeter en de gyroscoop. Op de korte termijn gebruiken we de gegevens van de gyroscoop, omdat deze zeer precies is en niet gevoelig is voor externe krachten. Op de lange termijn gebruiken we de gegevens van de versnellingsmeter omdat deze geen last heeft van drift.
In zijn meest eenvoudige vorm ziet het filter er als volgt uit:
nieuwe hoek = 0,98 * (vorige hoek + gyroscoopGegevens*dt) + 0,02 * versnellingsmeterGegevens
De gyroscoop gegevens worden op elk tijdsinterval geïntegreerd met de huidige hoekwaarde. Hierna wordt het gecombineerd met de lange termijn data van de accelerometer (al verwerkt met arctan2). De constanten (0,98 en 0,02) moeten samen 1 zijn maar kunnen worden gewijzigd om het filter juist af te stemmen.
Meer uitleg is op het internet te vinden, bijvoorbeeld ook hier.
Een vergelijking tussen het Kalman filter en het complementaire filter vind je hier.