Repository navigation
Conversation
Make the 18-state EKF initialize safely on the first iOS IMU sample, use tilt-compensated mag heading in NED, keep mag/rest state on the instance, and stop rest/ZUPT from sticking or refusing to recover. GPS is 6x6 with a gross-outlier gate; baro is rate-limited; packaging ships fusionml and the WMM header. Co-authored-by: Darren Yeates <darren@sensorworks.co.uk>
Drive the filter like iOS (60 Hz IMU, GPS frozen between 1 Hz / 5 Hz fixes, dt=0 first sample). Cover desk rest, handheld ZUPT, walking, level car turns and stoplights, and coordinated flight. Drop the old enhancement-named cases. Run fusionml tests in CI. Co-authored-by: Darren Yeates <darren@sensorworks.co.uk>
Typecheck/build-library failed because the required health field was missing from the mock payloads. Co-authored-by: Darren Yeates <darren@sensorworks.co.uk>
Rename turbo pipeline to tasks so Turbo 2 can dry-run, add the Flow ESLint plugin RN config expects, ignore the example app, and fix src Prettier so lint can pass. Co-authored-by: Darren Yeates <darren@sensorworks.co.uk>
Car covers throttle, braking, and a full level circle without banking. Aircraft covers climb, descent, accel/decel, climbing and descending turns, and heading wrap after a 360. Co-authored-by: Darren Yeates <darren@sensorworks.co.uk>
Bump React Native 0.83.1 to 0.83.10 and React 19.2.8, along with matching tooling. Expose atRest/zuptActive from iOS, and show filter health, rest, ZUPT, ground track, and aligning state in the example app. Co-authored-by: Darren Yeates <darren@sensorworks.co.uk>
The example app now typechecks against RN 0.83's typescript-config, mapping react-native-ahrs to the library source. Drop the unused no-console disable after the ESLint bump. Co-authored-by: Darren Yeates <darren@sensorworks.co.uk>
macos-latest no longer ships Xcode 16.2, so iOS CI now runs on macos-15 with 16.4. Gradle 9 was not picking up ANDROID_HOME; write sdk.dir into example/android/local.properties before the Android example build. Co-authored-by: Darren Yeates <darren@sensorworks.co.uk>
iOS: run pod update so CocoaPods can move fmt 11.0.2 to 12.1.0 from the new React Native podspec instead of failing on the stale Podfile.lock. Android: install NDK 27.1.12297006 with sdkmanager (and retry) so Gradle does not download a corrupt NDK zip during configure. Co-authored-by: Darren Yeates <darren@sensorworks.co.uk>
Assert vertical and horizontal flight-path angles on climb, descent, level, stationary, and crab cases. Also check ground track, NED velocity components, and lat/lon change so each public filter output has a representative assertion. Co-authored-by: Darren Yeates <darren@sensorworks.co.uk>
Ground track, NED velocity, and longitude still cover eastbound motion. Heading-at-90 is already covered by the walking-corner case. Co-authored-by: Darren Yeates <darren@sensorworks.co.uk>
The eastbound case failed because the simulated body mag used my = B * sin(heading), which is the opposite Y sign from a NED body frame. Init heading is atan2(-By, Bx), so a 90° heading looked like 270°. Restore the heading and HFPA asserts and drive the plant with a consistent NED-to-body field. Co-authored-by: Darren Yeates <darren@sensorworks.co.uk>
Android CI failed compiling AhrsModule against the current Turbo Module spec (recording APIs, removed setMagneticDeclination, Location accuracy fields, Float vs Double). Point JNI at uNavINS instead of the deleted fusion/ EKF, emit the same AhrsData fields as iOS, and keep recording as explicit stubs until that path is ported. Co-authored-by: Darren Yeates <darren@sensorworks.co.uk>
The Android NDK build failed because reset did `filter = uNavINS()`. uNavINS has const members, so assignment is deleted. Reconstruct the instance in place and call FlightPhaseDetector::reset() instead. Co-authored-by: Darren Yeates <darren@sensorworks.co.uk>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Get the iOS 18-state GPS/INS EKF working correctly before a full Android feature port.
Filter (
fusionml/src/uNavINS)|ax| > g;atan2heading; skip mag if the field is unusabledt <= 0(first iOS IMU sample), then return without propagatingiOS
attitudeValidfromisInitialized()+ finite + health; no extra landscape heading offsethasDeclinationflag; poorhaccdoes not invent velocityatRestandzuptActiveon each AHRS updateAndroid
uNavINS(the oldfusion/EKF is gone)AhrsDatafields as iOS (health, rest, ZUPT, declination, track/speed)speedAccuracyMetersPerSecond/verticalAccuracyMetersExample app
attitudeValidTests
bn/be/bd), notmy = B·sin(heading)(that flipped 90° to 270°)dt = 0yarn test:fusionruns in GitHub CI (128 uNavINS asserts, 0 failed)CI
pipelinerenamed totasks; ESLint Flow plugin; example app ignoredmacos-15+ Xcode 16.4 (macos-latestis Xcode 26-only)pod updateso RN 0.83.10 can movefmt11.0.2 → 12.1.0sdk.dirand installs NDK 27.1 via sdkmanager (Gradle zip download was corrupt)Packaging
package.jsonshipsfusionml; podspec includesXYZgeomag.hppAndroid recording/playback is still stubbed. The filter path now matches iOS.