- Add _terrain_roughness.py: RoughnessResult NamedTuple; gabor_energy() with 4-orientation × 2-wavelength (5px, 10px) quadrature Gabor bank, DC removal via image mean subtraction (prevents false high energy on uniform surfaces); lbp_variance() using 8-point radius-1 LBP in vectorised numpy slice comparisons (no sklearn); estimate_roughness() with bottom roi_frac crop, normalised blend roughness = 0.5*(gabor/500) + 0.5*(lbp/5000) clipped [0,1] - Add terrain_rough_node.py: subscribes /camera/color/image_raw (BEST_EFFORT), publishes Float32 /saltybot/terrain_roughness at 2Hz (configurable via publish_hz param); roi_frac param default 0.40 (bottom 40% = floor region) - Register terrain_roughness console script in setup.py - 37/37 unit tests pass (no ROS2 required) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Description
SaltyLab self-balancing bot firmware (STM32F722)
Languages
Python
67.1%
C
11.4%
JavaScript
9.2%
OpenSCAD
7.8%
HTML
1.5%
Other
2.9%