Created Haptikos Docs#6029
Conversation
There was a problem hiding this comment.
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:
- Contains a machine-specific absolute path that won't work for other users
- 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
- HaptikosQuest class - Clean implementation extending
OpenXRDevicewith thorough docstring - Step-by-step instructions - The dropdown sections with detailed commands are helpful
- API documentation update - Properly added to the devices RST file
- CHANGELOG entry - Good practice including the changelog update
- Module exports - Correctly updated
__init__.pyfiles
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 SummaryThis PR adds documentation and a thin
Confidence Score: 1/5Not safe to merge as-is — a broken symlink pointing to a private developer path is present in the repository root. The
Important Files Changed
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"]
Reviews (1): Last reviewed commit: "Docs update and finalize" | Re-trigger Greptile |
There was a problem hiding this comment.
🔍 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_typebinding 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__.pydocstring 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.
- ✅
HaptikosQuestCfgadded — A proper config dataclass now exists, following the same pattern asManusViveCfg(inheritsDeviceCfg, includesxr_cfgandclass_type). Exports updated in__init__.pyfiles and API docs. - ✅ Documentation list formatting fixed — The awkward comma placement in
cloudxr_teleoperation.rsthas 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. 🎉
| @@ -0,0 +1 @@ | |||
| /home/petroskon/isaacsim/kit/python.sh No newline at end of file | |||
There was a problem hiding this comment.
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.
| * :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`. |
There was a problem hiding this comment.
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.
| * :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!
| 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. | ||
| """ |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
Re-review: Issues Addressed ✅
Thank you for the updates! The new commit addresses the previously raised issues:
✅ Fixed
-
python.shsymlink removed - The accidentally committed symlink has been properly removed from the PR. This was the critical blocker. -
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`.
-
HaptikosQuestCfgadded - Good addition! The configuration class follows the same pattern asManusViveCfgand is now properly exported in__init__.pyand 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! 🎉
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.