
XP Robotics Humanoid
Team lead · mechanical design, CAD and PPO policies
A 1.588 m humanoid that six of us built from the ground up at XP Robotics. It has 23 actuated joints in the body and 30 more across two five-finger hands, 53 in all. I brought the team together, worked on the mechanical design and CAD, and put most of my time into the PPO policies that drive the legs.
| Height | 1,587.6 mm |
|---|---|
| Shoulder width | 531.6 mm |
| Depth | 177.9 mm |
| Mass | 40 kg in total, including the head, frame, motors and everything else |
| Joints | 23 in the body + 30 in the hands = 53 |
| Actuators | 23 RobStride quasi-direct-drive modules, 18.0 kg, 45% of the mass |
| Compute | NVIDIA Jetson AGX Orin, 64 GB, on four CAN buses |
structure
The main structure is aluminium and the head is 3D-printed. The torso is a cross-braced frame: light, stiff against twisting, and roomy enough inside for the computer, battery and electronics.
Each leg is a six-joint chain: hip pitch drives it forward, hip roll carries the sideways balance load when one foot is down, hip yaw steers the swing foot, then the knee (the hardest-working joint), ankle pitch and ankle roll, which move the centre of pressure under the foot. With its own yaw at each hip, the robot can turn by steering a foot as well as by changing where it steps. The waist adds one more yaw joint at the pelvis. Each arm has five joints.
| Actuator | Peak / rated | Ratio | Mass | Qty | Where |
|---|---|---|---|---|---|
| RS00 | 14 / 5 N·m | 10:1 | 310 g | 2 | Wrists |
| RS02 | 17 / 6 N·m | 7.75:1 | 405 g | 8 | Ankles, upper arms |
| RS03 | 60 / 20 N·m | 9:1 | 880 g | 8 | Hip pitch and roll, shoulders |
| RS04 | 120 / 40 N·m | 9:1 | 1,420 g | 5 | Hip yaw, knees, waist |
Every RobStride module packs a motor, a low-ratio planetary gearbox, dual 14-bit encoders and its own driver into one housing. The low ratios keep the joints backdrivable, so torque can be read from motor current without a separate torque sensor.
We sized the joints by hand first. With the full 40 kg standing on one leg and the knee bent 20°, the knee needs about 47 N·m, a 2.6× margin on the RS04's 120 N·m peak. Hip roll carries about 35 N·m and ankle pitch about 33 N·m. We're refining these in ADAMS.
learning to stand
Our humanoid walking in simulation.
We train the lower body with PPO using RSL-RL in Isaac Lab. The current policy reads 49 observations (body orientation and angular velocity, gravity direction, commands, joint positions and velocities, how far it is through a pose transition, and its last actions) and outputs targets for the 12 leg joints at 60 Hz, bounded, smoothed and scaled by 0.3 rad.
The network is small: 49 → 256 → 256 → 64 → 12 with ELU activations, about 96,000 parameters, exported to ONNX for the Jetson on board. The rewards favour an upright posture, the target height, steady feet and smooth, efficient actions, across 1,024 simulated environments. Before training against the simulator, we measured the real motors on a bench (friction, frequency response, latency) so the simulation behaves like them.
The policy holding a stance on the real robot, with gantry support.
On the real robot, the policy holds a stance with gantry support: it reads the sensors on board and sends joint targets that the motor drives track. Next comes a staged domain-randomisation curriculum and reward tuning, then sim-to-sim checks and the next transfer to hardware.
Seeing a gesture and answering it with the arms.
The upper body runs on its own: a webcam and MediaPipe recognise gestures like a salute, namaste or a raised hand, and ROS 2 passes the command to a MoveIt controller that plans the arm motion.
the team
Built with Aadhithyaa Kumar and Vishal Kumar Mahto (reward shaping and policy), Thushar Kumar (physics, controls and ROS), Rochan Kumar GM (controls and mechanical work) and our CTO Raushan Kumar. I worked on the PPO policy with Vishal and Aadhithyaa.