Repository navigation
Add datasheet noise density settings for the IMU - #15
Merged
Merged
Conversation
IMU white noise was a fixed standard deviation per sample. A real sensor is specified by noise density, so per-sample noise grows with sample rate and noise averaged over a fixed time does not. In the sim, raising the IMU from 100 Hz to 400 Hz halved the noise left after a 1 s average. New optional settings angularVelocityNoiseDensity (rad/s/√Hz) and linearAccelerationNoiseDensity (m/s²/√Hz) each take one number for all axes. When set, each sample uses sigma = density / √dt, with dt the time since the previous capture. The reported covariance uses the same sigma. Without a density, the per-sample settings apply as before, so existing and default runs do not change. The Config page shows both densities. docs/run-manifests.md gives datasheet unit conversions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Problem
IMU white noise was a fixed standard deviation per sample (
angularVelocityStdDev,linearAccelerationStdDev), whatever the rate. A real sensor is specified by noise density. Its per-sample noise grows with sample rate, and noise averaged over a fixed time does not change.In the sim, raising the IMU from 100 Hz to 400 Hz kept 0.002 rad/s per sample, so the noise left after averaging halved. The simulated IMU got better at higher rates. A filter tuned from a datasheet would get the wrong noise level at any rate other than the one the per-sample values were picked for.
Change
angularVelocityNoiseDensity(rad/s/√Hz) andlinearAccelerationNoiseDensity(m/s²/√Hz). Each is one number for all three axes.docs/run-manifests.mdexplains the model and gives conversions from datasheet units (°/s/√Hz, °/√h, µg/√Hz, m/s/√h).Why the default run is unchanged
Setting densities on the default run would change its hash. That breaks the pinned golden in
VIS-02 explicit-camera v11 identity vectors(tests/render-scene-provider.test.js). Making densities the default is a separate decision that needs that fixture regenerated. 0.0002 rad/s/√Hz and 0.002 m/s²/√Hz reproduce the current defaults exactly at 100 Hz.Tests
Live sim, car parked, 2.5 ms step, about 20 s of sim time per run, IMU read back from the recorded SFLog. Units: rad/s for the gyro, m/s² for the accelerometer.
npm teston a clean checkout: 1964 pass, 6 skipped, 1 fail. The failure isPython decodes retained RGB, depth, and CameraInfo SFLog messages, which also fails onmain.Noticed while testing, not changed here
The recorded logs are missing IMU messages. Only about half of the 0.1 s windows in each run had every sample. The averages above use complete windows only.
🤖 Generated with Claude Code