From the _data_acquisition_callback API of the omni.issac.sensor.camera class, it seems that the data will only update if the current_time is exactly divisible by the period of the camera.
def _data_acquisition_callback(self, event: carb.events.IEvent): frame_number = ( og.Controller() .node("/Render/PostProcess/SDGPipeline/PostProcessDispatcher") .get_attribute("outputs:swhFrameNumber") .get() ) current_time = self._core_nodes_interface.get_sim_time_at_swh_frame(frame_number) if round(current_time % self.get_dt(), 4) == 0: self._current_frame["rendering_frame"] = frame_number self._current_frame["rgba"] = self._rgb_annotator.get_data() self._current_frame["rendering_time"] = current_time for key in self._current_frame: if key not in ["rgba", "rendering_time", "rendering_frame"]: # to be added: conversion to each backend self._current_frame[key] = self._custom_annotators[key].get_data() return
However, if SimulationContext.play() was called somewhere which seems to advance the timeline internally by one physics step, the current_time of the simulation may cause the above condition to be never triggered again.
Assuming that the physics_dt = 0.001 and the render_dt=0.05 and the camera dt to be 0.1. If you do
world.play() while True: world.step(render=True)
In the _data_acquisition_callback, the current_time will be 0.051, 0.101, 0.151… which are all no longer exactly divisible by the camera dt.
Deeply appreciate if you could help confirm whether this behaviour is intended and fix if it is a bug. Thanks in advance.