ROS 2 · C++/CUDA · Ground-plane geometry · Cameras + IMU

Monoscale is a lightweight, learning-free perception stack that derives metric vehicle motion and dense occupancy from one or more cameras, an IMU, known camera mounting height, and the ground plane. It does not require stereo, vehicle-mounted LiDAR, a learned model, or a prebuilt map.

Estimation Design

Camera + IMUC++ KLT tracks, road-image observations, and inertial measurements
Separated Estimationphotometric distance plus anchor-map direction, position correction, roll, and pitch
Metric OdometryROS 2 kinematic state and ground-point output

Why the Signals Stay Separate

  • Without an anchor match, feature tracking keeps motion direction and the forward/reverse sign while photometric alignment supplies the distance.
  • With an anchor match, the anchor update is kept intact because it contains both current motion and accumulated position-error correction.
  • For attitude, roll and pitch are estimated directly from repeated anchor-bearing errors instead of continuously integrating photometric frame-to-frame increments.
  • This separation prevents a locally useful distance estimate from overwriting the longer-term correction carried by the anchor map.

Dense Occupancy

The occupancy path reads the raw fisheye images rather than accumulating sparse feature points. It sweeps world-horizontal planes through each pixel, scores photometric agreement with ZNCC, aggregates the cost with SGM, and uses the odometry roll/pitch directly in the image warp.

  • Output: a 0.1 m occupancy grid for the parking environment.
  • Deployment path: C++/CUDA; the recorded CUDA runtime is about 0.2 s per keyframe.
  • Measured CARLA case: coverage 0.831, false occupied cells 29, and no path ghosts on approach_hd60_occ_b.

Measured Results

MeasurementResultWhat It Tests
Final configuration0.0237% mean distance-normalized ATE over 9 CARLA drivesCombined long-term trajectory accuracy
Anchor-map attitude disabled0.0223% → 0.1114%Effect of direct ground-relative roll/pitch estimation on a straight drive
Photometric distance reapplied during anchor matches5 m RTE 0.145% → 0.108%, but best ATE 0.0369% versus 0.0237% baselineShort-window distance accuracy versus accumulated trajectory correction
Photometric pitch/roll increment biasup to about 0.038° per frameWhy continuously integrating the increment is drift-prone

Software Boundaries

  • Estimator core: C++ and ROS-independent, so it can be tested without a graph or composed into another process.
  • Tracking: C++ KLT front end with an optional OpenCV CUDA path.
  • ROS 2 integration: odometry node, deterministic bag replay, launch and deployment parameters.
  • Evaluation: CARLA ground truth scoring, held-out runs, and explicit ablations.
  • Tests: 132 core tests covering geometry, anchors, filtering, inertial processing, attitude, and synthetic-drive estimator behavior.

Validation Scope

  • The trajectory figures above are CARLA measurements under the repository's recorded evaluation conditions.
  • The photometric increment is an inter-frame estimate, not an absolute ground attitude measurement.
  • The occupancy and odometry paths share camera geometry and pose information but remain separate consumers of the image stream.