Skip to content

Created Haptikos Docs#6029

Open
PKonMagos wants to merge 14 commits into
isaac-sim:mainfrom
Haptikostech:main
Open

Created Haptikos Docs#6029
PKonMagos wants to merge 14 commits into
isaac-sim:mainfrom
Haptikostech:main

Conversation

@PKonMagos

@PKonMagos PKonMagos commented Jun 8, 2026

Copy link
Copy Markdown

Description

This pull request is for updating the Haptikos docs. It includes all the necessary information to setup and use the Haptikos exoskeletons in the Isaac Lab and Isaac Teleop.

@github-actions github-actions Bot added documentation Improvements or additions to documentation isaac-mimic Related to Isaac Mimic team isaac-lab Related to Isaac Lab team labels Jun 8, 2026

@isaaclab-review-bot isaaclab-review-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Documentation Review: Haptikos Plugin Docs

Thank you for adding documentation for the Haptikos exoskeleton integration with Isaac Lab and Isaac Teleop. The documentation is comprehensive and provides good step-by-step instructions.

🚨 Critical Issue - Must Fix

Unintended file included in PR:

The file python.sh is a symlink pointing to your local development path:

/home/petroskon/isaacsim/kit/python.sh

This file should not be committed to the repository as it:

  1. Contains a machine-specific absolute path that won't work for other users
  2. Was likely accidentally staged during development

Please remove this file from the PR.

📝 Documentation Feedback

Formatting issue in cloudxr_teleoperation.rst:

The note block has a formatting issue - there's a missing blank line between the note content and the next .. note:: directive:

.. note::

   See :ref:`manus-vive-handtracking` and :ref:`haptikos-quest-handtracking` for more information on supported hand-tracking peripherals.
.. note::

Should have a blank line before the second .. note:: to properly close the first note block.

Minor grammar suggestion:

In the bullet list, the comma placement looks awkward:

:ref:`teleoperate-apple-vision-pro`, and :ref:`manus-vive-handtracking`
, and :ref:`haptikos-quest-handtracking`.

Consider rewriting as:

:ref:`teleoperate-apple-vision-pro`, :ref:`manus-vive-handtracking`, and :ref:`haptikos-quest-handtracking`.

✅ What Looks Good

  1. HaptikosQuest class - Clean implementation extending OpenXRDevice with thorough docstring
  2. Step-by-step instructions - The dropdown sections with detailed commands are helpful
  3. API documentation update - Properly added to the devices RST file
  4. CHANGELOG entry - Good practice including the changelog update
  5. Module exports - Correctly updated __init__.py files

Summary

The documentation content is solid, but the python.sh symlink must be removed before this PR can be merged. After addressing that critical issue and the minor formatting suggestions, this will be a good addition to the documentation.

@greptile-apps

greptile-apps Bot commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds documentation and a thin HaptikosQuest device class to support the Haptikos exoskeleton + Meta Quest hand-tracking workflow in Isaac Lab. The Python source changes are minimal (an empty subclass of OpenXRDevice), while most of the work is in RST documentation and API references.

  • python.sh symlink — a symbolic link pointing to an absolute path on the author's local machine (/home/petroskon/isaacsim/kit/python.sh) was accidentally committed and must be removed before merging.
  • HaptikosQuest class — the class body is entirely empty (docstring only); it inherits all behaviour from OpenXRDevice but ships without a companion HaptikosQuestCfg, unlike the sibling ManusVive/ManusViveCfg pair.
  • Documentation — the new Haptikos + Quest section in cloudxr_teleoperation.rst is detailed and well-structured, with a minor comma-placement issue in one bullet point.

Confidence Score: 1/5

Not safe to merge as-is — a broken symlink pointing to a private developer path is present in the repository root.

The python.sh symlink resolves to an absolute path that only exists on the author's machine. It will be broken for every other contributor, in CI, and in any checkout of the repository, making it effectively dead weight that also leaks a local username. This must be removed before the PR can land.

python.sh is the critical file — it should be dropped from the PR entirely. source/isaaclab/isaaclab/devices/openxr/haptikos_quest.py warrants a look to decide whether a HaptikosQuestCfg should accompany the class.

Important Files Changed

Filename Overview
python.sh Accidental symlink to an absolute path on the author's local machine (/home/petroskon/isaacsim/kit/python.sh); broken on every other system and leaks the developer's username — must be removed.
source/isaaclab/isaaclab/devices/openxr/haptikos_quest.py Adds HaptikosQuest as an empty subclass of OpenXRDevice; functional but lacks a companion Cfg class, inconsistent with the ManusVive/ManusViveCfg pattern used for the nearest sibling device.
source/isaaclab/isaaclab/devices/init.py Exports HaptikosQuest from the top-level devices package; no corresponding Cfg is exported, unlike the ManusViveCfg precedent.
docs/source/how-to/cloudxr_teleoperation.rst Adds a well-structured Haptikos + Quest hand-tracking section with step-by-step setup instructions; minor comma-placement issue in the table-of-contents bullet list.
docs/source/api/lab/isaaclab.devices.rst Registers HaptikosQuest in the API reference table and adds its autoclass block; no issues.
source/isaaclab/docs/CHANGELOG.rst Adds a new 0.54.5 changelog entry describing the Haptikos documentation addition; looks correct.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    HaptikosApp["Haptikos App\n(exoskeleton data)"] --> Plugin["Haptikos Isaac Teleop\nPlugin executable"]
    QuestHMD["Meta Quest HMD\n(controller poses)"] --> Plugin
    Plugin -->|"injects hand joint poses"| OpenXRRuntime["OpenXR Runtime\n(CloudXR)"]
    OpenXRRuntime --> HaptikosQuest["HaptikosQuest\n(subclass of OpenXRDevice)"]
    HaptikosQuest -->|"inherits all methods"| OpenXRDevice["OpenXRDevice"]
    OpenXRDevice -->|"raw tracking data"| Retargeters["Retargeters\n(e.g. Se3AbsRetargeter)"]
    Retargeters --> Robot["Robot Teleop Commands"]
Loading

Reviews (1): Last reviewed commit: "Docs update and finalize" | Re-trigger Greptile

@isaaclab-review-bot isaaclab-review-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔍 Code Review: Created Haptikos Docs

Thanks for adding the Haptikos documentation, @PKonMagos! The documentation is thorough and the new device class follows the existing patterns well. Here are some findings:


🚨 Critical

1. Accidental symlink to local filesystem path (python.sh)

The file python.sh is a symlink pointing to /home/petroskon/isaacsim/kit/python.sh. This is a user-specific local path that will not resolve for anyone else and should not be committed to the repository. Please remove this file from the PR.


⚠️ Suggestions

2. Consider adding a HaptikosQuestCfg dataclass

Other devices in the openxr package follow the pattern of providing both a device class and a corresponding Cfg dataclass (e.g., OpenXRDevice/OpenXRDeviceCfg, ManusVive/ManusViveCfg). While HaptikosQuest currently inherits from OpenXRDevice without adding new parameters, providing a HaptikosQuestCfg(OpenXRDeviceCfg) class (even as a trivial subclass) would:

  • Allow future extension without breaking changes
  • Maintain consistency with the existing device registration patterns
  • Enable proper class_type binding for the teleop device factory

3. Documentation list formatting issue

In docs/source/how-to/cloudxr_teleoperation.rst (around line 58), the updated text reads:

:ref:`teleoperate-apple-vision-pro`, and :ref:`manus-vive-handtracking`
, and :ref:`haptikos-quest-handtracking`.

The leading comma on the second line creates awkward phrasing ("...and Manus + Vive Hand Tracking, and Haptikos..."). Consider restructuring this as a proper Oxford comma list or using a semicolon to separate the Haptikos entry.

4. Missing blank line between notes in RST

In cloudxr_teleoperation.rst, the removal of the blank line between the two .. note:: directives (lines 24-25 in the diff) may cause RST rendering issues. Sphinx typically expects a blank line between consecutive directives to properly separate them.

5. HaptikosQuest class is documentation-only — no behavioral override

The HaptikosQuest class inherits from OpenXRDevice and adds only a docstring with no method overrides, no __init__, and no additional logic. While this is fine as a documentation anchor and future extension point, it might be worth adding a brief comment in the class body (e.g., pass) to make this intent explicit, or noting in the docstring that it uses the same configuration as OpenXRDevice.

6. CHANGELOG version bump may need coordination

The changelog adds version 0.54.5 with the date 2026-06-04. Please ensure this version number is consistent with the config/extension.toml version field for the isaaclab extension, as noted in the PR checklist.


📝 Minor Nits

  • The openxr/__init__.py docstring update from "Keyboard device for SE(2) and SE(3) control." to "OpenXR devices for teleoperation and interaction." is a good correction — thanks for fixing that!
  • Consider whether line length in haptikos_quest.py (line 16) exceeds the project's configured max (the URL-heavy docstring line is quite long).

Summary: The main blocker is the python.sh symlink which must be removed. The documentation content itself is well-written and the integration pattern is sound. Once the symlink is removed and the minor formatting issues are addressed, this should be ready to merge.


Update (df1da6d): Reviewed incremental changes since 2c5bc04. Several previous concerns have been addressed:

  • python.sh symlink removed — The accidental local filesystem symlink has been deleted.
  • HaptikosQuestCfg added — A proper config dataclass now exists, following the same pattern as ManusViveCfg (inherits DeviceCfg, includes xr_cfg and class_type). Exports updated in __init__.py files and API docs.
  • Documentation list formatting fixed — The awkward comma placement in cloudxr_teleoperation.rst has been restructured into a clean Oxford comma list.

No new issues found in this changeset. The remaining minor suggestions from the original review (blank line between RST notes, explicit pass in class body, CHANGELOG version coordination) are non-blocking. This PR is looking good for merge. 🎉

Comment thread python.sh Outdated
@@ -0,0 +1 @@
/home/petroskon/isaacsim/kit/python.sh No newline at end of file

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P0 Accidental developer-local symlink committed

python.sh is a symbolic link pointing to /home/petroskon/isaacsim/kit/python.sh — an absolute path on the author's personal machine. This path does not exist on any other machine, making the symlink broken for every other contributor and CI system. Additionally, it leaks the author's local username (petroskon). This file should be removed from the PR entirely.

Comment on lines +57 to +59
* :ref:`use-apple-vision-pro`, including how to :ref:`build-apple-vision-pro`,
:ref:`teleoperate-apple-vision-pro`, and :ref:`manus-vive-handtracking`.
:ref:`teleoperate-apple-vision-pro`, and :ref:`manus-vive-handtracking`
, and :ref:`haptikos-quest-handtracking`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 The comma that starts the continuation line reads oddly and breaks typical RST prose style. Moving it to end the previous line makes the sentence flow naturally and is consistent with how the existing list items are punctuated.

Suggested change
* :ref:`use-apple-vision-pro`, including how to :ref:`build-apple-vision-pro`,
:ref:`teleoperate-apple-vision-pro`, and :ref:`manus-vive-handtracking`.
:ref:`teleoperate-apple-vision-pro`, and :ref:`manus-vive-handtracking`
, and :ref:`haptikos-quest-handtracking`.
* :ref:`use-apple-vision-pro`, including how to :ref:`build-apple-vision-pro`,
:ref:`teleoperate-apple-vision-pro`, :ref:`manus-vive-handtracking`,
and :ref:`haptikos-quest-handtracking`.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Comment on lines +13 to +36
class HaptikosQuest(OpenXRDevice):
"""Haptikos exoskeleton hand tracking and haptic feedback through OpenXR.

To run the Haptikos Plugin you need to download Isaac Teleop (`IsaacTeleop <https://github.com/NVIDIA/IsaacTeleop>`_) and install the Haptikos Plugin (`Haptikos Plugin <https://github.com/NVIDIA/IsaacTeleop/tree/main/src/plugins/haptikos>`_) that runs separately.
It reads controller poses and hand tracking data from the Haptikos App, combines them, and injects left and right hand joint poses into the
OpenXR runtime as hand tracker data.

The Haptikos plugin currently supports Linux and has been tested with Meta Quest headsets.
Other OpenXR headsets with controllers may also work.

To use this device with Haptikos hand tracking, the following components need to be active:

* Haptikos App.
* Haptikos exoskeletons.
* A Meta Quest/OpenXR headset and controllers.
* Controllers mounted on the exoskeletons.
* The Haptikos Isaac Teleop plugin executable.

The Haptikos Robotics API (`Haptikos API <https://github.com/Haptikostech/HaptikosAPI>`_) must be
downloaded and installed separately.
You can setup and use haptic feedback with the Haptikos Robotics API. The library provides functionality that you can use on IsaacLab and IsaacTeleop scenarios.
The headset controllers must be attached to the Haptikos exoskeletons using the included mount.
Orientation calibration aligns the Haptikos glove forward direction with the HMD forward direction.
"""

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Missing HaptikosQuestCfg configuration class

ManusVive (the closest parallel device in this codebase) ships alongside a ManusViveCfg dataclass and exports it from both the openxr package and the top-level devices package. HaptikosQuest exposes no Cfg class, so callers must use the base OpenXRDeviceCfg, but this is not documented and users following the ManusVive pattern will expect a device-specific config. Consider adding a minimal HaptikosQuestCfg mirroring ManusViveCfg and exporting it alongside HaptikosQuest.

@isaaclab-review-bot isaaclab-review-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-review: Issues Addressed ✅

Thank you for the updates! The new commit addresses the previously raised issues:

✅ Fixed

  1. python.sh symlink removed - The accidentally committed symlink has been properly removed from the PR. This was the critical blocker.

  2. Grammar/formatting in bullet list - The comma placement has been fixed:

    :ref:`teleoperate-apple-vision-pro`, :ref:`manus-vive-handtracking`,
    and :ref:`haptikos-quest-handtracking`.
  3. HaptikosQuestCfg added - Good addition! The configuration class follows the same pattern as ManusViveCfg and is now properly exported in __init__.py and documented in the API RST.

📝 Minor Remaining Issue

There's still a missing blank line between the two .. note:: directives in cloudxr_teleoperation.rst (lines 23-24):

   See :ref:`manus-vive-handtracking` and :ref:`haptikos-quest-handtracking` for more information on supported hand-tracking peripherals.
.. note::

Should have a blank line before .. note:: to properly close the first note block. This is a minor RST formatting issue that may cause rendering problems in some Sphinx versions.

Summary

The critical blocker is resolved. The remaining issue is cosmetic. The documentation content and code additions look good - ready for maintainer review.


Update (commit 5f34dad): ✅ The missing blank line between .. note:: directives in cloudxr_teleoperation.rst has been added. All previously raised issues are now addressed. No new issues introduced. LGTM! 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation isaac-lab Related to Isaac Lab team isaac-mimic Related to Isaac Mimic team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant