Can't tick ROS Camera anymore! Publish when render

Hello there.

I have a problem. In the previous Isaac version I could do something like:

omni.kit.execute_command("ROSBridgeTickComponent", ros_camera)

Now this was indeed beautiful, allowing me to publish one camera whenever I wanted, calling render “100” times, and be happy and sure that the scene was completely rendered. (following the issue that simulation_context.render() is non-blocking and follows dt instead of following the complete rendering of the scene → read fps).

Following your tutorial for the TF and the Clock I went and wrote the following

{
            "graph_path": "/ROSCamera",
            "evaluator_name": "execution",
        },
        {
            og.Controller.Keys.CREATE_NODES: [
                ("OnImpulseEvent", "omni.graph.action.OnImpulseEvent"),
                ("cameraHelperRgb", "omni.isaac.ros_bridge.ROS1CameraHelper"),
                ("cameraHelperDepth", "omni.isaac.ros_bridge.ROS1CameraHelper"),
                ("cameraHelperInfo", "omni.isaac.ros_bridge.ROS1CameraHelper"),
            ],
            og.Controller.Keys.CONNECT: [
                ("OnImpulseEvent.outputs:execOut", "cameraHelperRgb.inputs:execIn"),
                ("OnImpulseEvent.outputs:execOut", "cameraHelperDepth.inputs:execIn"),
                ("OnImpulseEvent.outputs:execOut", "cameraHelperInfo.inputs:execIn"),
            ],
            og.Controller.Keys.SET_VALUES: [
                ("cameraHelperRgb.inputs:viewport", viewport_name),
                ("cameraHelperDepth.inputs:viewport", viewport_name),
                ("cameraHelperInfo.inputs:viewport", viewport_name),

                ("cameraHelperRgb.inputs:frameId", path[1:]),
                ("cameraHelperRgb.inputs:topicName", path + f"/rgb/image_raw"),
                ("cameraHelperRgb.inputs:type", "rgb"),

                ("cameraHelperDepth.inputs:frameId", path[1:]),
                ("cameraHelperDepth.inputs:topicName", path + f"/depth/image_raw"),
                ("cameraHelperDepth.inputs:type", "depth"),

                ("cameraHelperInfo.inputs:frameId", path[1:]),
                ("cameraHelperInfo.inputs:topicName", path + f"/camera_info"),
                ("cameraHelperInfo.inputs:type", "camera_info"),
            ],
        },
}

As you can see I’ve placed the impulse event.

So, theoretically, by running og.Controller.set(og.Controller.attribute(f"{cam}/OnImpulseEvent.state:enableImpulse"), True) I should be able to tick the camera at whichever framerate I want. However, once this is done and the camera starts publishing, it never stops, and every time simulation_context.render() /simulation_context.step() is called the camera publish a ROS message (with the correct clock but with the wrong framerate if, for example, render is called 64 times during pathtracing).

How can I solve this?

@hmazhar