Body Pose
Overview
Body pose is a skeleton in the world frame: each joint has position (x, y, z in meters) and orientation (quaternion w, x, y, z). EgoSuite body data can use either a 22-joint full-body layout or a 14-joint upper-body layout. 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 repeated Transforms. Check len(transforms) to determine the layout:
- 22 transforms: full-body layout, indices 0–21.
- 14 transforms: upper-body-only layout, indices 0–13.
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-Joint Full Body
The full-body layout uses 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 |
14-Joint Upper Body
The upper-body layout uses 14 joints (index 0–13). It is the full-body skeleton with lower-limb joints removed, then reindexed compactly. It is not the first 14 entries of the 22-joint layout.
Removed lower-body joints from the 22-joint layout:
L_Hip(1),R_Hip(2)L_Knee(4),R_Knee(5)L_Ankle(7),R_Ankle(8)L_Foot(10),R_Foot(11)
Upper-body joint indices:
| Index | Name | 22-index | Index | Name | 22-index |
|---|---|---|---|---|---|
| 0 | Pelvis | 0 | 7 | Head | 15 |
| 1 | Spine_01 | 3 | 8 | L_Shoulder | 16 |
| 2 | Spine_02 | 6 | 9 | R_Shoulder | 17 |
| 3 | Spine_03 | 9 | 10 | L_Elbow | 18 |
| 4 | Neck | 12 | 11 | R_Elbow | 19 |
| 5 | L_Collar | 13 | 12 | L_Wrist | 20 |
| 6 | R_Collar | 14 | 13 | R_Wrist | 21 |
For visualization, the devkit treats 14-joint body data as upper-body only and does not emit a lower-body skeleton. When 22-joint body data is present, the lower-body skeleton is generated from the hip, knee, ankle, and foot joints.