[isaacsim.kit.xr.teleop.bridge] Isaac Kit XR Teleop Bridge#
Version: 1.1.2
Overview#
This extension provides OpenXR handle access for teleoperation integrations and fills API gaps across Kit versions.
It exposes a C++/Python bridge that:
gives access to OpenXR handles needed by external libraries (for example IsaacTeleop DeviceIO),
polyfills missing handle helpers into
omni.kit.xr.system.openxr,and lets you configure or extend required OpenXR extension names.
What It Provides#
The bridge exposes these functions from isaacsim.kit.xr.teleop.bridge:
get_instance_handle()->XrInstanceasint(0when unavailable)get_session_handle()->XrSessionasint(0when unavailable)get_stage_space_handle()->XrSpaceasint(0when unavailable)get_instance_proc_addr()->xrGetInstanceProcAddrasint(0when unavailable)subscribe_required_extensions(callback)-> RAII subscription handle
On import, the extension also patches missing functions into omni.kit.xr.system.openxr
(only the missing ones, never overriding existing functions).
Quick Start#
import isaacsim.kit.xr.teleop.bridge # Triggers polyfill for missing openxr helpers
import omni.kit.xr.system.openxr as openxr
from teleopcore.oxr import OpenXRSessionHandles
from teleopcore.deviceio import DeviceIOSession, HandTracker
handles = OpenXRSessionHandles(
openxr.get_instance_handle(),
openxr.get_session_handle(),
openxr.get_stage_space_handle(),
openxr.get_instance_proc_addr(),
)
with DeviceIOSession.run([HandTracker()], handles) as session:
while running:
session.update()
Required OpenXR Extensions#
The bridge component resolves its required OpenXR extension names using settings and optional runtime callbacks.
Settings keys#
exts."isaacsim.kit.xr.teleop.bridge".openxr.requiredExtensions.setexts."isaacsim.kit.xr.teleop.bridge".openxr.requiredExtensions.addexts."isaacsim.kit.xr.teleop.bridge".openxr.requiredExtensions.remove
Resolution order#
Start from
setApply
add(deduplicated)Apply
removeAppend all callback-provided extensions (deduplicated)
If settings are unavailable, the bridge falls back to:
XR_KHR_convert_timespec_timeXR_NVX1_tensor_data
Example: replace/add/remove via settings#
[settings]
exts."isaacsim.kit.xr.teleop.bridge".openxr.requiredExtensions.set = [
"XR_KHR_convert_timespec_time",
]
exts."isaacsim.kit.xr.teleop.bridge".openxr.requiredExtensions.add = [
"XR_FB_passthrough",
]
exts."isaacsim.kit.xr.teleop.bridge".openxr.requiredExtensions.remove = [
"XR_KHR_convert_timespec_time",
]
Example: explicitly clear the settings list#
[settings]
exts."isaacsim.kit.xr.teleop.bridge".openxr.requiredExtensions.set = []
exts."isaacsim.kit.xr.teleop.bridge".openxr.requiredExtensions.add = []
exts."isaacsim.kit.xr.teleop.bridge".openxr.requiredExtensions.remove = []
Runtime Callback Subscription (RAII)#
You can append required extensions at runtime by subscribing a callback.
import isaacsim.kit.xr.teleop.bridge as bridge
required_ext_subscription = bridge.subscribe_required_extensions(
lambda: ["XR_FB_passthrough", "XR_EXT_hand_tracking"]
)
# Keep `required_ext_subscription` alive while you want callback active.
# Unsubscribe explicitly:
required_ext_subscription.reset()
# Or drop all references (for example: required_ext_subscription = None).
Behavior notes:
Callback signature is
() -> list[str](or any iterable of strings).Callback results are deduplicated against the final extension list.
Exceptions thrown by callbacks are caught and logged; resolution continues.
Subscription lifetime is tied to the returned subscription handle object.
Direct Function Usage#
You can call bridge helpers directly without going through openxr polyfills:
import isaacsim.kit.xr.teleop.bridge as bridge
proc_addr = bridge.get_instance_proc_addr()
Compatibility Notes#
On newer Kit versions where some helpers already exist in
omni.kit.xr.system.openxr, this extension only adds missing helpers.If/when
get_instance_proc_addr()is provided natively, the bridge will not override it.
Enable Extension#
The extension can be enabled (if not already) in one of the following ways:
Define the next entry as an application argument from a terminal.
APP_SCRIPT.(sh|bat) --enable isaacsim.kit.xr.teleop.bridge
Define the next entry under [dependencies] in an experience (.kit) file or an extension configuration (extension.toml) file.
[dependencies]
"isaacsim.kit.xr.teleop.bridge" = {}
Open the Window > Extensions menu in a running application instance and search for isaacsim.kit.xr.teleop.bridge.
Then, toggle the enable control button if it is not already active.
Settings#
Extension Settings#
The table list the extension-specific settings.
Setting name |
Description |
Type |
Default value |
|---|---|---|---|
|
Base required OpenXR extension list for this bridge component. If non-empty, this list becomes the starting value before add/remove are applied. |
|
|
|
Additional OpenXR extensions to append to the resolved required extension list. Duplicate values are ignored. |
|
|
|
OpenXR extensions to remove from the resolved required extension list. |
|
|
The extension-specific settings can be either specified (set) or retrieved (get) in one of the following ways:
Define the key and value of the setting as an application argument from a terminal.
APP_SCRIPT.(sh|bat) --/exts/isaacsim.kit.xr.teleop.bridge/SETTING_NAME=SETTING_VALUE
Define the key and value of the setting under [settings] in an experience (.kit) file or an extension configuration (extension.toml) file.
[settings]
exts."isaacsim.kit.xr.teleop.bridge".SETTING_NAME = SETTING_VALUE
Define the key and value of the setting using the carb framework (in Python).
import carb
settings = carb.settings.get_settings()
settings.set("/exts/isaacsim.kit.xr.teleop.bridge/SETTING_NAME", SETTING_VALUE)
Define the key to query the value of the setting using the carb framework (in Python).
import carb
settings = carb.settings.get_settings()
value = settings.get("/exts/isaacsim.kit.xr.teleop.bridge/SETTING_NAME")