feat(bringup): visual odometry drift detector (Issue #260) #265
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "sl-perception/issue-260-vo-drift"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
_vo_drift.py:OdomSample(t,x,y),OdomBuffer(rolling deque withmax_age_seviction +window()query),compute_drift()— compares cumulative path lengths of VO vs wheel odom over the lastwindow_sseconds;drift_m = |vo_path − wheel_path|; uses path length (sum of inter-sample steps) rather than straight-line displacement so circular motion is handled correctlyvo_drift_node.py: subscribes/camera/odom+/odom(BEST_EFFORT, remappable to/saltybot/visual_odom+/saltybot/rover_odom); 2 Hz timer publishesBoolon/saltybot/vo_drift_detectedandFloat32on/saltybot/vo_drift_magnitude; throttled warn log when driftingdrift_threshold_m=0.5,window_s=10.0,publish_hz=2.0Test plan
test/test_vo_drift.py— 27/27 pure-Python tests pass (no ROS2 required)/saltybot/visual_odom+/saltybot/rover_odom; slide robot sideways to trigger VO slip; confirmvo_drift_detected=True🤖 Generated with Claude Code