Skip to content

Ops

Bring-up and failure checks for the live LiDAR-first stack. Graph and topics: architecture.

  1. Source ROS and the workspace. Confirm UDP 2368 is free.
  2. Start custom_ros_driver (prod package name) with its params file.
  3. Health checks:
    • ros2 topic hz /cones non-zero near the configured frame rate
    • ros2 topic echo /lidar/log --once (drop counters not climbing rapidly)
    • /lidar/ground_filtered shows ground removed and cone-like returns remaining
  4. Confirm /filter/twist is publishing.
  5. Start point_to_pixel with src/point_to_pixel/config/params.yaml.
  6. Confirm /associated_colored_cones. For history debug, set publish_pre_cone_history_debug=true to also publish /colored_cones.

Typical viz set: /cones, /lidar/ground_filtered, /associated_colored_cones, camera images (with projection overlay when available).

Classifier checks are useless until /cones is healthy.

CheckPassFail direction
LiDAR power / ethernet / portpackets arrivingfree UDP 2368; check link
ros2 topic hz /conessteadydriver down or all points filtered
/lidar/ground_filtered densitycone-like clusters remainGnC thresholds or range cutoffs
x/y/z/radius_cutoffcones inside boxwiden box (YAML values are meters)
min_points / epsilonclusters formlower min_points; inspect DBSCAN
Correctionangles saneload .dat for bags; PTC TCP 9347 live
  1. Verify positions on /lidar/ground_filtered.
  2. Compare /colored_cones (pre-history) and /associated_colored_cones (post-history).
  3. Systematic projection miss: matrices / calibration (physical calibration).
  4. Projection on cones but wrong class: YOLO class map, confidence, lighting; HSV ranges only on HSV builds.
  5. One camera wrong: that side’s matrix, undistort YAML, or right-camera 180° rotate.
  6. Correct at rest, wrong in motion: /filter/twist or imu_to_lidar.

Enable publish_pre_cone_history_debug. Pre-history flicker implicates projection or classification. Stable pre-history with unstable post-history implicates history.

On prod, history votes colors, associates tracks, and orders cones. It does not republish unseen cones across gaps. Gap-fill is on feature/perc/propagate_history. See cone history.

Monitor /lidar/log during drive or replay.

SymptomLikely causes
Rising packet dropsCPU contention, ring overflow, UDP conflict, network
High processing timeLoose cutoffs (too many points through GnC/DBSCAN)
Sporadic empty framesSequence gaps, sync, correction

Field names follow the built LidarLog.msg. Use ros2 interface show on the installed type.

PatternLikely cause
Constant offset while stoppedExtrinsics, wrong params.yaml, wrong camera YAML
Offset only when moving / yawingTwist gap, empty image deque, imu_to_lidar
Distortion near image edgesIntrinsics or YAML size ≠ 1920×1200

Procedure: physical calibration. Extrinsic gather scripts subscribe to sensor_msgs/PointCloud2 on /lidar_points (vendor Hesai or bridge). The live cone driver publishes interfaces/msg/Points on /cones / /lidar/raw_points and does not satisfy that subscription.

Available on feature/perc/bag-extractor only.

ExitMeaning
0Pass
1Metric or reference drift. Inspect run.json; re-run; update the reference only after intentional review.
2Scenario or config error
3Extraction, replay, or readiness failure (infrastructure)

See regression harness.