Personal project

Genesis: a mobile manipulator, registers to VLA

Mecanum base, single and dual-arm variants, a whole-body planner that solves on CPU, keypoint perception and a VLA training pipeline. Built from scratch.

4 min read

Active
Render of the dual-arm variant, two SO-101 arms on a lead-screw lift column over a mecanum base

Abstract

Genesis is a mobile manipulator I build to learn robotics end to end, from ESP32 registers to vision-language-action policies. It started as one 5-DOF arm on a mecanum base. It now covers a dual-arm variant on a lift column, a whole-body planner that solves on CPU, keypoint perception on a frozen vision backbone, and one task stack that runs in MuJoCo, Isaac Sim, Gazebo and on the robot.

Introduction

No client, no deadline. The rule is that every abstraction is earned: a layer gets built once the math under it is written down. So it grew upward: firmware, kinematics, perception, autonomy, learning. The mechanical and electrical sides are mine too. The chassis and the lift column are Fusion 360, the servo driver board is KiCad.

The single-arm build on a workbench, arm folded over the mecanum base, bench supplies behind it
Figure 1. The original single-arm build. Placeholder photo, the dual-arm hardware is newer.

The platform

  • Base. Four mecanum wheels, ESP32 firmware, register-level PWM, hardware encoders, per-wheel PID.
  • Arms. SO-101 5-DOF, one on the first build, two on a lead-screw lift column on the current one.
  • Compute. Raspberry Pi 5 and two ESP32s, ROS 2 Jazzy, a Zenoh bridge to the dev machine.
  • Power. Two 4S 18650 packs, actuators and logic separated, BMS and per-rail buck converters.

Motion planning

Whole-body planning runs on CPU and stays there. Collision checks are vectorized over batches of configurations, not one at a time, IK is solved batched and hardware agnostic, a coarse pass prunes before the fine one runs, and edges drop out as soon as a lane hits an obstacle.Single instruction, multiple data: one operation evaluates many configurations at once across the CPU's vector lanes. Pinocchio and Coal answer the kinematics and collision queries, OMPL searches, TOPPRA re-times the path against torque limits. A dual-arm solve lands near 600 ms.

Clip 1. Whole-body plan, base and both arms. Placeholder clip.

Semantic perception

A frozen DINOv3 ViT-S/16 does the seeing. Patch tokens from layers 6, 9 and 12 concatenate into one dense feature map, and small heads on top predict task-specific 2D keypoints, grasp contacts rather than boxes. Those heads train only on synthetic renders. Freezing the backbone is what carries them to real cameras zero-shot. PnP against a floor plane or a second view lifts the keypoints to a 6-DoF pose, and the same features stream into the policy, so grasping stays closed-loop.

Placeholder for keypoint heatmaps overlaid on a camera frame
Figure 2. Keypoint heatmaps and the recovered pose. Placeholder image.

Autonomy

Tasks are YAML: pick, place, explore, approach, policy. Macros expand into whole-body goals at runtime, and every goal carries an on_failure branch, so the tree recovers instead of stopping. Targets are named frames resolved against the live scene just before planning, never fixed coordinates. MuJoCo and Isaac Sim sit behind one executor interface, and MuJoCo compiles in memory from the URDF at boot rather than from a brittle model file. The stack above never learns which one is underneath.

Clips 2 to 4. The same task in MuJoCo, Isaac Sim and Gazebo. Placeholder clips.

Learning

The planner doubles as a scripted expert, so demonstrations are generated without teleoperation. ACT and SmolVLA train on them today. A learned policy plugs back into the behavior tree as one segment, driving the same executor as the planner.

Demo of the single-arm build.

Implementation status

Subsystem Feature Status
Hardware Custom servo driver PCB (KiCad) โœ…
Hardware Chassis, arm mounts and lift column (Fusion 360) โœ…
Hardware Dual SO-101 arms on the lift column ๐Ÿงช
Hardware Power system restructure ๐Ÿงช
Firmware Register-level PWM + PCNT encoder interface โœ…
Firmware Wheel PID (anti-windup, derivative filter) โœ…
Firmware ESP32 โ†” RPi5 serial communication protocol โœ…
Mobile Base Mecanum kinematics (FK + IK) โœ…
Mobile Base Good Boy autonomous ball retrieval โœ…
Mobile Base Wheel odometry + TF2 broadcast ๐Ÿงช
Mobile Base IMU integration + EKF sensor fusion ๐Ÿงช
Mobile Base Frontier exploration + SLAM ๐Ÿงช
Mobile Base A* / RRT* autonomous navigation ๐Ÿงช
Manipulator Analytical, Newton-Raphson and batched IK โœ…
Manipulator IBVS + PBVS visual servoing โœ…
Manipulator Grasp planning ๐Ÿ”ง
Motion Planning Pinocchio + Coal kinematics and collision queries โœ…
Motion Planning OMPL collision-free path search โœ…
Motion Planning SIMD batch collision checking + early exit โœ…
Motion Planning TOPPRA time-optimal re-timing โœ…
Motion Planning Whole-body coordination (base + arms) โœ…
Motion Planning Dual-arm whole-body solve ~600 ms on CPU โœ…
Perception Camera intrinsic + hand-eye calibration โœ…
Perception LiDAR integration + scan filtering โœ…
Perception Frozen DINOv3 ViT-S/16 feature extraction โœ…
Perception 2D keypoint heatmap heads โœ…
Perception 6-DOF pose via PnP + floor / multi-view โœ…
Perception Synthetic keypoint data (Replicator, BlenderProc) โœ…
Perception Depth camera pipeline ๐Ÿ—“๏ธ
Autonomy Hierarchical YAML task definitions โœ…
Autonomy Behavior tree with on_failure recovery โœ…
Autonomy Dynamic frame resolution (semantic targets) โœ…
Autonomy Unified executor protocol (sim โ†” real) โœ…
Teleoperation Gamepad teleop (base + arm) โœ…
Teleoperation MediaMTX live video stream โœ…
Teleoperation Custom handheld controller (6-DOF + screen) ๐Ÿ—“๏ธ
Teleoperation Leader-follower arm teleoperation ๐Ÿ—“๏ธ
Teleoperation VR teleoperation (Quest 3) ๐Ÿ—“๏ธ
System Zenoh distributed compute (RPi5 โ†” dev machine) ๐Ÿงช
System rosbag2 logging + telemetry pipeline ๐Ÿ—“๏ธ
Learning LeRobot / VLA data collection pipeline โœ…
Learning Autonomous demonstration generation โœ…
Learning ACT imitation policy โœ…
Learning SmolVLA fine-tuning โœ…
Learning Keypoint-conditioned policies ๐Ÿงช
Learning HIL-SERL + reward classifiers ๐Ÿงช
Learning Dataset management + versioning ๐Ÿงช
Learning Sim-to-real transfer ๐Ÿ”ง
Learning RL dexterous manipulation ๐Ÿ”ง
Learning pi0 / GR00T export ๐Ÿ—“๏ธ
Simulation Gazebo + ROS2 integration (URDF, sensors) โœ…
Simulation MuJoCo digital twin (MjSpec from URDF at boot) โœ…
Simulation Isaac Sim rendering + domain randomization ๐Ÿ”ง
Simulation Isaac Lab / MJX parallel environments ๐Ÿ”ง
Simulation RL policy training (PPO / SAC) ๐Ÿ”ง

โœ… Complete ยท ๐Ÿงช Testing ยท ๐Ÿ”ง In Progress ยท ๐Ÿ—“๏ธ Planned

Limits and next steps

  • Hardware trails simulation. The dual-arm variant is proven in sim first.
  • Keypoint-conditioned policies are training but not yet validated on the real arms.
  • Navigation on hardware waits on the power restructure and the EKF.
  • Teleoperation for data collection comes next, leader-follower then VR.