You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
sharpa_avatar: RAW/ROBOT joint names are published as joint_0..joint_21, so name-based consumers (incl. the sharpa_avatar example) read all zeros #1173
Describe the bug
With the pinned production Avatar SDK (avatar-sdk 1.7.3-17, production_version in src/plugins/sharpa_avatar/install_avatar_sdk.sh), avatar_hand_plugin publishes RAW and ROBOT JointStateOutput frames whose JointState.name values are joint_0 … joint_21. The plugin
forwards the SDK's per-DOF names verbatim
(src/plugins/sharpa_avatar/core/avatar_hand_tracking_plugin.cpp:593):
joint->name = i < hand.joint.name.size() ? hand.joint.name[i] : std::string{};
The schema defines JointState.name as a stable DOF name and the key consumers look joints up by
(src/core/schema/fbs/joint_state.fbs). The reference JointStateSource matches its configured joint_names against the wire names and fills 0.0 for any name it cannot find
(src/python/isaaccapture/retargeting_engine/deviceio_source_nodes/joint_state_source.py:111).
The sharpa_avatar example configures its RAW/ROBOT JointStateSources with names "copied verbatim
from the pinned production SDK (avatar-sdk 1.7.3-17 share/sdk_config.json)": thumb_CMC_FE, thumb_CMC_AA, … (examples/sharpa_avatar/python/isaaccapture_examples/sharpa_avatar/live_view.py:48-99,
used at :559). None of them match joint_<i>, so every RAW/ROBOT joint resolves to 0.0 without
any error.
To reproduce
Install the pinned SDK (install_avatar_sdk.sh) and build/install the plugin with -DBUILD_PLUGIN_SHARPA_AVATAR=ON.
Start a TeleopSession that launches avatar_hand_plugin with --datasets=human,raw,robot,haptic and reads avatar_robot_left with a JointStateTracker.
Print [j.name for j in frame.joints] for a received frame.
Expected behavior
Either the SDK/plugin publishes the DOF names from the SDK's sdk_config.json
(raw_joint_names / robot_joint_names), which the example and the schema assume, or the
plugin README/example state that RAW/ROBOT names are positional (joint_<i>) and consumers must
read them by index.
Observed behavior
RAW and ROBOT names are joint_0, joint_1, …, joint_21, in index order.
An application configuring JointStateSource with the example's names received no usable
RAW/ROBOT values while the HUMAN hand stream was valid. We did not run live_view.py itself; it
uses the same JointStateSource mechanism and names.
JointStateSource zero-fills silently on a name mismatch, which makes this hard to notice.
Platforms
Isaac Teleop Version: main (sharpa_avatar plugin.yaml version 1.1.0)
Avatar SDK: avatar-sdk 1.7.3-17 (production)
OS: Ubuntu 22.04
Integrations: custom TeleopSession pipeline
XR Device: N/A
Additional Devices: Sharpa Avatar gloves
Additional context
Possible fixes: have the SDK fill Joint.name from its config, or keep a pinned RAW/ROBOT name
table in the plugin (as src/plugins/sharpa_avatar/AGENTS.md already requires for the
HUMAN→OpenXR table and the example's name snapshots) and publish those names.
Activity
lotusl-code commentedon Nov 4, 2026
Sharpa reported fixed with #1347