22import os
33import time
44import math
5+ from functools import lru_cache
56
67import cv2
78import numpy as np
1112import genesis .utils .geom as gu
1213from genesis .sensors import Sensor
1314from genesis .utils .misc import tensor_to_array
14- from genesis .constants import CAMERA_TYPE
1515
1616
1717# quat for Madrona needs to be transformed to y-forward
@@ -92,7 +92,7 @@ def __init__(
9292 far = 100.0 ,
9393 transform = None ,
9494 env_idx = None ,
95- camera_type = CAMERA_TYPE . RASTERIZER ,
95+ debug = False ,
9696 ):
9797 self ._idx = idx
9898 self ._uid = gs .UID ()
@@ -117,7 +117,7 @@ def __init__(
117117 self ._is_built = False
118118 self ._attached_link = None
119119 self ._attached_offset_T = None
120- self ._camera_type = camera_type
120+ self ._debug = debug
121121
122122 self ._env_idx = env_idx
123123 self ._envs_offset = None
@@ -318,13 +318,13 @@ def _batch_render(
318318 # If n_envs == 0, the second dimension of the output is camera.
319319 # Only return the current camera's image
320320 if rgb_arr :
321- rgb_arr = rgb_arr [self ._idx ]
321+ rgb_arr = rgb_arr [self .b_idx ]
322322 if depth :
323- depth_arr = depth_arr [self ._idx ]
323+ depth_arr = depth_arr [self .b_idx ]
324324 if segmentation :
325- seg_arr = seg_arr [self ._idx ]
325+ seg_arr = seg_arr [self .b_idx ]
326326 if normal :
327- normal_arr = normal_arr [self ._idx ]
327+ normal_arr = normal_arr [self .b_idx ]
328328 return rgb_arr , depth_arr , seg_arr , normal_arr
329329
330330 @gs .assert_built
@@ -380,25 +380,22 @@ def render(
380380 """
381381 rgb_arr , depth_arr , seg_arr , seg_color_arr , normal_arr = None , None , None , None , None
382382
383- if self ._camera_type == CAMERA_TYPE .BATCH_RENDERER :
384- assert self ._batch_renderer is not None , "Batch renderer is not initialized."
383+ if not self ._debug and self ._batch_renderer is not None :
385384 rgb_arr , depth_arr , seg_idxc_arr , normal_arr = self ._batch_render (
386385 rgb , depth , segmentation , normal , force_render , antialiasing
387386 )
388- elif self ._camera_type == CAMERA_TYPE . RAYTRACER :
387+ elif self ._debug and self . _raytracer is not None :
389388 if rgb :
390- assert self ._raytracer is not None , "Ray tracer is not initialized."
391389 self ._raytracer .update_scene ()
392390 rgb_arr = self ._raytracer .render_camera (self )
393391
394392 if depth or segmentation or normal :
395- assert self ._rasterizer is not None , "Rasterizer is not initialized"
396393 self ._rasterizer .update_scene ()
397394 _ , depth_arr , seg_idxc_arr , normal_arr = self ._rasterizer .render_camera (
398395 self , False , depth , segmentation , normal = normal
399396 )
400- elif self . _camera_type == CAMERA_TYPE . RASTERIZER :
401- assert self . _rasterizer is not None , "Rasterizer is not initialized"
397+ else :
398+ print ( "Camera is debug camera" )
402399 self ._rasterizer .update_scene ()
403400 rgb_arr , depth_arr , seg_idxc_arr , normal_arr = self ._rasterizer .render_camera (
404401 self , rgb , depth , segmentation , normal = normal
@@ -716,7 +713,7 @@ def stop_recording(self, save_to_filename=None, fps=60):
716713 + f'_cam_{ self .idx } _{ time .strftime ("%Y%m%d_%H%M%S" )} .mp4'
717714 )
718715
719- if self ._rgb_stacked :
716+ if not self . _debug and self ._rgb_stacked :
720717 for env_idx in self ._visualizer ._context .rendered_envs_idx :
721718 env_imgs = [imgs [env_idx ] for imgs in self ._recorded_imgs ]
722719 env_name , env_ext = os .path .splitext (save_to_filename )
@@ -774,9 +771,18 @@ def is_built(self):
774771
775772 @property
776773 def idx (self ):
777- """The integer index of the camera."""
774+ """The global integer index of the camera."""
778775 return self ._idx
779776
777+ @property
778+ @lru_cache (maxsize = 1 )
779+ def b_idx (self ):
780+ """The index of the camera in the batch renderer."""
781+ assert self ._batch_renderer is not None , "Batch renderer is not initialized."
782+ print (f"{ [c .uid for c in self ._batch_renderer .cameras ]} " )
783+ print (f"self: { self .uid } " )
784+ return self ._batch_renderer .cameras .index (self )
785+
780786 @property
781787 def uid (self ):
782788 """The unique ID of the camera"""
@@ -861,9 +867,9 @@ def env_idx(self):
861867 return self ._env_idx
862868
863869 @property
864- def camera_type (self ):
865- """The type of camera."""
866- return self ._camera_type
870+ def debug (self ):
871+ """Whether the camera is a debug camera."""
872+ return self ._debug
867873
868874 @property
869875 def pos (self ):
0 commit comments