Personal project
Genesis: a mobile manipulator, registers to VLA
A low-cost mobile manipulator with single-arm and dual-arm variants.

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 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.
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.
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.
