Skip to content

Movement overshoot with UR20 and ROS2-humble #1537

@leander2189

Description

@leander2189

Affected ROS2 Driver version(s)

2.8.1-1jammy.20250915.231359

Used ROS distribution.

Humble

Which combination of platform is the ROS driver running on.

Docker

How is the UR ROS2 Driver installed.

From binary packets

Which robot platform is the driver connected to.

UR E-series robot

Robot SW / URSim version(s)

5.17.3

How is the ROS driver used.

Through the robot teach pendant using External Control URCap

Issue details

Summary

When doing long movements, the UR overshoots the final position and then corrects it back. This entails a serious risk for collisions.

WhatsApp.Video.2025-10-14.at.16.13.35.mp4

Issue details

We are running the software stack within a docker container, in a Ubuntu 22.04 with realtime kernel installed.

uname -a
Linux rout0-240626aa 5.15.0-1032-realtime #35-Ubuntu SMP PREEMPT_RT Tue Jan 24 11:45:03 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

I am not 100% sure whether the code inside the docker is using the realtime feature but it's not complaining in the launch (it did before the realtime kernel was installed)

We are controlling the UR20 using external control URCap, generating the motion plan using MoveIt and MTC. It looks like the controller detects that the UR has reached the position and returns (process keeps going on, see the light turning on in the video), but the robot is actually moving a little further and then it corrects back.

We are using a copy of ur_control.launch.py, running the ur_ros2_control node and the scaled_joint_trajectory_controller. These are the settings we have:

update_rate.yaml

controller_manager:
  ros__parameters:
    update_rate: 500  # Hz

ros2_control_configuration.yaml

scaled_joint_trajectory_controller:
  ros__parameters:
    joints:
      - ur_shoulder_pan_joint
      - ur_shoulder_lift_joint
      - ur_elbow_joint
      - ur_wrist_1_joint
      - ur_wrist_2_joint
      - ur_wrist_3_joint
    command_interfaces:
      - position
    state_interfaces:
      - position
      - velocity
    state_publish_rate: 200.0
    action_monitor_rate: 100.0
    allow_partial_joints_goal: false
    constraints:
      stopped_velocity_tolerance: 0.2
      goal_time: 0.0
      ur_shoulder_pan_joint: { trajectory: 0.05, goal: 0.03 }
      ur_shoulder_lift_joint: { trajectory: 0.05, goal: 0.03 }
      ur_elbow_joint: { trajectory: 0.05, goal: 0.03 }
      ur_wrist_1_joint: { trajectory: 0.05, goal: 0.03 }
      ur_wrist_2_joint: { trajectory: 0.05, goal: 0.03 }
      ur_wrist_3_joint: { trajectory: 0.05, goal: 0.03 }
    speed_scaling_interface_name: ur_speed_scaling/speed_scaling_factor

Expected Behavior

The robot should follow accurately the planned trajectory

Relevant log output

Accept Public visibility

  • I agree to make this context public

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions