ROS2 Camera topic publish Hz control (Camera FPS Fix problem using ros2)

I want to get the camera topic of fixed fps ( 30 ) when i publish the camera topic(/carter1/rgb_left, /carter1/rgb_right) using ros2.

  1. At first, I set the “FPS Limit” ( =10 _ just test ) But like below figure, It does not apply.
    ( In figure, FPS Limit is 10, but camera fps published is 22.34 )

And then, What should i do if i want to get the fixed fps of camera topic using ros2 in isaac sim?
Now I am using the omnigraph for getting the ros topics ( camera, imu, lidar etc ).
And also when the scene is more complicated or I open multiple viewport, FPS decreased.

  1. Second, I found the RTX Option(real time & interactive & accurate ), What is differences between them? When i choose “Interactive option” like below, scene looks like blurry and dark. ( But real-time looks good )

  2. Is it possible to get the topic of fixed fps if i use the Enterprise version?

  3. Lastly, I want to publish various sensor topic ( imu, camera, lidar ). In this case, Can i get it at a fixed fps for each topic? ( like camera = 30 fps, IMU = 110hz )

Thank you so much for reading. If anyone knows, Please reply me… !!

Thank you

1 Like

@Hammad_M Can you help to respond this thread? @phr0201 can elaborate more on the question if this is not clear to you. She is looking for a way to set FPS Limit forthe camera topic. Thank you!

1 Like

@phr0201 Are you using isaac-sim.sh or python.sh + SImulationApp?
There are different ways of fixing the rendering FPS based on the simulation method.

There are also additional options mentioned here if you want to reduce the publishing rate by a fixed multiple.

https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/tutorial_ros_migration.html#periodic-image-publishing

If you want to Publish at an increased rate that is possible in certain circumstances. For example to publish a simulation clock message every physics step you can take a look at
standalone_examples/api/omni.isaac.quadruped/go1_ros1_standalone.py

Where a specific graph like

 try:
            keys = og.Controller.Keys
            (self._clock_graph, _, _, _) = og.Controller.edit(
                {
                    "graph_path": "/ROS_Clock",
                    "evaluator_name": "push",
                    "pipeline_stage": og.GraphPipelineStage.GRAPH_PIPELINE_STAGE_ONDEMAND,
                },
                {
                    keys.CREATE_NODES: [
                        ("OnTick", "omni.graph.action.OnTick"),
                        ("readSimTime", "omni.isaac.core_nodes.IsaacReadSimulationTime"),
                        ("publishClock", "omni.isaac.ros_bridge.ROS1PublishClock"),
                    ],
                    keys.CONNECT: [
                        ("OnTick.outputs:tick", "publishClock.inputs:execIn"),
                        ("readSimTime.outputs:simulationTime", "publishClock.inputs:timeStamp"),
                    ],
                },
            )
        except Exception as e:
            print(e)
            simulation_app.close()
            exit()

is then manually run each physics step:

og.Controller.evaluate_sync(self._clock_graph)

Also take a look at standalone_examples/api/omni.isaac.core/time_stepping.py

For various options on stepping time forward at specific frequencies/step sizes.

Thank you for replying me!

By the way, Your examples are all based on ros1, but i want to use ros2.
Because i want to get the 30 fps camera topics(e.g /carter1/rgb_left) in isaac sim (2022.1.1 release version) based on ros2.
Is it possible applying above examples in ros2 environment?

Thank you!

Yes the same applies to ROS2 Omnigraph nodes as well.
Note that if your current FPS is lower than 30, there is no way to increase this because its GPU/CPU limited performance wise.

You can however run slower than realtime and use the sim_time clock message from isaac sim to keep things in sync.