diff --git a/CMakeLists.txt b/CMakeLists.txt index 284730a991..56614d1237 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 bc4e66ae6d..524c4a4bdb 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 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, @@ -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 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. @@ -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 diff --git a/examples/sharpa_avatar/README.md b/examples/sharpa_avatar/README.md index b902accb64..9585ab4ea0 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 dd4f04fe56..f56aae3222 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 = "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. diff --git a/examples/sharpa_avatar/python/isaacteleop_examples/sharpa_avatar/live_view.py b/examples/sharpa_avatar/python/isaacteleop_examples/sharpa_avatar/live_view.py index 15fb4f2816..df1a92c5b1 100644 --- a/examples/sharpa_avatar/python/isaacteleop_examples/sharpa_avatar/live_view.py +++ b/examples/sharpa_avatar/python/isaacteleop_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 f73c54e2f3..e20b05d687 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 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 @@ -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 @@ -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 | 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 8f231d9ab4..523383c996 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 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 @@ -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)"