diff --git a/CMakeLists.txt b/CMakeLists.txt index e08859aff5..498bd53482 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) diff --git a/docs/source/device/sharpa_avatar.rst b/docs/source/device/sharpa_avatar.rst index 4717312d49..1e3f7ca37b 100644 --- a/docs/source/device/sharpa_avatar.rst +++ b/docs/source/device/sharpa_avatar.rst @@ -1,10 +1,10 @@ .. 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 Capture framework. The gloves stream IMU and encoder data through the official Avatar SDK over USB. The plugin maps that stream into Isaac Capture's usual surfaces: OpenXR hand tracking for the HUMAN skeleton, @@ -12,7 +12,7 @@ usual surfaces: OpenXR hand tracking for the HUMAN skeleton, 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 DeviceIO +schema joint-state collections can use Sharpa AE Gloves through the same DeviceIO interfaces. The plugin talks to the gloves directly, so do not run ``avatar-backend`` or Avatar Desktop at the same time. @@ -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) @@ -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 ``/share/sdk_config.json`` (default root ``/opt/avatar-sdk``). - **CloudXR runtime** on the plugin host, unless a ``TeleopSession`` example @@ -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 @@ -210,7 +210,7 @@ Troubleshooting ``/opt/avatar-sdk`` is not the pin. * - USB glove is not detected - Run ``install_udev_rules.sh`` on the host, then unplug and reconnect - the glove. + the AE Gloves. * - Plugin binary is not found - Build and install through the top-level CMake workflow. The example looks under ``install/plugins/sharpa_avatar/``. diff --git a/examples/sharpa_avatar/README.md b/examples/sharpa_avatar/README.md index 4b4a2acce4..1806a04b04 100644 --- a/examples/sharpa_avatar/README.md +++ b/examples/sharpa_avatar/README.md @@ -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 diff --git a/examples/sharpa_avatar/pyproject.toml b/examples/sharpa_avatar/pyproject.toml index 4498401f99..5e4366e18d 100644 --- a/examples/sharpa_avatar/pyproject.toml +++ b/examples/sharpa_avatar/pyproject.toml @@ -10,7 +10,7 @@ build-backend = "hatchling.build" # top-level name in site-packages. name = "isaaccapture-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 isaaccapture: the example runs against the one next to it -- this # checkout, or the wheel install_python_example() pins into the installed copy. diff --git a/examples/sharpa_avatar/python/isaaccapture_examples/sharpa_avatar/live_view.py b/examples/sharpa_avatar/python/isaaccapture_examples/sharpa_avatar/live_view.py index e30ae82ab6..ff154b364e 100644 --- a/examples/sharpa_avatar/python/isaaccapture_examples/sharpa_avatar/live_view.py +++ b/examples/sharpa_avatar/python/isaaccapture_examples/sharpa_avatar/live_view.py @@ -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 @@ -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" @@ -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}" diff --git a/src/plugins/sharpa_avatar/README.md b/src/plugins/sharpa_avatar/README.md index afc8da4b0e..1b26bb4dbd 100644 --- a/src/plugins/sharpa_avatar/README.md +++ b/src/plugins/sharpa_avatar/README.md @@ -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 Capture. It publishes +C++ plugin that connects Sharpa AvatarExo Gloves to Isaac Capture. 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 @@ -22,7 +22,7 @@ The visualization example is separate: - Linux x86_64 (Ubuntu 22.04) - A built Isaac Capture 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 @@ -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 Capture environment and rerun the configure/build/install commands above | diff --git a/src/plugins/sharpa_avatar/install_udev_rules.sh b/src/plugins/sharpa_avatar/install_udev_rules.sh index e1e452e76b..67d0fa5a8a 100755 --- a/src/plugins/sharpa_avatar/install_udev_rules.sh +++ b/src/plugins/sharpa_avatar/install_udev_rules.sh @@ -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 @@ -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" @@ -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." diff --git a/src/plugins/sharpa_avatar/plugin.yaml.in b/src/plugins/sharpa_avatar/plugin.yaml.in index 9ab77b55a1..42d7f40dd7 100644 --- a/src/plugins/sharpa_avatar/plugin.yaml.in +++ b/src/plugins/sharpa_avatar/plugin.yaml.in @@ -3,7 +3,7 @@ name: avatar_hand_plugin description: > - Sharpa Avatar glove plugin for Isaac Capture. + Sharpa AvatarExo Glove plugin for Isaac Capture. 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 @@ -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)"