Proprioception is a robot's measurement of its own configuration: joint positions and, depending on the hardware, joint velocities, motor currents or torques, and gripper state. The word is borrowed from physiology, where it names the body's sense of its own position and movement. In robot learning, the proprioceptive vector is the low-dimensional "state" input that accompanies camera images.
The π0 paper (Black et al., 2024) defines its observation as "multiple RGB images, a language command, and the robot's proprioceptive state". In a LeRobotDataset it is the observation.state feature, stored per frame next to action. For an SO-101 driven by LeRobot's so_follower code, state is one position reading per motor, {motor}.pos, for its six motors (five arm joints and the gripper). Its dimensionality therefore follows the robot's degrees of freedom.
Policies treat state differently. SmolVLA pads it to max_state_dim=32 in LeRobot v0.6.1 so that robots with different joint counts share one network. LeRobot describes GR00T N1.7 as accepting "language, images, and proprioception". ACT feeds joint positions to its transformer alongside image features.
Two misconceptions are common. First, proprioception is not touch. Joint encoders report where the arm is; contact forces at the fingertips require tactile or force-torque sensing, or must be inferred indirectly from motor current. Second, state values are not portable between robots, or even between calibrations of the same model. They depend on joint zero positions, units and normalization, which is one reason a checkpoint trained on one arm does not transfer unchanged to another (see embodiment gap).