Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ option(BUILD_PLUGIN_OAK_CAMERA "Build OAK camera plugin (requires vcpkg for Dept
option(BUILD_PLUGIN_NOITOM_MOCAP "Build Noitom mocap plugin (downloads MocapApi SDK)" OFF)
option(BUILD_PLUGIN_OGLO "Build OGLO tactile glove plugin (BLE, Linux only; fetches SimpleBLE + nlohmann/json)" OFF)
option(BUILD_PLUGIN_WUJI_GLOVE "Build Wuji glove plugin (requires the wuji_sdk C SDK)" OFF)
option(BUILD_PLUGIN_SHARPA_AVATAR "Build Sharpa Avatar glove plugin (Linux; skips if the Avatar SDK is missing)" OFF)
option(BUILD_PLUGIN_SHARPA_AVATAR "Build Sharpa AvatarExo Glove plugin (Linux; skips if the Avatar SDK is missing)" OFF)
option(BUILD_EXAMPLES "Build examples" ON)
option(BUILD_EXAMPLE_TELEOP_ROS2 "Build only the teleop_ros2 ROS 2 reference integration (e.g. for Docker)" OFF)
option(BUILD_TESTING "Build unit tests" ON)
Expand Down
14 changes: 7 additions & 7 deletions docs/source/device/sharpa_avatar.rst
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
.. SPDX-FileCopyrightText: Copyright (c) 2025-2026 Avatar SDK contributors. All rights reserved.
.. SPDX-License-Identifier: Apache-2.0

Sharpa Avatar Glove
===================
Sharpa AvatarExo Glove
======================

A Linux-only plugin for integrating Sharpa Avatar data gloves into the
A Linux-only plugin for integrating Sharpa AvatarExo (AE) Gloves into the
Isaac Teleop framework. The gloves stream IMU and encoder data through the
official Avatar SDK over USB. The plugin maps that stream into Isaac Teleop's
usual surfaces: OpenXR hand tracking for the HUMAN skeleton,
``JointStateOutput`` tensors for the RAW and ROBOT 22-DoF joint sets, and
inbound per-finger vibration on a haptic collection.

Any downstream consumer that already reads OpenXR hands (``HandsSource``) or
schema joint-state collections can use Avatar gloves through the same Isaac
schema joint-state collections can use Sharpa AE Gloves through the same Isaac
Teleop interfaces. The plugin talks to the gloves directly, so do not run
``avatar-backend`` or Avatar Desktop at the same time.

Expand All @@ -33,7 +33,7 @@ named joint-state collections:

.. code-block:: text

Sharpa Avatar gloves (USB)
Sharpa AvatarExo Gloves (USB)
│
▼
avatar_hand_plugin (Avatar SDK, production package)
Expand All @@ -56,7 +56,7 @@ Prerequisites
- **Pinned production Avatar SDK** (``avatar-sdk`` 1.7.3-17) from Sharpa's
signed APT repository. ``install_avatar_sdk.sh`` retrieves it; do not substitute
``avatar-sdk-dev`` or ``avatar-sdk-beta``.
- **Sharpa Avatar gloves** powered and connected over USB. Transport settings
- **Sharpa AvatarExo Gloves** powered and connected over USB. Transport settings
are selected in ``<sdk-root>/share/sdk_config.json`` (default root
``/opt/avatar-sdk``).
- **CloudXR runtime** on the plugin host, unless a ``TeleopSession`` example
Expand Down Expand Up @@ -178,7 +178,7 @@ per-finger pinch path as the generic glove haptic sample.
Wrist pose
----------

Avatar glove data is wrist-relative, so the plugin anchors HUMAN landmarks
Sharpa AE Glove data is wrist-relative, so the plugin anchors HUMAN landmarks
with a pose from ``WristPoseSource`` before publishing OpenXR hands. It prefers
optical hand tracking and falls back to the controller aim pose when needed.
If no wrist pose is available yet, the plugin still publishes a local skeleton
Expand Down
4 changes: 2 additions & 2 deletions examples/sharpa_avatar/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ SPDX-FileCopyrightText: Copyright (c) 2025-2026 Avatar SDK contributors. All rig
SPDX-License-Identifier: Apache-2.0
-->

# Sharpa Avatar Visualization Example
# Sharpa AvatarExo Glove Visualization Example

Live OpenXR hands from Sharpa Avatar gloves in the browser, plus pinch haptic.
Live OpenXR hands from Sharpa AvatarExo Gloves in the browser, plus pinch haptic.
CloudXR and `avatar_hand_plugin` start with the example unless you opt out.

```text
Expand Down
2 changes: 1 addition & 1 deletion examples/sharpa_avatar/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ build-backend = "hatchling.build"
# top-level name in site-packages.
name = "isaacteleop-examples-sharpa-avatar"
version = "0.0.0" # Internal example - not versioned
description = "Sharpa Avatar glove TeleopSession sample with viser and pinch haptic"
description = "Sharpa AvatarExo Glove TeleopSession sample with viser and pinch haptic"
requires-python = ">=3.11,<3.14"
# No version on isaacteleop: the example runs against the one next to it -- this
# checkout, or the wheel install_python_example() pins into the installed copy.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 Avatar SDK contributors. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
"""Live visualization of Sharpa Avatar gloves through TeleopSession.
"""Live visualization of Sharpa AvatarExo Gloves through TeleopSession.

Starts CloudXR and ``avatar_hand_plugin`` unless you opt out. Pinch a fingertip
toward the thumb to vibrate that finger. Does not import plugin C++ classes or
Expand Down Expand Up @@ -542,7 +542,7 @@ def main() -> int:
search_paths = args.plugin_search_path or plugin_search_paths()
if args.launch_plugin and not _plugin_installed(search_paths):
_die(
"Sharpa Avatar plugin binary was not found under "
"Sharpa AE Glove plugin binary was not found under "
f"{PLUGIN_ROOT_ID}/{PLUGIN_NAME}.\n"
" Build it with the top-level CMake workflow and "
"-DBUILD_PLUGIN_SHARPA_AVATAR=ON.\n"
Expand Down Expand Up @@ -624,7 +624,7 @@ def main() -> int:
upright = not args.world_frame

print("=" * 72)
print("Sharpa Avatar sample (TeleopSession + viser)")
print("Sharpa AE Glove sample (TeleopSession + viser)")
print(" hands: /hand/left, /hand/right")
print(
f" raw: {AVATAR_RAW_LEFT_COLLECTION_ID}, {AVATAR_RAW_RIGHT_COLLECTION_ID}"
Expand Down
8 changes: 4 additions & 4 deletions src/plugins/sharpa_avatar/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ SPDX-FileCopyrightText: Copyright (c) 2025-2026 Avatar SDK contributors. All rig
SPDX-License-Identifier: Apache-2.0
-->

# Sharpa Avatar Glove
# Sharpa AvatarExo Glove

C++ plugin that connects Sharpa Avatar gloves to Isaac Teleop. It publishes
C++ plugin that connects Sharpa AvatarExo Gloves to Isaac Teleop. It publishes
OpenXR hand poses and glove joint state, and consumes inbound haptic commands.

The plugin talks to the gloves directly, so do not run `avatar-backend` or
Expand All @@ -22,7 +22,7 @@ The visualization example is separate:

- Linux x86_64 (Ubuntu 22.04)
- A built Isaac Teleop checkout
- Sharpa Avatar gloves connected through the USB dongle or wired Ethernet
- Sharpa AvatarExo Gloves connected through a USB dongle or USB cable

`install_avatar_sdk.sh` retrieves a pinned production `avatar-sdk` version from Sharpa's
signed production APT repository, without selecting the `avatar-sdk-dev` or
Expand Down Expand Up @@ -102,7 +102,7 @@ wrist source is used when one is available.
| Symptom | Resolution |
|---|---|
| Avatar SDK installation fails | Check access to Sharpa's production APT endpoint and rerun `install_avatar_sdk.sh` |
| CMake skipped the Sharpa Avatar plugin | The SDK is missing; run `install_avatar_sdk.sh` and reconfigure with `-DBUILD_PLUGIN_SHARPA_AVATAR=ON` |
| CMake skipped the Sharpa AE Glove plugin | The SDK is missing; run `install_avatar_sdk.sh` and reconfigure with `-DBUILD_PLUGIN_SHARPA_AVATAR=ON` |
| CMake rejected the Avatar SDK | Install the pinned production package with `install_avatar_sdk.sh`, or point `AVATAR_SDK_ROOT` at a complete SDK tree |
| USB glove is not detected | Run `install_udev_rules.sh` on the host, then unplug and reconnect the glove or dongle |
| CMake 3.24 or newer is required | Install a newer CMake in the Isaac Teleop environment and rerun the configure/build/install commands above |
Expand Down
6 changes: 3 additions & 3 deletions src/plugins/sharpa_avatar/install_udev_rules.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 Avatar SDK contributors. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Install the Sharpa Avatar glove udev rules on the host.
# Install the Sharpa AvatarExo Glove udev rules on the host.

set -euo pipefail

Expand All @@ -22,7 +22,7 @@ require_command() {

if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
echo "Usage: $0"
echo "Installs and reloads the Sharpa Avatar glove udev rules on the host."
echo "Installs and reloads the Sharpa AvatarExo Glove udev rules on the host."
exit 0
fi
[[ $# -eq 0 ]] || die "Unknown argument: $1"
Expand All @@ -45,7 +45,7 @@ if [[ "$EUID" -ne 0 ]]; then
sudo_cmd=(sudo)
fi

echo "==> Installing Sharpa Avatar glove udev rules"
echo "==> Installing Sharpa AvatarExo Glove udev rules"
"${sudo_cmd[@]}" install -m 0644 "$rule_source" "$rule_destination"
"${sudo_cmd[@]}" cmp -s "$rule_source" "$rule_destination" || die "Installed rules differ from $rule_source."

Expand Down
6 changes: 3 additions & 3 deletions src/plugins/sharpa_avatar/plugin.yaml.in
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

name: avatar_hand_plugin
description: >
Sharpa Avatar HA4 glove plugin for Isaac Teleop.
Sharpa AvatarExo Glove plugin for Isaac Teleop.
HUMAN FK → OpenXR hand_tracker on /hand/{left,right}.
RAW/ROBOT → JointStateOutput tensors (collection ids avatar_raw_* / avatar_robot_*).
Haptic → HapticCommandReaderTracker on collection id avatar_glove_haptic
Expand All @@ -13,10 +13,10 @@ version: "1.1.0"
devices:
- path: "/hand/left"
type: "hand_tracker"
description: "Left Avatar glove — 26 OpenXR joints (HUMAN FK → OpenXR)"
description: "Left Sharpa AE Glove — 26 OpenXR joints (HUMAN FK → OpenXR)"
- path: "/hand/right"
type: "hand_tracker"
description: "Right Avatar glove — 26 OpenXR joints (HUMAN FK → OpenXR)"
description: "Right Sharpa AE Glove — 26 OpenXR joints (HUMAN FK → OpenXR)"
- path: "/glove/avatar_raw_left"
type: "joint_state"
description: "Left Avatar RAW joints (collection_id=avatar_raw_left)"
Expand Down
Loading