Skip to content
Get SDK Access

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.

Topic or serviceTypeNotes
hand/descriptionrkk_hand_msgs/HandDescriptionLatched, one per hand: device id, handedness, joint names and radii
hand/jointsrkk_hand_msgs/HandJointsOne per solved frame: 26 joint poses
hand/markersvisualization_msgs/MarkerArrayRViz skeleton drawing, opt-in
/tftf2_msgs/TFMessageOne transform per joint, opt-in
/diagnosticsdiagnostic_msgs/DiagnosticArrayPer-hand health, once a second
calibratestd_srvs/TriggerSets 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.

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.