code: def _process_observation(self, raw_obs):
      new_obs = {}
  
      # TODO: Support multiple cameras, this assumes a single camera
      camera_name = self.base_parameters.camera_names
  
      camera_obs = raw_obs.get(camera_name + "_image", None)
      if camera_obs is not None:
          depth_obs = raw_obs.get(camera_name + "_depth", None)
          if depth_obs is not None:
              depth_obs = np.expand_dims(depth_obs, axis=2)
              camera_obs = np.concatenate(
                  [camera_obs, depth_obs], axis=2
              )
          new_obs["camera"] = camera_obs
  
      measurements = raw_obs["robot0_proprio-state"]
      object_obs = raw_obs.get("object-state", None)
      if object_obs is not None:
          measurements = np.concatenate([measurements, object_obs])
      new_obs["measurements"] = measurements
  
      return new_obs
  
imports: from typing import Union, Dict, Any
  from enum import Enum, Flag, auto
  from copy import deepcopy
  import numpy
  import random
  from collections import namedtuple
  from rl_coach.base_parameters import Parameters, VisualizationParameters
  from rl_coach.environments.environment import Environment, EnvironmentParameters, LevelSelection
  from rl_coach.spaces import BoxActionSpace, VectorObservationSpace, StateSpace, PlanarMapsObservationSpace
  import rl_coach.environments.robosuite.cube_exp
label_desc: Use image node_id 3 for calling the RobosuiteEnvironment obj's underlying member method code with example usage: obj._process_observation(raw_obs) and returns: new_obs