feat(#142): terrain adaptation — surface detection + dynamic speed/PID/bias #154
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "sl-controls/issue-142-terrain"
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
Implements Issue #142 — surface detection and dynamic terrain adaptation.
Two new ROS2 packages:
saltybot_terrain_msgs(ament_cmake)Terrain.msg: stamp, surface_type, roughness, incline_rad, grip, slip_ratio, speed_scalesaltybot_terrain_adaptation(ament_python, 50 Hz)terrain_analyzer.py: IMU vibration RMS → normalised roughness + surface classification (smooth/tile/carpet/grass/gravel) with hysteresis-protected switching (5-sample gate)incline_detector.py: quaternion pitch → first-order LPF (τ=1.5s) → incline_rad;motor_bias()= k_bias × sin(incline)slip_detector.py: |v_cmd − v_actual| / |v_cmd| with EMA smoothing; gated belowmin_speed_msterrain_adapter.py:TerrainState,TerrainAdapter(speed_scale = roughness_scale × incline_scale × slip_scale; pid_scales from grip; motor_bias),TerrainHistory(rolling deque + JSON type-change log)terrain_adaptation_node.py: 50 Hz; IMU watchdog (0.5s timeout → safe defaults); publishes/saltybot/terrainJSON,/saltybot/terrain_speed_scale,/saltybot/terrain_pid_scales,/saltybot/terrain_motor_bias,/saltybot/terrain_history; optional typed/saltybot/terrain_typed(TerrainMsg) ifsaltybot_terrain_msgsis builtconfig/terrain_params.yaml,launch/terrain_adaptation.launch.pyTest plan