Skip to main content

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:

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

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:

IndexName22-indexIndexName22-index
0Pelvis07Head15
1Spine_0138L_Shoulder16
2Spine_0269R_Shoulder17
3Spine_03910L_Elbow18
4Neck1211R_Elbow19
5L_Collar1312L_Wrist20
6R_Collar1413R_Wrist21

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.