Omniverse isaac.sim.ImuSim not being recorded via isaac.cask.Recorder component

Hi,

I am trying to run the Cartographer SLAM application that takes in recorded message logs from IMU measurements and lidar readings, but I’m running it in Isaac Sim Omniverse.

I have set up a virtual environment in Isaac Sim Omniverse that I want to SLAM with the Carter_REB robot. Below is the configuration that I am using to record the data.

{
  "name": "carter_record_sim",
  "modules": [
    "viewers",
    "zed",
    "sight"
  ],
  "graph": {
    "nodes": [
      {
        "name": "simulation",
        "subgraph": "packages/navsim/apps/navsim_navigation.subgraph.json"
      },
      {
        "name": "commander",
        "subgraph": "packages/navigation/apps/differential_base_commander.subgraph.json"
      },
      {
        "name": "record",
        "subgraph": "packages/cask/apps/record.subgraph.json"
      },
      {
        "name": "viewers",
        "components": [
          {
            "name": "MessageLedger",
            "type": "isaac::alice::MessageLedger"
          },
          {
            "name": "left_rgb",
            "type": "isaac::viewers::ImageViewer"
          },
          {
            "name": "right_rgb",
            "type": "isaac::viewers::ImageViewer"
          }
        ]
      }
    ],
    "edges": [
      {
        "source": "commander.subgraph/interface/command",
        "target": "simulation.interface/input/base_command"
      },
      {
        "source": "simulation.interface/output/color_left",
        "target": "viewers/left_rgb/image"
      },
      {
        "source": "simulation.interface/output/color_right",
        "target": "viewers/right_rgb/image"
      },
      {
        "source": "simulation.interface/output/base_state",
        "target": "record.interface/input/segway_state"
      },
      {
        "source": "simulation.interface/output/rangescan",
        "target": "record.interface/input/fullscan"
      },
      {
        "source": "simulation.interface/output/imu_raw",
        "target": "record.interface/input/imu_raw"
      },
      {
        "source": "simulation.interface/output/color_left",
        "target": "record.interface/input/left_rgb_thumbnail"
      },
      {
        "source": "simulation.interface/output/color_right",
        "target": "record.interface/input/right_rgb_thumbnail"
      }
    ]
  },
  "config": {
    "websight": {
      "WebsightServer": {
        "port": 3000,
        "ui_config": {
          "windows": {
            "Right Camera": {
              "renderer": "2d",
              "channels": [
                {
                  "name": "carter_record_sim/viewers/right_rgb/image"
                }
              ]
            },
            "Left Camera": {
              "renderer": "2d",
              "channels": [
                {
                  "name": "carter_record_sim/viewers/left_rgb/image"
                }
              ]
            }
          },
          "assets": {}
        }
      }
    },
    "record.interface": {
      "input": {
        "start_recording_automatically": false,
        "base_directory": "/tmp/isaac"
      }
    }
  }
} 

The issue I’m running into is after recording the data and feeding it into the log_cartographer application, I run into the following error where the imu_raw channel is not recognized:

...
2021-08-31 17:24:17.031 INFO  packages/sight/WebsightServer.cpp@117: Server connected / 1
2021-08-31 17:24:24.016 INFO  external/com_nvidia_isaac_engine/engine/alice/backend/allocator_backend.cpp@57: Optimized memory CPU allocator.
2021-08-31 17:24:24.016 INFO  external/com_nvidia_isaac_engine/engine/alice/backend/allocator_backend.cpp@66: Optimized memory CUDA allocator.
2021-08-31 17:24:36.889 INFO  packages/cask/gems/cask.cpp@69: Opening log '/tmp/isaac/be3d4fcc-0a9a-11ec-9653-f392e8f432cb/test000/kv' for reading
2021-08-31 17:24:36.889 DEBUG packages/cask/gems/utils.cpp@60: Available channel in cask: 'fullscan' (series: cf6ea0b6-0a9a-11ec-b278-d563e410d9ff)
2021-08-31 17:24:36.889 DEBUG packages/cask/gems/utils.cpp@60: Available channel in cask: 'right_rgb_thumbnail' (series: cf5f57c8-0a9a-11ec-b278-d563e410d9ff)
2021-08-31 17:24:36.889 DEBUG packages/cask/gems/utils.cpp@60: Available channel in cask: 'segway_state' (series: cf6be8bc-0a9a-11ec-b278-d563e410d9ff)
2021-08-31 17:24:36.889 DEBUG packages/cask/components/Replay.cpp@199: Available channel in cask: 'fullscan' (series: cf6ea0b6-0a9a-11ec-b278-d563e410d9ff)
2021-08-31 17:24:36.889 DEBUG packages/cask/components/Replay.cpp@199: Available channel in cask: 'right_rgb_thumbnail' (series: cf5f57c8-0a9a-11ec-b278-d563e410d9ff)
2021-08-31 17:24:36.889 DEBUG packages/cask/components/Replay.cpp@199: Available channel in cask: 'segway_state' (series: cf6be8bc-0a9a-11ec-b278-d563e410d9ff)
2021-08-31 17:24:36.890 DEBUG packages/cask/components/Replay.cpp@243: Replay 'fullscan': parsed 1416 message headers for time range [28639168268, 65719791423]
2021-08-31 17:24:36.890 PANIC packages/cask/components/Replay.cpp@206: Channel 'imu_raw' not found in log
====================================================================================================
|                            Isaac application terminated unexpectedly                             |
====================================================================================================

I have tried replacing the edge connection with the direct output from the isaac::imu::ImuSim component in the navsim_navigate_subgraph, however neither case outputs anything to the desired imu_raw channel:

"edges": [
    ...

    {
        "source": "simulation.interface/output/imu_raw",
        "target": "record.interface/input/imu_raw"
    }

    ...

with

"edges": [
    ...

    {
        "source": "simulation.imu/imusim/imu_raw",
        "target": "record.interface/input/imu_raw"
    }

    ...

Also I tried to run this recording configuration on the carter_warehouse_with_forklifts.usd scenario just to make sure that the Carter_REB was configured correctly in the simulation, and even in that case the imu_raw data channel would not be published nor recorded.

It’s clear from the error log that the rangescan/lidar data in the Isaac Sim is properly being recorded but for some reason the imu_raw channel from the ImuSim component isn’t. Does anyone know what I might be missing here?

Thanks in advance!

I found out the issue. I need to make sure the ImuSim parameter imu_name exactly matches the rigidbody prim path in Omniverse. In my case this was /Root/Carter_REB/imu, where before it was just imu. So in the config portion of the application I had to add:

"config": {
  ...
  "simulation.imu": {
    "imusim": {
      "imu_name": "/Root/Carter_REB/imu"
    }
  }
  ...
}