Justin Bell Status Report 4/25/2026

This week I switched the Nav2 local controller from Regulated Pure Pursuit (RPP) to the Dynamic Window Approach (DWB) controller. RPP had been working but showed consistent issues near the goal, the robot would oscillate and fail to converge when it got close, partly because RPP computes a single curvature command along the path and doesn’t sample the velocity space dynamically. DWB samples a set of trajectory candidates at each control cycle, scoring them against a set of critics (path alignment, goal heading, obstacle clearance, etc.), which gives it more flexibility for stopping cleanly and recovering from heading errors.

The SparkFun OTOS node publishes in inches internally and converts to meters with the * 0.0254 factor on both linear.x and linear.y. The main tuning work this week was on the linear and angular scalar calibration exposed by the OTOS firmware.

To tune these, I drove the robot a known distance (measured by tape) and compared against the OTOS-reported displacement, then adjusted the scalar proportionally. Same process for angular: rotate a full 360 degrees and check that the heading returns to within a degree or two of zero. These scalars live in the otos_odom_node.py startup block just after calibrateImu().

Leave a Reply

Your email address will not be published. Required fields are marked *