Skip to main content

Camera Sensors

This page provides instructions and snippets of deploying camera sensors.

Creating Camera Sensors

Assume that you have a task class called MyTask(Task), instantiated as task. It has a member task.gym as the Isaac Gym instance.

Prepare the Camera Poses

You need to specify the positions and the looking positions of the cameras, in the environments' local frames. E.g. you want 2 (specified by task.num_cameras) cameras placed at (0.5, 0.0, 0.3), (-0.5, 0.0, 0.3) (camera_eye_list), and looking at (0.0, 0.0, 0.1), (0.0, 0.0, 0.1) (camera_lookat_list), respectively, you can set the member of the task (inside its __init__ method):

self.camera_eye_list = [ [0.5, 0.0, 0.3], [-0.5, 0.0, 0.3] ]
self.camera_lookat_list = [ [0.0, 0.0, 0.1], [0.0, 0.0, 0.1] ]

Define Cameras

In the __init__ function of the task class, add the code below to create.

for i_env in range(num_envs):
depth_tensors = []
rgb_tensors = []
seg_tensors = []
vinv_mats = []
proj_mats = []
for i in range(self.num_cameras):
camera_handle = self.gym.create_camera_sensor(env_ptr, self.camera_props)
self.camera_handles.append(camera_handle)

camera_eye = self.camera_eye_list[i]
camera_lookat = self.camera_lookat_list[i]
self.gym.set_camera_location(camera_handle, env_ptr, camera_eye, camera_lookat)

camera_tensor_depth = self.gym.get_camera_image_gpu_tensor(self.sim, env_ptr, camera_handle, gymapi.IMAGE_DEPTH)
camera_tensor_rgb = self.gym.get_camera_image_gpu_tensor(self.sim, env_ptr, camera_handle, gymapi.IMAGE_COLOR)
camera_tensor_rgb_seg = self.gym.get_camera_image_gpu_tensor(self.sim, env_ptr, camera_handle, gymapi.IMAGE_SEGMENTATION)
torch_cam_depth_tensor = gymtorch.wrap_tensor(camera_tensor_depth)
torch_cam_rgb_tensor = gymtorch.wrap_tensor(camera_tensor_rgb)
torch_cam_rgb_seg_tensor = gymtorch.wrap_tensor(camera_tensor_rgb_seg)

cam_vinv = torch.inverse(torch.tensor(self.gym.get_camera_view_matrix(self.sim, env_ptr, camera_handle))).to(self.device)
cam_proj = torch.tensor(self.gym.get_camera_proj_matrix(self.sim, env_ptr, camera_handle),device=self.device,)

origin = self.gym.get_env_origin(env_ptr)
self.env_origin[env_id][0] = origin.x
self.env_origin[env_id][1] = origin.y
self.env_origin[env_id][2] = origin.z

depth_tensors.append(torch_cam_depth_tensor)
rgb_tensors.append(torch_cam_rgb_tensor)
seg_tensors.append(torch_cam_rgb_seg_tensor)
vinv_mats.append(cam_vinv)
proj_mats.append(cam_proj)

depth_tensors.append(torch_cam_depth_tensor)
rgb_tensors.append(torch_cam_rgb_tensor)
seg_tensors.append(torch_cam_rgb_seg_tensor)
vinv_mats.append(cam_vinv)
proj_mats.append(cam_proj)