Personal project

Genesis: a mobile manipulator, registers to VLA

A low-cost mobile manipulator with single-arm and dual-arm variants.

5 min read

Active
Render of two Genesis variants side by side, a single arm on a mecanum base and two arms on a lift column
Clip 1. Teleoperation, mapping trials, the custom electronics and simulated tasks.

Abstract

Genesis Bot is a mobile manipulator I keep improving to learn robotics end to end, from ESP32 registers to learned policies. It started as an Ackermann-steering RC car that I repurposed for robotics. It is now an omnidirectional base with two arms on a lift column. I use it to explore autonomous behavior. I am currently working on:

  • A behavior tree orchestrator that combines classical planning with learned policies.
  • End-to-end models such as VLAs.
  • A custom multimodal keypoint-based model, which I am evaluating.

Introduction

This is a personal project. I set my own deadlines, which leaves time to explore, learn and take on problems I'm interested in, or challenge myself in areas where I think I am lacking. Lately I have focused on researching state-of-the-art approaches to robot autonomy and control, following my work on other projects.

Although this is a low-cost platform, it is still a good place to evaluate approaches to autonomous behavior. Its limits are outweighed by how accessible it is and how easy it is to test and improve.

The sections below cover the platform, motion planning, perception, autonomy and learning.

The V3 Genesis platform on a desk, with the Isaac Sim scene, the robot model and planner code on the monitors behind it
Figure 1. The V3 platform on the bench, with its improved simulated version on the monitors.

The platform

  • Base. Four mecanum wheels. ESP32 firmware with register-level PWM, hardware encoders and per-wheel PID.
  • Arms. SO-101 5-DOF arms. One on the single-arm variant, two on a lead-screw lift column on the dual-arm variant.
  • Compute. A Raspberry Pi 5 and two ESP32s running ROS 2 Jazzy. A Zenoh bridge links the robot to the dev machine.
  • Power. Two 4S 18650 packs with a BMS, buck converters and USB-C.

Motion planning

The whole-body planner moves the base, the lift and the arms together as one 11 + 3 DOF system. It runs on CPU. It uses masked, coarse collision search, vectorization and parallelization to produce efficient, collision-free whole-body motion in under a second. Pinocchio and Coal compute the kinematics and collision checks. OMPL searches for a collision-free path. TOPPRA then re-times the path to respect torque limits.

Three choices keep planning fast on CPU:

  • Collision checks run on batches of configurations with SIMD, not one at a time.SIMD (single instruction, multiple data) evaluates several configurations with one CPU instruction.
  • IK is solved in batches and is not tied to one robot.
  • A coarse check prunes candidates before the fine check. An edge is dropped as soon as one configuration collides.

A dual-arm plan takes about 600 ms.

Clip 2. Whole-body plans in Isaac Sim, base, lift and arms moving together.

Semantic perception

Perception has multiple consumers. They are high-level functions built on lower-level processes that read and process data from the hardware or the shared tooling. Dependency injection keeps each consumer fully abstracted. Consumers share the same interfaces and ROS 2 topics for input and output, so one can easily be swapped for another. The first consumer tested on hardware used classical PBVS: feature detection, depth estimated with a pinhole camera model, and base control through PID. That resulted in what I called Good Boy mode.

Good Boy mode, the first perception consumer tested on hardware, tracking a green ball.

I am currently developing a learning-based perception stack. It works in three steps:

  • Features. A pretrained DINOv3 ViT-S/16 extracts features from the camera image. Its weights stay frozen. Features from layers 6, 9 and 12 are combined into one dense feature map.
  • Keypoints. Small networks trained on top of that map predict 2D keypoints for each task, such as grasp contact points.
  • Pose. PnP matches the 2D keypoints to 3D points, using the floor plane or a second camera view. The result is the object's 6-DoF pose.

The policy also receives the feature map directly. It can then react to what the camera sees during the grasp, instead of relying on one pose estimate.

Early results are promising. I will update this page once I have full results.

Autonomy

The stack is split into decoupled layers. Each layer can change without affecting the others:

  • Platform abstraction. Low-level interfaces to the hardware, so the layers above do not depend on the robot.
  • Tooling. Shared utilities used across the stack.
  • Skills. High-level functions: pick, place, explore, approach and policy (RL, SmolVLA and others).

The behavior tree calls skills as its leaves. This makes long-horizon tasks reliable. Tasks are defined in YAML. Macros expand into whole-body goals at runtime. Each goal has an on_failure branch, so the behavior tree can recover instead of stopping.

Learning

The planner also works as a scripted expert. It generates demonstrations without teleoperation. I currently train ACT and SmolVLA on these demonstrations. A trained policy runs as one step in the behavior tree and sends commands through the same interface as the planner.

I am currently working on leader-arm teleoperation. It will collect demonstrations for future dexterous tasks.

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 ๐Ÿ—“๏ธ
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 tested in simulation first.
  • Keypoint-conditioned policies are in training. They are not yet tested on the real arms.
  • The power system and hardware interfacing are being reworked around a custom-designed PCB.
  • Leader-arm teleoperation is in progress.