I’m running a simulation in Isaac Sim using ROS 2 for my six-wheeled robot, which also has four articulated joints (something likes roger-bogie system in rover). I’ve implemented teleop control via the keyboard, and everything works well in the simulation—the robot moves as expected.
However, when I attempt to publish the /joint_states topic using the Ros2 Publish Joint State node in OmniGraph, I encounter an issue with the velocities. Specifically:
The position and effort values are published correctly.
The velocity values for the joints keep toggling between NaN and normal values, as you can see in three screenshot of my consecutive messages.
Since the rest of the data is published properly and the robot behaves correctly in the simulation, I’m not sure where to check for issues related to the velocity. Has anyone encountered this problem before or have suggestions on where to troubleshoot?
Any help or guidance would be greatly appreciated. Thanks!
For more information, this is the plot of two wheels in foxglove (I send the cmd_vel to move the robot forward and then stop). You can see that the joint velocity is retrieved, but not continuous like position and effort. Also there is some weird overshoot of the value (~around 300 rad/s). The robot inside simulation works properly
Hi @zhengwang, thank you very much for your reply! I’ve already run through the tutorial. The omni graph joint state publisher works well in the example of turtla bot one, but I’m having some issues with my own robot (I’m a beginner, so I’m not really sure where the problem might be). If you don’t mind, I’d like to share a minimized version of my USD file here for your review.
I noticed that you created the robot inside the scene. Could you try separating scene and robot USD files? You can save the robot (together with the action graphs) as a separate USD file. Then you can create a new scene with a ground plane and import the robot. Let me know if this resolves your issue.
Thank you for your advice. I’ve found a temporary solution: creating a fresh scene and re-importing the robot resolves the joint state issue. However, I have a couple of follow-up questions:
Is there a more specific solution or known cause for this problem?
For future edits to my robot, would you recommend modifying the separate USD file and then re-importing it instead of editing the robot directly within the scene?
I’m trying to understand the best workflow to avoid similar issues in the future.
I followed @zhengwang recommendation and my problem is solved. In my case, I recreate the scene, ground plane, physics scene, etc. then I re-imported my robot.usd to the stage. After running the simulation, I can read the joint velocity. However, I’m still get some overshoot of the velocity value, but this maybe solved by tuning the physics properties properly
Here is the example of velocity data from my robot’s joint encoder (plotting in Foxglove)