vesc_can_odometry:
  ros__parameters:
    # ── CAN motor IDs (used for CAN addressing) ───────────────────────────────
<<<<<<< HEAD
    left_can_id:        56      # left  motor VESC CAN ID (ESP32 BALANCE)
    right_can_id:       68      # right motor VESC CAN ID (ESP32 BALANCE)
=======
    left_can_id:        56      # left  motor VESC CAN ID (ESP32-S3 BALANCE)
    right_can_id:       68      # right motor VESC CAN ID (ESP32-S3 BALANCE)
>>>>>>> 291dd68 (feat: remove all STM32/Mamba/BlackPill references — ESP32-S3 only)

    # ── State topic names (must match VESC telemetry publisher) ──────────────
    left_state_topic:   /vesc/left/state
    right_state_topic:  /vesc/right/state

    # ── Drive geometry ───────────────────────────────────────────────────────
    wheel_radius:      0.10    # wheel radius (m)
    wheel_separation:  0.35    # track width: centre-to-centre (m)
    motor_poles:       7       # BLDC pole pairs (eRPM / motor_poles = mech RPM)
    invert_right:      true    # negate right eRPM (motors physically mirrored)

    # ── Frames & topics ──────────────────────────────────────────────────────
    odom_frame_id:     odom
    base_frame_id:     base_link
    publish_tf:        true
    publish_wheel_odom: true   # also publish on /saltybot/wheel_odom for pose_fusion

    # ── Timing ───────────────────────────────────────────────────────────────
    update_frequency:  50.0    # Hz — integration rate

    # ── Covariance (diagonal variances) ─────────────────────────────────────
    # Increase these values if the robot slips frequently.
    pose_cov_xx:  0.001   # x        variance (m²)
    pose_cov_yy:  0.001   # y        variance (m²)
    pose_cov_aa:  0.010   # heading  variance (rad²)
    twist_cov_vx: 0.010   # vx       variance ((m/s)²)
    twist_cov_wz: 0.020   # ωz       variance ((rad/s)²)
