Skip to main content

Body Pose

Overview

Body pose is a 22-joint skeleton in the world frame: each joint has position (x, y, z in meters) and orientation (quaternion w, x, y, z). One message per frame, time-aligned with head and hand pose.

Coordinate Frame

  • Reference frame: World.
  • Axes: X forward, Y left, Z up (right-handed).
  • Units: Position in meters.
  • Orientation: Quaternion in w, x, y, z order.

Topic & Message Type

  • Topic: /pose/body
  • Message type: pose.BodyFrame
  • Encoding: protobuf

BodyFrame uses pose_common for each joint: header plus 22 Transforms. The i-th joint is transforms[i] (index 0–21).

Message definition (body, one message per frame):

syntax = "proto3";

package pose;

import "common/header.proto";
import "pose/pose_common.proto";

message BodyFrame {
.common.header.Header header = 1;
repeated pose.common.Transform transforms = 2;
}

Transform type (from pose/pose_common.proto):

syntax = "proto3";

package pose.common;

message Quaternion {
double w = 1;
double x = 2;
double y = 3;
double z = 4;
}

message Transform {
Quaternion quat = 1;
double x = 2;
double y = 3;
double z = 4;
}

Joint Index and Conventions

22 joints (index 0–21). Joint indices and skeleton connectivity:

Body joint indices and skeleton
IndexNameIndexName
0Pelvis11R_Foot
1L_Hip12Neck
2R_Hip13L_Collar
3Spine_0114R_Collar
4L_Knee15Head
5R_Knee16L_Shoulder
6Spine_0217R_Shoulder
7L_Ankle18L_Elbow
8R_Ankle19R_Elbow
9Spine_0320L_Wrist
10L_Foot21R_Wrist