Skip to content

Linear acceleration envelope is violated under safe /cmd_vel commands #98

Description

@147258369ymc

Robot Model

Turtlebot4 Standard

ROS distro

Jazzy

Networking Configuration

Simple Discovery

OS

Ubuntu 24.04

Built from source or installed?

Installed

Package version

ros-jazzy-turtlebot4-simulator: 2.0.2-1noble.20260616.091643
ros-jazzy-turtlebot4-gz-bringup: 2.0.2-1noble.20260616.085653
ros-jazzy-irobot-create-control: 3.0.4-1noble.20260616.082318
ros-jazzy-irobot-create-gz-bringup: 3.0.4-1noble.20260616.083553
ros-jazzy-irobot-create-nodes: 3.0.4-1noble.20260615.161556
ros-jazzy-ros-gz: 1.0.22-1noble.20260616.074726
Gazebo: Harmonic / gz

Expected behaviour

The TurtleBot4/Create3 simulation stack should limit `linear.x` acceleration to the configured value:

```yaml
linear.x.has_acceleration_limits: true
linear.x.max_acceleration: 0.9

Under safe /cmd_vel commands, both /diffdrive_controller/cmd_vel.linear.x and /odom.twist.twist.linear.x should satisfy:

|d(linear.x)/dt| <= 0.9 m/s^2

### Actual behaviour

```markdown
The linear channel frequently exceeds the configured acceleration limit even though the input velocity remains safe.

Latest 1000-round campaign:

- `linear_acceleration` oracle label appeared **843** times
- max odom linear acceleration ratio: **2.95x**
- max `/diffdrive_controller/cmd_vel` linear acceleration ratio: **11.76x**
- max external command `|linear.x|`: **0.150 m/s**, below the configured `0.46 m/s` limit

Representative frame `1782640335.8862267`:

```text
TB4 linear acceleration envelope violated:
  odom accel = 2.600 m/s^2
  odom ratio = 2.89x
  limit      = 0.900 m/s^2

Supporting /diffdrive_controller/cmd_vel linear ratio = 6.13x

The top repeated latest-run trigger was:

(+0.150,+0.000)x4 -> (-0.150,-0.000)x4

### Error messages

```bash
TB4 linear acceleration envelope violated: accel=2.600 m/s^2 ratio=2.89 limit=0.900

To Reproduce

1. Start TurtleBot4 Standard simulation on ROS 2 Jazzy.
2. Record `/cmd_vel`, `/diffdrive_controller/cmd_vel`, `/odom`, `/wheel_vels`, and `/clock`.
3. Publish a safe linear command sequence:

```text
(+0.150,+0.000)x4 -> (-0.150,-0.000)x4

or this representative 8-step sequence:

step linear.x (m/s) angular.z (rad/s)
1 +0.019 -0.650
2 -0.120 -0.384
3 +0.136 +0.111
4 -0.097 +0.416
5 +0.030 -0.358
6 -0.054 -0.691
7 +0.030 +0.657
8 -0.030 +0.325
  1. Compute adjacent-sample acceleration on the linear.x component.
  2. Observe linear.x acceleration above 0.9 m/s^2.


### Other notes

```markdown
This is the most frequent and easiest-to-reproduce axis-specific manifestation of the broader acceleration-limit issue. It should not be dismissed as out-of-range input: the input stays below both `0.46 m/s` full-speed and approximately `0.306 m/s` safety-enabled speed.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions