pose_fusion:
  ros__parameters:
    # ── Sensor weights ──────────────────────────────────────────────────────
    # UWB+IMU fused pose (/saltybot/pose/fused_cov)
    sigma_uwb_pos_m:      0.10    # position 1-σ (m) — used when use_uwb_covariance=false
    use_uwb_covariance:   true    # if true, extract σ from PoseWithCovarianceStamped.covariance
    sigma_uwb_head_rad:   0.15    # heading 1-σ (rad) — used when cov unavailable

    # Visual odometry (/saltybot/visual_odom)
    sigma_vo_vel_m_s:     0.05    # linear-velocity update 1-σ (m/s)
    sigma_vo_omega_r_s:   0.03    # yaw-rate update 1-σ (rad/s)

    # IMU process noise (/imu/data)
    sigma_imu_accel:      0.05    # accelerometer noise (m/s²)
    sigma_imu_gyro:       0.003   # gyroscope noise (rad/s)
    sigma_vel_drift:      0.10    # velocity random-walk process noise (m/s)
    dropout_vel_damp:     0.95    # velocity damping factor per second during UWB dropout

    # ── Dropout thresholds ──────────────────────────────────────────────────
    uwb_dropout_warn_s:   2.0     # log warning if UWB silent > this (s)
    uwb_dropout_max_s:    10.0    # suppress pose output if UWB silent > this (s)
    vo_dropout_warn_s:    1.0     # log warning if VO silent > this (s)

    # ── Topic / frame configuration ─────────────────────────────────────────
    imu_topic:            /imu/data
    uwb_pose_topic:       /saltybot/pose/fused_cov   # from saltybot_uwb_imu_fusion
    vo_topic:             /saltybot/visual_odom       # from saltybot_visual_odom

    # ── Wheel odometry (/saltybot/wheel_odom) from saltybot_nav2_slam ──────────
    use_wheel_odom:           true
    wheel_odom_topic:         /saltybot/wheel_odom
    sigma_wheel_vel_m_s:      0.03   # wheel linear-velocity 1-σ (m/s) — tighter than VO
    sigma_wheel_omega_r_s:    0.02   # wheel yaw-rate 1-σ (rad/s)

    map_frame:            map
    base_frame:           base_link
