We are working on controlling our robot using Isaac Sim and cuROBO. While we have successfully moved the robot in simulation, the real robot’s movements are shaky. We suspect this might be due to the ROS 2 publishing frame rate being too low.
Our robot requires a publishing rate of 150 Hz, but we’re unsure how to configure it to achieve this. Currently, we are using the motion_gen_reacher.py program for testing.
Could you please advise us on how to properly set up the desired publishing rate or troubleshoot the issue?
Thanks for your response, but not quite. With this node, I can only reduce the frame rate by a factor. I was hoping to publish at a rate of 100-150 Hz, but it seems that might not be achievable.
What is the current publishing rate? Why does it appear smooth in the simulation but shaky in the real robot? How do you determine that the robot requires 150 Hz?
The robot controller requires an update rate of 100–150 Hz to ensure smooth movements, as stated in the manufacturer’s documentation.
Robot Mode 1:
set_servo_cartesian/set_servo_cartesian_aa/set_servo_angle_j: streamed high-frequency [suggestion: 100 ~ 250Hz fixed] trajectory command execution in Cartesian space or joint space, this mode is especially useful for external trajectory planner which generates time parameterized servo command (e.g. Moveit+ros-controllers) or sensor guided motion. Special RISK ASSESMENT is required before using them and please note there is no further interpolation and speed control in this mode.
I contacted the manufacturer regarding this issue, and they suggested using an alternative communication method, such as their Python API or MoveIt, which might resolve the problem.
When I tested the current publishing rate using the command:
ros2 topic hz /joint_states
I observed a rate of only 5 Hz.
We suspect that the low update rate could be causing the robot’s shaky behavior in the real world. However, other factors might also be contributing to the issue, and it’s possible that the update rate is not the primary cause.
Hey @theo.bloesch. Publish rate of 5 Hz seems too low. What is your simulation frame rate? Have you tried using action graph node ROS2 Publish Joint State instead of generic publisher? I wonder if this plays a factor. I tried a simple example and the publish rate is about 60 Hz, which is the same as the default Isaac Sim frame rate 60 fps.
Here is a tutorial of changing simulation frame rate which seems to be relevant in this case. But I am not able to achieve a higher publish rate even though the frame rate is higher. I am not sure if it is due to my hardware limit.
Let me pass this down to the internal team for better advice.
Hey @theo.bloesch! How do you consume the published data? Do you use a ROS2 subscriber node to take in the joint state data? At what rate are you able to clear the subscription queue? The current design limits Isaac Sim fps if downstream subscriber is not clearing the DDS queue on the publisher side fast enough. Maybe you can try best effort QOS with queue depth 1 and see if you can achieve the desired publish rate.
The robot follows the simulation, but it shakes, especially near the end of its trajectory. I previously tried setting the queue depth to 1, but it made things worse. However, I will try it again while adjusting the QoS settings as well.
Additionally, I’ll test the rate at which I can clear the subscription queue to see if that helps improve performance.