Skip to content

/odom.twist can exceed configured acceleration limits under safe commands #100

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

Installed from ROS apt packages:

ros-jazzy-turtlebot4-simulator: 2.0.2-1noble.20260616.091643
ros-jazzy-turtlebot4-gz-bringup: 2.0.2-1noble.20260616.085653
ros-jazzy-turtlebot4-gz-toolbox: 2.0.2-1noble.20260615.145933
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-gz-toolbox: 3.0.4-1noble.20260615.161517
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 odometry velocity stream should remain consistent with the configured Create3/TurtleBot4 acceleration envelope under safe `/cmd_vel` commands:

- `|d(odom.twist.twist.linear.x)/dt| <= 0.9 m/s^2`
- `|d(odom.twist.twist.angular.z)/dt| <= 7.725 rad/s^2`

Minor numerical noise or one-sample timing jitter should not produce sustained acceleration-limit violations.

Actual behaviour

The odometry stream shows sustained acceleration-envelope violations under safe commands. These cases are distinct from the direct command-path issue because the available `/diffdrive_controller/cmd_vel` evidence does not by itself isolate the failure to the limited-command topic. The likely root may be later in the simulation/control pipeline, such as wheel simulation, odometry integration, or controller output behavior.

Representative linear odom-only frame `1782630920.9406638`:

```text
TB4 linear acceleration envelope violated:
  accel = 1.912 m/s^2
  ratio = 2.12x
  limit = 0.900 m/s^2

Representative angular odom-only frame 1782633493.955823:

TB4 angular acceleration envelope violated:
  accel = -10.011 rad/s^2
  ratio = 1.30x
  limit = [-7.725, 7.725] rad/s^2

Representative combined odom-only frame 1782643396.2443988:

TB4 linear acceleration envelope violated:
  accel = 1.822 m/s^2
  ratio = 2.02x
  limit = 0.900 m/s^2

TB4 angular acceleration envelope violated:
  accel = -14.349 rad/s^2
  ratio = 1.86x
  limit = [-7.725, 7.725] rad/s^2

The latest 1000-round campaign observed max odom ratios of 2.95x linear and 2.33x angular while all external commands stayed within the configured velocity envelope.


### Error messages

```bash
TB4 linear acceleration envelope violated: accel=1.912 m/s^2 ratio=2.12 limit=0.900
TB4 angular acceleration envelope violated: accel=-10.011 rad/s^2 ratio=1.30 limit=[-7.725, 7.725]
TB4 linear acceleration envelope violated: accel=1.822 m/s^2 ratio=2.02 limit=0.900
TB4 angular acceleration envelope violated: accel=-14.349 rad/s^2 ratio=1.86 limit=[-7.725, 7.725]

To Reproduce

1. Start TurtleBot4 Standard simulation on ROS 2 Jazzy / Ubuntu 24.04.
2. Record:
   - `/cmd_vel`
   - `/diffdrive_controller/cmd_vel`
   - `/odom`
   - `/wheel_vels`
   - `/clock`
3. Publish one of these safe command sequences.

Linear odom-only representative:

| step | linear.x (m/s) | angular.z (rad/s) |
|---:|---:|---:|
| 1 | -0.116 | -0.738 |
| 2 | +0.050 | -0.179 |
| 3 | -0.074 | +0.517 |
| 4 | +0.030 | -0.650 |
| 5 | -0.040 | +0.655 |
| 6 | -0.106 | -0.487 |
| 7 | +0.010 | +0.342 |
| 8 | +0.030 | -0.650 |

Angular odom-only representative:

| step | linear.x (m/s) | angular.z (rad/s) |
|---:|---:|---:|
| 1 | -0.017 | +0.199 |
| 2 | +0.030 | +0.545 |
| 3 | +0.041 | -0.262 |
| 4 | +0.050 | +0.125 |
| 5 | +0.030 | -0.484 |
| 6 | +0.086 | +0.450 |
| 7 | +0.097 | -0.272 |
| 8 | -0.076 | +0.242 |

Combined odom-only representative:

```text
(+0.100,-0.500) x 8
  1. Compute adjacent-sample acceleration from /odom.twist.twist using message/header timestamps.
  2. Observe sustained acceleration ratios above the configured limits.


### Other notes

```markdown
This may share part of the same pipeline as the command-path acceleration issue, but it should be tested independently. If `/diffdrive_controller/cmd_vel` is within limits while `/odom` violates the limit, the bug is downstream of command limiting: wheel dynamics, physics, odometry calculation, or timestamp/publication behavior.

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