def __init__(self, sim: Simulator, agent: Agent, sensor_id: str) -> None: self._sim = sim self._agent = agent # sensor is an attached object to the scene node # store such "attached object" in _sensor_object self._sensor_object = self._agent._sensors[sensor_id] self._spec = self._sensor_object.specification() self._sim.renderer.bind_render_target(self._sensor_object) if self._spec.gpu2gpu_transfer: assert cuda_enabled, "Must build habitat sim with cuda for gpu2gpu-transfer" assert _HAS_TORCH device = torch.device("cuda", self._sim.gpu_device) # type: ignore[attr-defined] torch.cuda.set_device(device) resolution = self._spec.resolution if self._spec.sensor_type == SensorType.SEMANTIC: self._buffer: Union[np.ndarray, "Tensor"] = torch.empty( resolution[0], resolution[1], dtype=torch.int32, device=device ) elif self._spec.sensor_type == SensorType.DEPTH: self._buffer = torch.empty( resolution[0], resolution[1], dtype=torch.float32, device=device ) else: self._buffer = torch.empty( resolution[0], resolution[1], 4, dtype=torch.uint8, device=device ) else: if self._spec.sensor_type == SensorType.SEMANTIC: self._buffer = np.empty( (self._spec.resolution[0], self._spec.resolution[1]), dtype=np.uint32, ) elif self._spec.sensor_type == SensorType.DEPTH: self._buffer = np.empty( (self._spec.resolution[0], self._spec.resolution[1]), dtype=np.float32, ) else: self._buffer = np.empty( ( self._spec.resolution[0], self._spec.resolution[1], self._spec.channels, ), dtype=np.uint8, ) noise_model_kwargs = self._spec.noise_model_kwargs self._noise_model = make_sensor_noise_model( self._spec.noise_model, {"gpu_device_id": self._sim.gpu_device, **noise_model_kwargs}, ) assert self._noise_model.is_valid_sensor_type( self._spec.sensor_type ), "Noise model '{}' is not valid for sensor '{}'".format( self._spec.noise_model, self._spec.uuid )
def __init__(self, sim, agent, sensor_id): global torch self._sim = sim self._agent = agent # sensor is an attached object to the scene node # store such "attached object" in _sensor_object self._sensor_object = self._agent._sensors.get(sensor_id) self._spec = self._sensor_object.specification() self._sim.renderer.bind_render_target(self._sensor_object) if self._spec.gpu2gpu_transfer: assert (hsim.cuda_enabled ), "Must build habitat sim with cuda for gpu2gpu-transfer" if torch is None: import torch device = torch.device("cuda", self._sim.gpu_device) torch.cuda.set_device(device) resolution = self._spec.resolution if self._spec.sensor_type == hsim.SensorType.SEMANTIC: self._buffer = torch.empty(resolution[0], resolution[1], dtype=torch.int32, device=device) elif self._spec.sensor_type == hsim.SensorType.DEPTH: self._buffer = torch.empty(resolution[0], resolution[1], dtype=torch.float32, device=device) else: self._buffer = torch.empty(resolution[0], resolution[1], 4, dtype=torch.uint8, device=device) else: if self._spec.sensor_type == hsim.SensorType.SEMANTIC: self._buffer = np.empty( (self._spec.resolution[0], self._spec.resolution[1]), dtype=np.uint32, ) elif self._spec.sensor_type == hsim.SensorType.DEPTH: self._buffer = np.empty( (self._spec.resolution[0], self._spec.resolution[1]), dtype=np.float32, ) else: self._buffer = np.empty( ( self._spec.resolution[0], self._spec.resolution[1], self._spec.channels, ), dtype=np.uint8, ) noise_model_kwargs = self._spec.noise_model_kwargs self._noise_model = make_sensor_noise_model( self._spec.noise_model, { "gpu_device_id": self._sim.gpu_device, **noise_model_kwargs }, ) assert self._noise_model.is_valid_sensor_type( self._spec.sensor_type ), "Noise model '{}' is not valid for sensor '{}'".format( self._spec.noise_model, self._spec.uuid)