Difference between path planned in MoveIt and executed in Isaac Sim

Isaac Sim Version

4.5.0

Operating System

Ubuntu 22.04

GPU Information

  • Model: GeForce RTX3050
  • Driver Version: 550.120

Topic Description

Detailed Description

I have setup a Isaac Sim scene in which i want to control robots. For this, i am using MoveIt2 (ROS2 Humble) as described in these tutorials (isaac sim, moveit).

Steps to Reproduce

See tutorials and video in “related issues” below

Error Messages

NA

Screenshots or Videos

Here is a video highlighting the difference between moveit and isaac sim paths. One can see that the plan in moveit is right (robot move in a straight line) but the executed path in isaac sim is wrong (see joint#6).

Below is a plot of the isaac_joint_states and isaac_joint_commands topics used by Isaac Sim. We can clearly the tracking error on joint 6.

Additional Information

What I’ve Tried

The robot i am using was imported using URDF importer and its gains were set to “stiff” according to the recommendations. I tried with other robots (Stäubli, Universal Robots) but the same error still happens. I tried to change the stiffness but without success.
Moreover, i double checked and the joints limits are the good one so the robots should be able to execute the path

Related Issues

This problem is also described here for a Universal Robot (+ see linked video).

Hi @JeanLesur! Thanks for bringing this to our attention. There could be multiple reasons causing this issue.
Could you please check if the robot arm’s joints are within the operational limits? Maybe the command is trying to move the joint beyond its limit?
Maybe there is some collision between joints?
Do you have any warnings from the log?

If you can share a minimal setup, we can try to replicate and investigate it.

Hello,
thank you for the quick response.

i double check and the joints are always within the operational limits. And i also tried to remove the joint limits in isaac sim (since the motion plan is executed in moveit which is aware of the limits present in the URDF) but without success. The issue still persists and is very annoying.

From what i understand, Isaac Sim should only be following the motion plan published by moveit2 via topic_based_ros2_control. And since the motion plan sent by moveit is the right one (see video + plot), i don’t know what’s happening in here.

Would it be possible that isaac sim does not support moving many joints at the same time?

Hi zhengwang,

I got this issue several months ago and finally solved it by creating the articulation controller using scripts instead of OmniGraph. But I still do not understand what is going wrong with OmniGraph.

Details about my issue are also provided in my earlier question, I believe it is the same issue discussed here.

For a minimal setup, you can check the video link in my earlier question (with necessary USD files, ROS 2 package files, and step-by-step instructions provided).

Hope this issue can be resolved with your help!

3 Likes

@daohui.liu Thanks for your insights. Let me reach out to our internal team for this issue.

1 Like

Hello,
Do you have any updates on this issue?
It is blocking my development task.

Thank you and have a nice day!

Hello,
Quick update on my issue so far.
I still have the same problem for different robots: Yaskawa, Stäubli, UR.
Here are additional videos to better see the problem.

These robots were imported in Isaac Sim using the URDF importer so i am wondering if the issue could come from there. Additionally, when testing with the official ur10 assets (and also a panda3 robot), the issue does not seem to appear.

@zhengwang Do you know how the official assets were constructed? Was the URDF importer used?

Also, i made sure to have the “allow self-collision” flag set to False in the importer.

Hi @JeanLesur thanks for your information. Let me follow up with the internal team.

tagging @rgasoto as discussed at GTC25 Paris

I did some tests with the new Isaac Sim 5.0 and this problem still exists.

However, i noticed that this problem arises less frequently by adding a “physics scene” in the stage and setting its “timesteps per second” property to a higher number (e.g 60 => 240).

@JeanLesur thanks for testing it with Isaac Sim 5.0. I will reach out to the internal team about this.

Hello,
I am reaching back to you as i think i might have found some root causes of my issue. Let me explain:

The context: My simulation consist of a structure on which 3 manipulators are mounted (see picture below). Each manipulator consists of one robot arm (UR, Yaskawa or Staubli) and a gripper (Robotiq 2f140). The arms were all converted to USD using the URDF importer and the robotiq 2f140 gripper is a working asset already converted. Regarding file structure, my simulation.usd file is just a simple scene referencing my manipulators.usd files.

The problem: there is a discrepancy between the trajectory planned in MoveIt2 and the one executed in Isaac Sim. See previous posts above. I have this problem with all my manipulators, in all types of simulation:full sim with everything, or minimal sim with only the robot.

Partial solution 1: I started tuning some parameters of the PhysicsScene, notably the “Time Steps Per Second” that I increased from 60 to 120 and finally to 240. This made the “motion problem” less likely to happen in my “full simulation” (i.e with the 3 manipulators) although it was still appearing from times to times (but rare). However, testing this parameter change in a simpler simulation (i.e only one manipulator) completely removed the motion issue! I did many motion tests and all were executed correctly in the simulator :)

First half of the video with a timesteps/s at 120: executed correctly
Second hald of the video with a timesteps/s at 60: incorrect motion

only one manipulator: now working fine, see:

But when simulating more than one manipulator at the same time; the grippers started to act weirdly (very looking like a collision problem but no collision reported in the physics debug window). So I fixed the “moveit motion discrepancy problem” but then jumped into the “weird gripper behavior”. See video:

Note that the manipulator USD files are the exact same in both cases (referenced in the sim); so the issue does not come from the USD definition of the robot.

Partial solution 2: I then started tweaking the Minimum Position Iteration Count and Minimum Velocity Iteration Count (still in the PhysicsScene properties) to force the solver to do more iterations. Because I am suspecting the gripper to not be solved correctly by the physics engine due to a too low number of iterations and hence creating artificial collisions and thus weird behavior.
I tried higher number for the minimum iteration count like 64, 128, 200 and also the maximum at 255. I also tried to change the “Min Simulator Frame Rate” in the physics stage settings to increase the FPS but without success.

All values tested directly impact the FPS that drops to 5-6 FPS on my machine* :/ . The weird gripper behavior was less likely to happen but was not completely removed! I think 8 simulations out of 10 are not working properly due to the gripper.

Partial solution 3: improved performance mode on Linux to reach 5GHz in CPU freq made the simulation more fluid.

Question:
Considering that:

  • I tried the different optimization tricks described in the official documentation,
  • From the “Time Steps Per Second” documentation, it is stated that application might cap the number of simulation steps to avoid running more simulations steps with a low frame rate,
  • I made sure to simplify the simulation, removing all non-necessary colliders, trying to disable the rendering light reflection, shadows, etc,
  • The FPS reported by the GUI is still stuck at 5-6 FPS,

Is it possible that this problem is related to a performance issue? Meaning the computer is not able to handle all the required computations, hence capping the number of simulation steps, hence resulting in incorrect physics simulation?

Machine*: Asus ROG M16 with RTX4080 Laptop GPU (12Gb VRAM) and 32Gb RAM, running Isaac Sim 5.0.0

1 Like

Hi @JeanLesur thanks for your detailed description and videos! I reached out to the internal team for your additional analysis.
One thing we would like to ask is that whether or not you implemented action graph for your robot arms? If so, are you using the omninode On Physics Step or On Playback Tick?
In this case, it is recommended to use the On Physics Step because it executes an output execution pulse for every physics Simulation Step (doc).
Then the execution of your manipulator would align with the physics time. With the complexity of the scene, it might slow down the simulation (slower than real time) but it will make sure to simulate every step.

I am using the default builtin ROS2 Joint Omnigraph:

Thank you for the suggestion but unfortunately, the proposed solution does not work. Using a “On Physics Step” does not work at all and the robots don’t move anymore. The error in the terminal is:

2025-07-10T07:19:16Z [2,103,292ms] [Error] [isaacsim.core.nodes] Physics OnSimulationStep node detected in a non on-demand Graph. Node will only trigger events if the parent Graph is set to compute on-demand.

I know that one can change the pipeline in a script to “On Demand” , see this topic. However, i cannot find this option in the GUI of Isaac Sim 5.0.0

Yes you are look at the correct topic for using “On Physics Step” How Can I use On Physics Step Node?.

To change the pipeline to “On Demand”, you can click on the action graph → go to the property tab → expand “Raw usd properties” → change the pipelineStage to pipelineStageOnDemand.

Thank you for the answer.

I did try to replace the “on Playback Tick” with an “On Physics Steps” node in the omnigraph + i change the pipelineStage to “pipelineStageOnDemand”. Unfortunately, this does not solve the issue and creates more problems than using the base graph proposed in the tools menu. The problems are still related to incorrect motion execution

@JeanLesur Do you mind sharing your USD files with the assets and script for plotting the trajectory for us to replicate the issue? Please also provide detailed instructions.

Unfortunately, i am not able to share the USD file but it shouldn’t be complicated to recreate. I used the official tutorials tutorial 1, tutorial 2.

And for the omnigraph, i used the builtin one: Tools > Robotics > ROS2 Omnigraph > Joint States.

@JeanLesur Sorry to get back to you late. Could you please give it a try on Isaac Sim 5.0 and see if the issue persists?

I followed the tutorial 1 and subscribe to the topics isaac_joint_states and isaac_joint_commands and did the following plots. It looks like the joints are following command pretty well.

Hello!

We noticed that this topic hasn’t received any recent responses, so we are closing it for now to help keep the forum organized.

If you’re still experiencing this issue or have additional questions, please feel free to create a new topic with updated details. When doing so, we recommend mentioning or linking to this original topic in your new post—this helps provide context and makes it easier for others to assist you.

Thank you for being part of the NVIDIA Isaac Sim community.

Best regards,
The NVIDIA Isaac Sim Forum Team