Implements speed limiter ROS2 node that enforces safety constraints from: - Terrain type (via /saltybot/terrain_speed_scale) - Battery level (via /saltybot/speed_limit) - Emergency system state (via /saltybot/emergency) Node computes minimum scale factor and applies to /cmd_vel, forwarding limited commands to /saltybot/cmd_vel_limited. Publishes JSON telemetry on /saltybot/speed_limit_info at 50Hz (20ms cycle). Features: - Subscription to terrain, battery, and emergency constraints - Twist velocity scaling with min-of-three constraint logic - JSON telemetry with timestamp and all scale factors - 50Hz timer-based publishing for real-time control - Emergency state mapping (NOMINAL/RECOVERING/STOPPING/ESCALATED) - Comprehensive unit tests (18 test cases) Package: saltybot_speed_limiter Entry point: speed_limiter_node Launch file: speed_limiter.launch.py Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
30 lines
915 B
Python
30 lines
915 B
Python
from setuptools import setup
|
|
|
|
package_name = "saltybot_speed_limiter"
|
|
|
|
setup(
|
|
name=package_name,
|
|
version="0.1.0",
|
|
packages=[package_name],
|
|
data_files=[
|
|
("share/ament_index/resource_index/packages", [f"resource/{package_name}"]),
|
|
(f"share/{package_name}", ["package.xml"]),
|
|
(f"share/{package_name}/launch", ["launch/speed_limiter.launch.py"]),
|
|
(f"share/{package_name}/config", ["config/limiter_params.yaml"]),
|
|
],
|
|
install_requires=["setuptools"],
|
|
zip_safe=True,
|
|
maintainer="sl-controls",
|
|
maintainer_email="sl-controls@saltylab.local",
|
|
description=(
|
|
"Speed limiter: enforces terrain, battery, and emergency constraints on cmd_vel"
|
|
),
|
|
license="MIT",
|
|
tests_require=["pytest"],
|
|
entry_points={
|
|
"console_scripts": [
|
|
"speed_limiter_node = saltybot_speed_limiter.speed_limiter_node:main",
|
|
],
|
|
},
|
|
)
|