Two new ROS2 packages implementing Issue #142: saltybot_terrain_msgs (ament_cmake) - Terrain.msg: stamp, surface_type, roughness, incline_rad, grip, slip_ratio, speed_scale saltybot_terrain_adaptation (ament_python, 50 Hz) - terrain_analyzer.py: IMU vibration RMS → roughness [0,1] + surface classification (smooth/tile/carpet/grass/gravel) with hysteresis-protected switching - incline_detector.py: quaternion pitch → first-order LPF → incline_rad; motor_bias() - slip_detector.py: cmd_vel vs odom → slip_ratio with EMA smoothing + speed gate - terrain_adapter.py: TerrainState, TerrainAdapter (speed_scale, pid_scales, motor_bias), TerrainHistory (rolling deque, JSON type-change log) - terrain_adaptation_node.py: 50 Hz node; IMU watchdog; publishes terrain JSON + typed msg, speed_scale, pid_scales (JSON), motor_bias, terrain_history (on type change) - config/terrain_params.yaml, launch/terrain_adaptation.launch.py Tests: 60/60 passing (TerrainAnalyzer, SlipDetector, InclineDetector, TerrainAdapter, TerrainHistory all covered) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
25 lines
825 B
XML
25 lines
825 B
XML
<?xml version="1.0"?>
|
|
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
|
|
<package format="3">
|
|
<name>saltybot_terrain_adaptation</name>
|
|
<version>0.1.0</version>
|
|
<description>Surface detection and dynamic terrain adaptation for SaltyBot (Issue #142)</description>
|
|
<maintainer email="sl-controls@saltylab.local">sl-controls</maintainer>
|
|
<license>MIT</license>
|
|
|
|
<depend>rclpy</depend>
|
|
<depend>sensor_msgs</depend>
|
|
<depend>nav_msgs</depend>
|
|
<depend>geometry_msgs</depend>
|
|
<depend>std_msgs</depend>
|
|
|
|
<test_depend>ament_copyright</test_depend>
|
|
<test_depend>ament_flake8</test_depend>
|
|
<test_depend>ament_pep257</test_depend>
|
|
<test_depend>pytest</test_depend>
|
|
|
|
<export>
|
|
<build_type>ament_python</build_type>
|
|
</export>
|
|
</package>
|