Obtaining specific/multiple camera views over Robot Engine Bridge (REB)

I’m currently working on an app in Isaac SDK that attempts to handle and process multiple REB camera views. I’m using the navsim_navigation subgraph from the navsim to obtain the RGB/color image data, but when I expect to receive a fixed camera view from the REB camera placed in my USD environment, I instead am receiving a feed of the current Viewport camera instead. If it only allows me to access the Viewport, that makes it difficult to handle multiple camera feeds at once.

When I read into the details of the REB camera in the environment it says the node name is “interface”, the component is “output” and the channel is “color”, but I’m not sure if this specific “interface” node is a different one from the one attached to the simulation node. Any clarity on this would be helpful. Thank you!

Here is my app.json file for reference:

{
“name”: “warehouse_forklift”,
“modules”: [
“sight”,
“viewers”,
“//apps/samples/warehouse_forklift:read_rgb”
],
“graph”: {
“nodes”: [
{
“name”: “simulation”,
“subgraph”: “packages/navsim/apps/navsim_navigation.subgraph.json”
},
{
“name”: “read_node”,
“components”: [
{
“name”: “message_ledger”,
“type”: “isaac::alice::MessageLedger”
},
{
“name”: “rgb_reader”,
“type”: “isaac::samples::ReadRGB”
}
]
},
{
“name”: “viewer”,
“components”: [
{
“name”: “message_ledger”,
“type”: “isaac::alice::MessageLedger”
},
{
“name”: “image_viewer”,
“type”: “isaac::viewers::ImageViewer”
}
]
}
],
“edges”: [
{
“source”: “simulation.interface/output/color”,
“target”: “read_node/rgb_reader/image”
},
{
“source”: “simulation.interface/output/color”,
“target”: “viewer/image_viewer/image”
}
]
},
“config”: {
“read_node” : {
“rgb_reader” : {
“tick_period” : “3s”
}
},
“viewer”: {
“ImageViewer”: {
“target_fps”: 20,
“reduce_scale”: 4
}
},
“websight”: {
“WebsightServer”: {
“port”: 3000,
“ui_config”: {
“windows”: {
“Camera”: {
“renderer”: “2d”,
“dims”: {
“width”: 640,
“height”: 480
},
“channels”: [
{
“name”: “warehouse_forklift/viewer/image_viewer/image”
}
]
}
}
}
}
}
}
}

Hi, did you find a solution? I have a similar situation where I have left and right cameras but only the current view gets passed.

# ISAAC SDK Application snippet
  def add_camera_widget(sight_node, cam_viz_node, 
                        channel_component, channel_topic,
                        viz_topic_name=None,
                        viewer_type = 'image'):
    """
    Creates a Viewer object and connects to WebSight

    sight_node    - node object for WebSight
    cam_viz_node  - node object for camera visualizer where 
                    viewer components will be placed
    channel_component - channel within which the input comes
    channel_topic     - name of topic for camera stream
    viz_topic_name    - name of camera viewer
    viewer_type       - Type of viewer (image or depth)          
    """
    if viewer_type == "image":
      viewer_registry_type = app.registry.isaac.viewers.ImageViewer
      suffix_input = suffix_display = "image"
    elif viewer_type == "depth":
      viewer_registry_type = app.registry.isaac.viewers.DepthCameraViewer
      suffix_input = "depth"
      suffix_display = "Depth"
    else:
      raise ValueError()

    if viz_topic_name is None:
      viz_topic_name = channel_topic
      
    cam_viz_node_component = cam_viz_node.add(viewer_registry_type, viz_topic_name)


    app.connect(channel_component, channel_topic, 
                cam_viz_node_component, suffix_input)
    app.connect(channel_component, channel_topic+"_intrinsics",
                cam_viz_node_component, "intrinsics")

    component_name = cam_viz_node.name+"/"+viz_topic_name+"/"+suffix_display
    add_WebSight_widget(sight_node, 
                        viz_topic_name, "2d", 
                        component_name)
    return cam_viz_node_component

  #########################################################
  # ADD RGB AND DEPTH CAMERAS FROM ISAAC SIM TO WEBSIGHT
  #########################################################
  camera_visualization = app.add('camera_visualization')
  TOPIC_SUFFIX_LIST = ["_left", "_right"]
  for SUFFIX in TOPIC_SUFFIX_LIST:
    COLOR_TOPIC = "color"+SUFFIX
    DEPTH_TOPIC = "depth"+SUFFIX
    add_camera_widget(sight_node, camera_visualization, sim_out, 
                                COLOR_TOPIC, 'ImageViewer'+SUFFIX,
                                viewer_type = "image")
    add_camera_widget(sight_node, camera_visualization, sim_out, 
                                  DEPTH_TOPIC, 'DepthViewer'+SUFFIX,
                                  viewer_type = "depth")

The solution I found was to make the cameras Instanciable in the Simulator. This way they can be displayed independently