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:

| Index | Name | Index | Name |
|---|---|---|---|
| 0 | Pelvis | 11 | R_Foot |
| 1 | L_Hip | 12 | Neck |
| 2 | R_Hip | 13 | L_Collar |
| 3 | Spine_01 | 14 | R_Collar |
| 4 | L_Knee | 15 | Head |
| 5 | R_Knee | 16 | L_Shoulder |
| 6 | Spine_02 | 17 | R_Shoulder |
| 7 | L_Ankle | 18 | L_Elbow |
| 8 | R_Ankle | 19 | R_Elbow |
| 9 | Spine_03 | 20 | L_Wrist |
| 10 | L_Foot | 21 | R_Wrist |