Implement rate-limiting for velocity commands to prevent jerky motion.
Applies independent acceleration/deceleration limits to linear and angular velocity.
Features:
- Smooth acceleration/deceleration rate limiting
Default: 0.5 m/s² linear, 1.0 rad/s² angular (configurable)
- Independent limits for each velocity component (x, y, z linear; x, y, z angular)
- Calculates maximum change per control cycle: limit * dt
- Clamps velocity changes to stay within acceleration envelope
- 50Hz control frequency with configurable parameters
Algorithm:
- Subscribe to /cmd_vel (target velocity)
- For each component: change = target - current
- Clamp change: |change| ≤ accel_limit * period
- Apply clamped change to current velocity
- Publish smoothed /cmd_vel_smooth
Benefits:
- Prevents jerky motion from sudden velocity jumps
- Protects mechanical systems from shock loads
- Enables gradual speed/direction changes
- Smooth tracking of dynamic targets
Test Coverage:
- 30+ unit tests covering:
- Node initialization and parameter configuration
- Individual component rate limiting (linear, angular)
- Acceleration and deceleration scenarios
- Multi-component simultaneous limiting
- Reaching target velocity after multiple cycles
- Emergency stops and rapid direction changes
- Independent linear vs angular limits
- Realistic scenarios: gradual acceleration, smooth stops, turns while moving,
obstacle avoidance, continuous motion tracking, oscillating targets
Topics:
- Subscribed: /cmd_vel (geometry_msgs/Twist)
- Published: /cmd_vel_smooth (geometry_msgs/Twist)
Config: frequency=50Hz, linear_accel_limit=0.5 m/s², angular_accel_limit=1.0 rad/s²
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
28 lines
930 B
Python
28 lines
930 B
Python
from setuptools import find_packages, setup
|
|
|
|
package_name = "saltybot_accel_limiter"
|
|
|
|
setup(
|
|
name=package_name,
|
|
version="0.1.0",
|
|
packages=find_packages(exclude=["test"]),
|
|
data_files=[
|
|
("share/ament_index/resource_index/packages", ["resource/" + package_name]),
|
|
("share/" + package_name, ["package.xml"]),
|
|
("share/" + package_name + "/launch", ["launch/accel_limiter.launch.py"]),
|
|
("share/" + package_name + "/config", ["config/accel_limiter_config.yaml"]),
|
|
],
|
|
install_requires=["setuptools"],
|
|
zip_safe=True,
|
|
maintainer="Seb",
|
|
maintainer_email="seb@vayrette.com",
|
|
description="Smooth acceleration and deceleration rate limiting for velocity commands",
|
|
license="Apache-2.0",
|
|
tests_require=["pytest"],
|
|
entry_points={
|
|
"console_scripts": [
|
|
"accel_limiter_node = saltybot_accel_limiter.accel_limiter_node:main",
|
|
],
|
|
},
|
|
)
|