Full Vehicle Fusion
Node ID: fullVehicleFusion · Role: Filter · Realtime config: no
Description
Multi-sensor vehicle fusion combining IMU, GNSS, and wheel odometry. Outputs FusedVehiclePoseV2 with position, heading, velocity, and global coordinates.
Algorithm notes
How it works
This node chains the two other vehicle filters into one pipeline. The odometry stage (wheel speed + gyro, corrected by GNSS) produces a robust planar pose that keeps working through GNSS outages. The GNSS-IMU stage then treats that pose as its GNSS input (a “virtual GNSS” stream) and fuses it with the full IMU into the final smooth 3D pose, published on every IMU sample in local and WGS84 coordinates. The result is GNSS accuracy when reception is good and wheel-odometry dead reckoning when it is not.
The settings are the settings of the two stages, prefixed Odo: and GNSS:, plus a Pipeline group that controls the link between them.
What you must configure
The same installation geometry as the standalone filters:
- Odo: IMU-to-Car Rotation and Odo: IMU Turn Rate Axis - IMU mounting for the odometry stage.
- GNSS: IMU-to-Vehicle Rotation - IMU mounting for the GNSS-IMU stage.
- GNSS: GPS Antenna Offset - antenna position relative to the IMU (x forward, y left, z up).
- GNSS: Global Origin (optional) - fixes the local frame origin; otherwise the first fix is used.
Get these right before touching any tuning value - a wrong mounting rotation looks exactly like a badly tuned filter.
How it starts
The odometry stage initializes first: it needs an RTK Fixed position and a heading, from a dual-antenna receiver or from driving straight above Odo: Init Velocity Threshold. The GNSS-IMU stage then initializes from the virtual fixes. Expect no output until both stages are ready.
Tuning
The Pipeline defaults rarely need changing:
- Use Direct GNSS feeds real receiver fixes to the GNSS-IMU stage instead of the virtual stream. This gives up the outage coasting, so use it only with a reliable receiver.
- Keep Gate Height on RTK Fix and GNSS: Use Reported Accuracy on in the default virtual mode; they stop the second stage from over-trusting the synthesized fixes.
- Leave GNSS: Estimate GNSS-IMU Time Delay off in virtual mode - there is no real receiver to calibrate against.
Sensor trust is tuned per stage, exactly as in the standalone filters: the Odo: error values balance wheel/gyro dead reckoning against GNSS, the GNSS: error values balance the IMU against the virtual fixes.
Troubleshooting
- No output - the IMU stream stopped (output stops entirely), or the odometry stage never initialized (no RTK fix, or the vehicle never drove straight above the initialization speed).
- Output pauses after a jump in the odometry stage - the continuity check holds the second stage until Stable Samples Required clean samples arrive; usually a bad wheel-speed signal or repeated GNSS outages.
- Altitude jumps when the fix quality changes - keep Gate Height on RTK Fix on.
- Periodic freezes with marginal RTK - the filter cycles through RTK loss, settle and re-convergence; see GNSS: RTK Fix Lost Timeout (ms) and GNSS: RTK Settle After Restore (ms).
- To see which stage misbehaves, enable Output Intermediate Results and compare the odometry stage’s pose with the final output.
Inputs / Outputs
- Inputs:
Imu,Gnss,VehicleSpeed - Outputs:
FusedPose,FusedVehiclePose,FusedVehiclePoseV2,GlobalFusedPose,FusionStateInt
Config aliases
FullVehicleFusionFilter, fullVehicleFusionFilter, fullVehicleFusion
Required feature
vehicular_fusion
Properties
Each row shows the setting’s label in the node’s Properties panel and, in code, its key in the node’s settings object in the config file. A setting omitted from the config file uses the default shown here.
Pipeline
| Property | Type | Default | Description |
|---|---|---|---|
Use Direct GNSS useDirectGnss | boolean | false | Feed real GNSS fixes straight into the GNSS-IMU stage instead of the virtual GNSS synthesized from the odometry-IMU output. Use when a trustworthy GNSS receiver is available; leave off to run odometry-driven dead reckoning through the GNSS stage. |
Gate Height on RTK Fix gateHeightOnRtkFix | boolean | true | Only update the height carried by the virtual GNSS from RTK-fixed (quality 4) samples, holding the last good height through float/single-fix dropouts. The virtual GNSS is stamped quality 4, so without this a float-mode height (often metres off) is trusted as a perfect fix and the fused altitude jumps then dips when RTK returns. |
Output Intermediate Results outputIntermediateResults | boolean | false | Also emit the odometry-IMU stage’s pose (the first stage of the pipeline) alongside the final fused output, for diagnostics and comparison. |
Virtual GNSS Quality virtualGnssQuality | number | 4.0 | Fix-quality value stamped on the synthetic GNSS samples generated from the odometry-IMU output. 4 = RTK Fixed, so the downstream GNSS-IMU stage treats the virtual fixes as high quality. |
Virtual GNSS HDOP virtualGnssHdop | number | 0.5 | Horizontal dilution-of-precision value stamped on the synthetic GNSS samples. Lower values make the GNSS-IMU stage trust the virtual position more. |
Stable Samples Required stableSamplesRequired | number | 5 | Number of consecutive stable odometry-IMU samples required before the GNSS-IMU stage is un-paused after an odometry outage or jump (position more than 2 m beyond expected travel, or yaw > 0.1 rad). Guards against feeding a discontinuity into the second stage. |
Enable Odometry Continuity Check enableOdometryContinuityCheck | boolean | true | Reject virtual GNSS samples when the odometry-IMU output has an unexpected position/yaw discontinuity. Disable for diagnostics when you want to inspect downstream filter behavior without this guard. |
Virtual GNSS Update Period (ms) virtualGnssUpdatePeriodMS | number | 100 | Minimum interval in milliseconds between synthetic GNSS samples fed to the GNSS-IMU stage. Rate-limits the virtual GNSS to a realistic receiver update rate (100 ms = 10 Hz). |
Virtual GNSS Pitch Max Age (ms) virtualGnssPitchMaxAgeMS | number | 250 | Maximum age in milliseconds of the most recent real RTK pitch sample for it to be attached to a synthetic GNSS sample. Older pitch is considered stale and dropped. |
Odometry - Core Tuning
| Property | Type | Default | Description |
|---|---|---|---|
Odo: Velocity Error odometryImuFusion.velError | number | 0.278 | Odometry-IMU stage: control noise std-dev on the wheel-speed input in m/s. Higher values trust the odometry speed less. |
Odo: Angular Velocity Error odometryImuFusion.omegaError | number | 0.5 | Odometry-IMU stage: control noise std-dev on the turn-rate input in rad/s. Lower values give smoother heading but slower response to turns. |
Odo: Measurement Error odometryImuFusion.measurementError | number | 0.1 | Odometry-IMU stage: measurement noise std-dev for the GNSS position update, in meters. Lower trusts position fixes more; higher leans on odometry dead reckoning. |
Odo: Smoothing odometryImuFusion.smoothFit | boolean | true | Odometry-IMU stage: smooth the output by interpolating between the lagged and current filter states across measurement epochs. |
Odometry - Outlier Handling
| Property | Type | Default | Description |
|---|---|---|---|
Odo: Use Position Outlier De-weighting odometryImuFusion.usePositionOutlierDeweighting | boolean | true | Odometry-IMU stage: when a position update exceeds the innovation gate, inflate its measurement noise and apply it softly instead of applying it at full weight. |
Odo: Innovation Gate (sigma) odometryImuFusion.innovationGate | number | 5.0 | Odometry-IMU stage: chi-square threshold for enabled outlier handling. A fix whose squared Mahalanobis distance exceeds dof + gate x sqrt(2 x dof) is treated as an outlier. 0 disables position outlier de-weighting. |
Odometry - Wheel Odometry & Turn Rate
| Property | Type | Default | Description |
|---|---|---|---|
Odo: Use IMU Turn Rate odometryImuFusion.useImuTurnRate | boolean | true | Odometry-IMU stage: take the yaw rate from the IMU gyroscope rather than differential wheel speeds. Far less sensitive to wheel slip and track-width error. |
Odo: Wheel Turn-Rate Fallback odometryImuFusion.useWheelAngularFallback | boolean | false | Odometry-IMU stage: fall back to the wheel-derived turn rate when the IMU stream is lost. Off by default - with no measured wheel angular rate, a dead IMU leaves no heading reference, so output stops rather than dead-reckoning on a stale turn rate. Enable only with a trustworthy wheel angular rate. |
Odo: IMU Timeout (s) odometryImuFusion.imuTimeoutLimit | number | 0.5 | Odometry-IMU stage: time in seconds without an IMU sample before the IMU stream is declared lost. On loss the stage stops output - or switches to the wheel turn rate if Odo: Wheel Turn-Rate Fallback is on and a valid wheel rate is present. The IMU normally streams at 100 Hz; raise only to tolerate longer dropouts. |
Odo: IMU Turn Rate Axis odometryImuFusion.imuTurnRateAxis | vector3 | {"x":0,"y":0,"z":1} | Odometry-IMU stage: unit vector selecting which IMU gyroscope axis supplies the vehicle yaw rate. Default (0,0,1) uses the IMU Z axis. |
Odo: Wheel Omega Scale odometryImuFusion.wheelOmegaScale | number | 1.0 | Odometry-IMU stage: multiplier on the wheel-derived angular velocity to correct track-width/wheel-radius calibration error. Only used when Odo: Use IMU Turn Rate is off. |
Odo: Detect Wheel Slip odometryImuFusion.detectSlip | boolean | true | Odometry-IMU stage: inflate the control noise on ticks where the IMU and wheel-derived turn rates disagree (wheel slip or wrong track width). |
Odo: Estimate Wheel Scale odometryImuFusion.estimateWheelScale | boolean | true | Odometry-IMU stage: estimate a slow wheel-speed scale factor (tire wear/pressure) from the ratio of RTK-fixed travelled distance to integrated odometry distance. |
Odo: Estimate Gyro Bias odometryImuFusion.estimateGyroBias | boolean | true | Odometry-IMU stage: estimate the gyro yaw-rate bias as a Kalman filter state and subtract it from the IMU turn rate. Verified multi-second GNSS-yaw windows and stopped gyro samples measure it directly. |
Odo: Gyro Bias Random Walk odometryImuFusion.gyroBiasRandomWalk | number | 0.0005 | Odometry-IMU stage: random-walk process noise density for the gyro yaw-bias state, in rad/s per sqrt(s). |
Odo: Gyro Bias ZUPT Error odometryImuFusion.gyroBiasZuptError | number | 0.0035 | Odometry-IMU stage: measurement noise for stopped zero-angular-rate gyro-bias updates, in rad/s. |
Odometry - Orientation & Heading
| Property | Type | Default | Description |
|---|---|---|---|
Odo: Init from GNSS Orientation odometryImuFusion.initializeFromGnssOrientation | boolean | true | Odometry-IMU stage: seed the initial heading from the GNSS dual-antenna orientation. Only used when Odo: Use GNSS Without RTK Fix is off; when no valid orientation is reported (single antenna), or in that mode, the heading comes from course over ground instead. |
Odo: Use GNSS Yaw Measurement odometryImuFusion.useGnssYawMeasurement | boolean | false | Odometry-IMU stage: use the GNSS dual-antenna heading as a 1D yaw measurement while moving, instead of relying on position cross-covariance alone. Also keeps the heading corrected through a position-only outage (single-point GPS with a still-fixed dual-antenna heading) and feeds the moving gyro-bias estimator. |
Odo: GNSS Yaw Error odometryImuFusion.gnssYawError | number | 0.05 | Odometry-IMU stage: GNSS heading measurement noise std-dev in radians. |
Odometry - Stopped Detection
| Property | Type | Default | Description |
|---|---|---|---|
Odo: Retain State When Stopped odometryImuFusion.retainStateWhenStopped | boolean | true | Odometry-IMU stage: freeze the state while the vehicle is stationary to prevent drift from sensor noise. |
Odo: Velocity Threshold odometryImuFusion.velocityThreshold | number | 0.01 | Odometry-IMU stage: speed in m/s below which the vehicle is considered stopped (with hysteresis at half this value). Used for stopped-state detection and optional state freezing. |
Odometry - Initialization & Convergence
| Property | Type | Default | Description |
|---|---|---|---|
Odo: Init Velocity Threshold odometryImuFusion.initVelocityThreshold | number | 3.0 | Odometry-IMU stage: minimum speed in m/s for the course-over-ground heading initialization. |
Odo: Init Velocity Tolerance odometryImuFusion.initVelocityTolerance | number | 0.4 | Odometry-IMU stage: maximum allowed difference in m/s between the GNSS-derived speed and the wheel speed for a sample to count toward the course-over-ground heading initialization. |
Odometry - RTK & GNSS Quality
| Property | Type | Default | Description |
|---|---|---|---|
Odo: Use GNSS Without RTK Fix odometryImuFusion.useGpsOnRtkFloat | boolean | false | Odometry-IMU stage: accept GNSS position fixes of any quality instead of only RTK Fixed (quality 4). When off, the stage stays uninitialized until the first RTK Fixed sample. |
Odo: Use RTCM Age De-weighting odometryImuFusion.useRtcmAgeDeweighting | boolean | true | Odometry-IMU stage: inflate the GNSS position and heading measurement noise with the receiver’s RTCM correction age, so an RTK-fixed fix on stale corrections is smoothly de-weighted toward dead reckoning. When off, RTK-fixed fixes are trusted regardless of correction age. |
Odo: RTCM Age Sigma Per Second (m/s) odometryImuFusion.rtcmAgeSigmaPerSec | number | 0.05 | Odometry-IMU stage: per-second growth in meters of the GNSS position sigma when RTK FIXED with a non-zero RTCM correction age. Effective measurement error becomes measurementError + diffAge * this. Only used when Odo: Use RTCM Age De-weighting is on. |
Odometry - IMU Mounting & Frames
| Property | Type | Default | Description |
|---|---|---|---|
Odo: IMU-to-Car Rotation odometryImuFusion.imuToCarRotation | quaternion | {"w":1,"x":0,"y":0,"z":0} | Odometry-IMU stage: quaternion (w,x,y,z) from the IMU sensor frame to the vehicle body frame, accounting for the IMU mounting orientation. |
GNSS - Core Tuning
| Property | Type | Default | Description |
|---|---|---|---|
GNSS: Acceleration Error gnssImuFusion.accelError | number | 0.2 | GNSS-IMU stage: accelerometer measurement noise std-dev in m/s². Lower trusts IMU acceleration more; higher relies more on GNSS position updates. |
GNSS: Angular Velocity Error gnssImuFusion.omegaError | number | 0.04 | GNSS-IMU stage: gyroscope measurement noise std-dev in rad/s. Lower trusts the gyro more for orientation; higher lets GNSS heading dominate. |
GNSS: Measurement Error gnssImuFusion.measurementError | number | 0.07 | GNSS-IMU stage: GNSS position measurement noise std-dev in meters. In virtual GNSS mode the odometry stage’s posterior sigma additionally floors this value. |
GNSS: Orientation from GNSS Error gnssImuFusion.orientationFromGnssError | number | 0.006 | GNSS-IMU stage: GNSS-derived heading measurement noise std-dev. Lower gives GNSS heading more authority over the fused orientation. |
GNSS: Smoothing gnssImuFusion.smoothFit | boolean | true | GNSS-IMU stage: smooth the output by interpolating between the lagged and current filter states across measurement epochs. |
GNSS: Measurement Step gnssImuFusion.measurementStep | number | 1 | GNSS-IMU stage: GNSS measurement decimation. After initialization only every N-th sample creates a measurement update. 1 uses every sample. |
GNSS - Outlier Handling
| Property | Type | Default | Description |
|---|---|---|---|
GNSS: Use Position Outlier De-weighting gnssImuFusion.useGnssPositionOutlierDeweighting | boolean | true | GNSS-IMU stage: when a GNSS position update exceeds the innovation gate, inflate its measurement noise and apply it softly instead of applying it at full weight. |
GNSS: Use Velocity Outlier De-weighting gnssImuFusion.useGnssVelocityOutlierDeweighting | boolean | true | GNSS-IMU stage: when a GNSS Doppler velocity update exceeds the innovation gate, inflate its measurement noise and apply it softly instead of applying it at full weight. Only applies when GNSS velocity measurement is enabled. |
GNSS: Innovation Gate (sigma) gnssImuFusion.innovationGate | number | 5.0 | GNSS-IMU stage: chi-square threshold for enabled outlier handling. 0 disables position/velocity outlier de-weighting. |
GNSS - Orientation & Heading
| Property | Type | Default | Description |
|---|---|---|---|
GNSS: Init from GNSS Orientation gnssImuFusion.initializeFromGnssOrientation | boolean | true | GNSS-IMU stage: use the initial GNSS heading to set the starting orientation, avoiding heading estimation from motion at startup. |
GNSS: Use GNSS Orientation Measurement gnssImuFusion.useGnssOrientationMeasurement | boolean | true | GNSS-IMU stage: continuously correct the IMU-derived orientation with GNSS heading, preventing heading drift over time. |
GNSS: Transform GNSS Orientation gnssImuFusion.transformGnssOrientation | boolean | true | GNSS-IMU stage: apply the IMU-to-car rotation when interpreting GNSS orientation. Enable when GNSS heading is in the vehicle frame but the IMU is mounted differently. |
GNSS: Use GNSS Pitch Measurement gnssImuFusion.useGnssPitchMeasurement | boolean | true | GNSS-IMU stage: apply GNSS-derived pitch (dual-antenna or Doppler-velocity) as a measurement update for the tilt estimate. |
GNSS: Pitch Error gnssImuFusion.gnssPitchError | number | 0.005 | GNSS-IMU stage: GNSS pitch measurement noise std-dev in radians. Lower gives GNSS pitch more authority over the fused tilt. |
GNSS: Pitch Min Speed (m/s) gnssImuFusion.gnssPitchMinSpeed | number | 0.3 | GNSS-IMU stage: minimum vehicle speed in m/s before Doppler-velocity-derived GNSS pitch is used. Does not affect direct dual-antenna pitch. |
GNSS: Use Pitch Outlier Gate gnssImuFusion.useGnssPitchOutlierGate | boolean | true | GNSS-IMU stage: reject GNSS pitch measurements that disagree with the IMU-propagated tilt by more than the gate, suppressing the dual-antenna pitch blunders that appear right at RTK fix transitions (still flagged quality-4). |
GNSS: Pitch Outlier Gate (deg) gnssImuFusion.gnssPitchOutlierGateDeg | number | 6.0 | GNSS-IMU stage: maximum disagreement in degrees between a GNSS pitch measurement and the IMU-propagated tilt before the measurement is rejected. Only used when GNSS: Use Pitch Outlier Gate is on. |
GNSS: Use Heading Outlier Gate gnssImuFusion.useGnssHeadingOutlierGate | boolean | true | GNSS-IMU stage: reject GNSS heading (orientation) measurements that disagree with the gyro-propagated heading by more than the gate, suppressing the dual-antenna heading blunders at RTK fix transitions. A sustained outage re-seeds heading via the init path, which bypasses this gate. |
GNSS: Heading Outlier Gate (deg) gnssImuFusion.gnssHeadingOutlierGateDeg | number | 10.0 | GNSS-IMU stage: maximum disagreement in degrees between a GNSS heading measurement and the gyro-propagated heading before the measurement is rejected. Only used when GNSS: Use Heading Outlier Gate is on. |
GNSS - Gravity & Velocity Updates
| Property | Type | Default | Description |
|---|---|---|---|
GNSS: Use Gravity Leveling Measurement gnssImuFusion.useGravityMeasurement | boolean | true | GNSS-IMU stage: centripetal-compensated gravity-direction update keeping pitch AND roll observable during sustained turns. |
GNSS: Gravity Measurement Error gnssImuFusion.gravityMeasurementError | number | 0.02 | GNSS-IMU stage: per-component noise std-dev of the gravity direction measurement (unitless; 0.02 corresponds to about 1.1 degrees). |
GNSS: Gravity Measurement Interval (ms) gnssImuFusion.gravityMeasurementIntervalMs | number | 250 | GNSS-IMU stage: minimum interval between gravity leveling updates in milliseconds. |
GNSS: Gravity Norm Tolerance (m/s²) gnssImuFusion.gravityNormTolerance | number | 0.5 | GNSS-IMU stage: reject the gravity measurement when the centripetal-compensated specific-force norm deviates from g by more than this. Filters out acceleration/braking transients. |
GNSS: Use GNSS Velocity Measurement gnssImuFusion.useGnssVelocityMeasurement | boolean | true | GNSS-IMU stage: use the receiver Doppler velocity vector as a direct 3D velocity update. Improves tilt observability and speeds up recovery after dropouts. |
GNSS: Velocity Error gnssImuFusion.gnssVelocityError | number | 0.1 | GNSS-IMU stage: GNSS Doppler velocity measurement noise std-dev in m/s. |
GNSS - Stopped Detection & ZUPT
| Property | Type | Default | Description |
|---|---|---|---|
GNSS: Retain State When Stopped gnssImuFusion.retainStateWhenStopped | boolean | true | GNSS-IMU stage: freeze the state when the vehicle is stationary to prevent position drift from IMU noise. |
GNSS: Is-Stopped Threshold gnssImuFusion.isStoppedThreshold | number | 0.005 | GNSS-IMU stage: speed in m/s below which the vehicle is considered stationary, used for stopped detection and optional state freezing. |
GNSS: Set Height to Zero gnssImuFusion.setHeightToZero | boolean | false | GNSS-IMU stage: constrain the vertical (Up) position to zero, suitable for ground vehicles on a known flat plane to prevent altitude drift. |
GNSS: Zero-Velocity Updates When Stopped gnssImuFusion.enableZupt | boolean | true | GNSS-IMU stage: zero-velocity pseudo-measurement plus IMU at-rest update while stopped, converging biases and tilt at every stop. |
GNSS: ZUPT Interval (ms) gnssImuFusion.zuptIntervalMs | number | 250 | GNSS-IMU stage: minimum interval between zero-velocity updates in milliseconds. |
GNSS - Initialization & Convergence
| Property | Type | Default | Description |
|---|---|---|---|
GNSS: Initialization Measurement Count gnssImuFusion.nMeasurementInit | number | 100 | GNSS-IMU stage: number of measurement updates during the initialization phase before switching to normal operation. |
GNSS: Velocity Threshold gnssImuFusion.velocityThreshold | number | 3.0 | GNSS-IMU stage: minimum vehicle speed in m/s required to initialize heading from GNSS course-over-ground. Below this, heading is ambiguous and initialization is deferred. |
GNSS: Velocity Tolerance gnssImuFusion.velocityTolerance | number | 0.4 | GNSS-IMU stage: maximum allowed difference in m/s between GNSS-derived velocity and vehicle speed during cross-validation at initialization. |
GNSS: Filter Convergence Time (ms) gnssImuFusion.filterConvergenceTimeMs | number | 3000 | GNSS-IMU stage: grace period in milliseconds after reinitialization during which the output is considered not yet converged. |
GNSS - RTK & GNSS Quality
| Property | Type | Default | Description |
|---|---|---|---|
GNSS: Require RTK Fix gnssImuFusion.requireRtkFix | boolean | true | GNSS-IMU stage: accept only RTK Fixed (quality 4) GNSS samples; float and standalone fixes are rejected to keep centimeter-level accuracy. |
GNSS: Use Reported Accuracy gnssImuFusion.useReportedAccuracy | boolean | true | GNSS-IMU stage: use the receiver-reported horizontal accuracy as a floor for the position measurement error. In virtual GNSS mode this carries the odometry stage’s posterior sigma into the second filter, so leaving it on is recommended. |
GNSS: Use RTCM Age De-weighting gnssImuFusion.useRtcmAgeDeweighting | boolean | true | GNSS-IMU stage: inflate the GNSS position measurement noise with the receiver’s RTCM correction age, so an RTK-fixed fix on stale corrections is smoothly de-weighted instead of hard-rejected. When off, RTK-fixed fixes are trusted regardless of correction age. |
GNSS: RTCM Age Sigma Per Second (m/s) gnssImuFusion.rtcmAgeSigmaPerSec | number | 0.05 | GNSS-IMU stage: per-second growth (in meters) of GNSS position sigma when the receiver reports RTK FIXED with a non-zero RTCM correction age. Only used when GNSS: Use RTCM Age De-weighting is on. |
GNSS: RTCM Age Hard Limit (s) gnssImuFusion.rtcmAgeMaxS | number | 30.0 | GNSS-IMU stage: hard ceiling on RTCM correction age in seconds. An older RTK FIXED sample is treated as fix loss. 0 disables the ceiling. |
GNSS: RTK Fix Lost Timeout (ms) gnssImuFusion.rtkFixLostTimeoutMs | number | 2000 | GNSS-IMU stage: time in milliseconds after losing RTK fix before the filter triggers a reinitialization sequence. |
GNSS: RTK Settle After Restore (ms) gnssImuFusion.rtkSettleMs | number | 5000 | GNSS-IMU stage: after a sustained RTK outage, wait this many milliseconds of uninterrupted RTK-FIXED samples before reinitialising and resuming output. |
GNSS - IMU Mounting & Frames
| Property | Type | Default | Description |
|---|---|---|---|
GNSS: Auto IMU-to-Car Rotation gnssImuFusion.autoImuToCarRotation | boolean | false | GNSS-IMU stage: automatically compute the IMU-to-car rotation from the accelerometer during initialization. Determines pitch/roll only; yaw is handled by GNSS heading. |
GNSS: IMU-to-Vehicle Rotation gnssImuFusion.imuToCarRotation | quaternion | {"w":1,"x":0,"y":0,"z":0} | GNSS-IMU stage: quaternion (w,x,y,z) from the IMU sensor frame to the vehicle body frame, accounting for the IMU mounting orientation. |
GNSS: Estimate GPS Antenna Offset gnssImuFusion.estimateGpsAntennaOffset | boolean | true | GNSS-IMU stage: estimate the GPS antenna lever arm (IMU-to-antenna offset) as part of the filter state, adding 3 states (x/y/z offset in meters). The emitted position stays at the antenna regardless of the estimate. |
GNSS: GPS Antenna Offset gnssImuFusion.gpsAntennaOffset | vector3 | {"x":0,"y":0,"z":0} | GNSS-IMU stage: vector from the reference IMU to the GNSS antenna in the vehicle frame (x=forward, y=left, z=up), in meters. Improves the internal lever-arm modeling only; the emitted position is always the antenna point. Starting value when estimation is on, fixed offset when off. |
GNSS: Global Origin gnssImuFusion.globalOrigin | latlon | — | GNSS-IMU stage: reference point for converting GNSS WGS84 coordinates to local ENU frame. If unset, the first GNSS fix is used as origin. |
GNSS - Timing & Advanced Process Noise
| Property | Type | Default | Description |
|---|---|---|---|
GNSS: IMU Queue Delay (ms) gnssImuFusion.imuQueueDelayMs | number | 0 | GNSS-IMU stage: delay in milliseconds applied to incoming IMU data to time-align it with GNSS arrival. Compensates for differing message latencies. |
GNSS: Estimate GNSS-IMU Time Delay gnssImuFusion.estimateTimeDelay | boolean | false | GNSS-IMU stage: estimate the time offset between the GNSS and IMU clocks as an additional filter state (online time-delay calibration). |
GNSS: Gyro Bias Random Walk gnssImuFusion.omegaBiasRandomWalk | number | 1e-05 | GNSS-IMU stage: random-walk process noise density for the gyro bias states in rad/s per sqrt(s). 0 disables. |
GNSS: Accel Bias Random Walk gnssImuFusion.accelBiasRandomWalk | number | 0.0001 | GNSS-IMU stage: random-walk process noise density for the accelerometer bias states in m/s² per sqrt(s). 0 disables. |
GNSS: Control Noise Reference dt (s) gnssImuFusion.controlNoiseRefDt | number | 0.01 | GNSS-IMU stage: reference IMU sample interval for process-noise scaling, making tuning independent of the IMU rate. 0 keeps the legacy fixed per-sample sigma. |
GNSS - Output & Diagnostics
| Property | Type | Default | Description |
|---|---|---|---|
GNSS: Output When Filter Not Ready gnssImuFusion.outputWhenFilterNotReady | boolean | false | GNSS-IMU stage: emit fused pose output even before the filter has fully initialized and converged. Useful for diagnostics but output quality will be poor. |
GNSS: Output Raw GNSS Data gnssImuFusion.outputRawGnssData | boolean | false | GNSS-IMU stage: include raw GNSS position data alongside fused output for comparison and debugging. |
GNSS: Debug Filter gnssImuFusion.debugFilter | boolean | false | GNSS-IMU stage: enable verbose debug logging for the fusion filter (prediction/measurement steps, innovations, state updates). |
Example node definition
A minimal entry in config.json looks like the block below. Paste it under the sinks key, keyed by an instance name of your choice. All settings are optional: anything not listed under settings uses the default from the Properties table above. See The configuration file for how the sections and endpoint wiring work.
{
"sinks": {
"fullVehicleFusion": {
"dataEndpoint": "inproc://fullVehicleFusion_data",
"inputEndpoints": [
"inproc://imu_data",
"inproc://gnss_data",
"inproc://vehicleSpeed_data"
],
"inputDataFilter": [
"Imu",
"Gnss",
"VehicleSpeed"
],
"settings": {
"odometryImuFusion": {
"imuToCarRotation": {
"w": 1,
"x": 0,
"y": 0,
"z": 0
},
"imuTurnRateAxis": {
"x": 0,
"y": 0,
"z": 1
}
},
"gnssImuFusion": {
"imuToCarRotation": {
"w": 1,
"x": 0,
"y": 0,
"z": 0
},
"gpsAntennaOffset": {
"x": 0,
"y": 0,
"z": 0
}
}
}
}
}
}