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?