Comments (3)
Hi, I changed the sensor from 'Sensor.TYPE_ROTATION_VECTOR' to 'Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR', which eliminates the use of gyroscope compared to the former counterpart.
Something interesting ensues after that. The jiggle problem becomes worse (if I put the phone on a flat table, it never stops jiggling in 1-2 degrees). By contrast, the slow response almost disappears.
This confirms part of my previous assumptions, where we should blame the issues partly to the sensor fusion. I don't know the internal realisation of the software sensors by Android (perhaps some Kalman Filters or AHRS), but I assume that there's always a tradeoff - one must sacrifice one thing to attain another thing.
Any comments are appreciated.
from compass.
Hi, thanks for the nice words about the app!
With the current TYPE_ROTATION_VECTOR sensor the SDK takes care of everything. So the result is only as good as the implementation, your devices hardware and the factory calibration. I have seen big differences across my own test devices. Unfortunatly I don't have many devices for testing.
When I started with the app I tried to filter the values myself Older version.
I used the TYPE_ACCELEROMETER and TYPE_MAGNETIC_FIELD in combination with a low pass filter. I also tried out some more filtering to improve the result. But it was either unstable or unresponsive. As you said there is always a tradeoff. So I gave up this approach and I now rely on the TYPE_ROTATION_VECTOR which produces a better result then I can do.
If you want to experiment a little bit more and try out your own filtering you can now have a look at uncalibrated filters like TYPE_MAGNETIC_FIELD_UNCALIBRATED:
Note: Uncalibrated sensors provide more raw results and may include some bias, but their measurements contain fewer jumps from corrections applied through calibration. Some applications may prefer these uncalibrated results as smoother and more reliable. For instance, if an application is attempting to conduct its own sensor fusion, introducing calibrations can actually distort results.
from compass.
Thank you for the reply! The information you provided is absolutely helpful! I agree that the result should rely on the specific devices.
I agree that it's wise to use Android SDK methods, although it's not likely that they'll bring about superb performance on each individual device (not like Apple who only has a few phone models). Maybe implementing the whole thing from scratch can potentially have somewhat better performance, but I doubt it requires much effort.
Again, thank you for your excellent contribution!
from compass.
Related Issues (20)
- Option to change color of the app icon HOT 2
- Align Ok button on default error pop up to center HOT 2
- Nicer UI HOT 1
- Add to Readme what translations this app has HOT 1
- Add option to settings to change the language of the app HOT 3
- Create Weblate/Crowdin account for translating HOT 1
- Github, not Git Hub HOT 2
- Default name for Day and Night mode is Light And Dark mode HOT 1
- [DOCS] Add Translations (+Per-app language preferences) to Feature section in the Readme HOT 2
- Keeps "waiting for location" after enabling geographic north HOT 5
- add support for screen reader (google talk back) HOT 1
- Add a home screen widget HOT 1
- Add a language HOT 8
- Change repository details Description HOT 3
- [BUG] Haptic feedback doesnt vibrate HOT 3
- Spanish translation HOT 3
- UI HOT 1
- [Feature] Add Level HOT 3
- Show location and altitude. HOT 1
- Danish translation HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from compass.