ROS 2 bridge
The Rokoko ROS 2 bridge connects to the hand solver’s solved-hand output and
republishes it into a ROS 2 graph. Robotics work can then consume Smartgloves
data with the usual tools — ros2 topic echo, RViz, TF lookups — without
knowing anything about RGMP.
It is maintained as a separate open-source project:
github.com/Rokoko/rokoko-ros2-bridge (Apache 2.0)
flowchart LR
Driver["SDK Driver<br/>rokoko-sdk"]
Solver["rkk-hand-solver<br/>--emit-openxr"]
Bridge["rkk_hand_bridge<br/>(ROS 2 node)"]
ROS["ROS 2 graph<br/>topics, TF, RViz"]
Driver -->|"TCP :12276 (RGMP)"| Solver
Solver -->|"TCP :12277 (RGMP)"| Bridge
Bridge --> ROS
The bridge reads the solver’s joints_openxr group — the same 26-joint
XrHandJointEXT layout the
Isaac Lab device uses — so the solver has to be started with
--emit-openxr. See Hand solving for what
the solver does and how to run it.
What it publishes
Section titled “What it publishes”| Topic or service | Type | Notes |
|---|---|---|
hand/description | rkk_hand_msgs/HandDescription | Latched, one per hand: device id, handedness, joint names and radii |
hand/joints | rkk_hand_msgs/HandJoints | One per solved frame: 26 joint poses |
hand/markers | visualization_msgs/MarkerArray | RViz skeleton drawing, opt-in |
/tf | tf2_msgs/TFMessage | One transform per joint, opt-in |
/diagnostics | diagnostic_msgs/DiagnosticArray | Per-hand health, once a second |
calibrate | std_srvs/Trigger | Sets the yaw offset from your current hand direction |
Topics are namespaced under /rkk_hand_bridge/. One left and one right glove are
supported at a time.
Because the solver references poses to magnetic north, a fresh session has hands that are the right shape but rotated by an arbitrary amount about the vertical axis. Calling the calibrate service once, while holding your hands level and pointing the way you want “forward” to be, fixes that for every connected hand.
Getting it running
Section titled “Getting it running”Everything operational lives with the code: the repository README. It covers the ROS 2 version to target and how to install it on each platform, building the workspace, launching the driver, solver and bridge together, attaching to a solver you started yourself, the node parameters, the config file holding the driver and solver command lines, RViz setup, and troubleshooting.
One SDK-side requirement is worth repeating, since it is the usual reason a
freshly built bridge publishes nothing: the solver must be started with
--emit-openxr.