Concept render — not footage of OmniBot

OhhO OS · Open Source

The open engine
for any robot.

OhhO OS is the open-source, robot-agnostic engine the whole platform runs on. One runtime controls anything on wheels, legs or wings — with or without ROS — and carries the entire stack from perception to training. It is the engine under every OhhO product, and it is yours to install, self-host and extend.

$ pip install 'ohho-os[base]'
>>> from ohho import Robot
>>> bot = Robot.connect("omnibot") # ROS or no-ROS
1.1.0

What's in the box

Six adapters, two runtimes, a real agent brain, the record→train→serve loop, a skill-registry prototype, hardware profiles, and CLI commands — 197 engine tests, Apache-2.0.

Control
6 adapters · 2 runtimes

sim, serial base, bus-servo arm, DDS-native, ROS 2 topics, and composite (base+arm merge). Native runtime or ROS 2 — auto-detects which is available.

Agent
Real agent brain

HarnessBrain wires agent_engine — perceive→reason→act→reflect with LLM tool-calling. Tools built automatically from robot capabilities. ScriptedBrain fallback needs zero deps.

Train
Record → Train → Serve

Recorder captures 9-D state+action to LeRobot v2.0. finetune() delegates to lerobot_engine (smolvla/act/diffusion/openvla). FastAPI server with /predict endpoint.

Skills
Skill market

@skill decorator, ohho market list/run, 4 built-in skills (patrol, wave, stop, status). Capability-gated — a skill that needs manipulation won't run on a base-only robot.

Profiles
Hardware profiles

5 built-in profiles (pi_workstation, jetson_single, workstation_single, mac_dev, edge_cpu). ohho profile detect auto-detects your machine. device="auto" everywhere.

CLI
10 CLI commands

ohho doctor list version connect sim drive agent serve market profile — everything from diagnostics to serving a policy, from one command.

Why OhhO OS

Built differently from the rest

The market is full of robot frameworks and "agentic OS" projects. Here is what sets OhhO OS apart — no asterisks, no lock-in.

ROS optional — never required

Most agentic robot stacks force a choice: go all-in on ROS, or abandon it entirely. OhhO OS runs both ways — a lightweight pure-Python runtime or the full ROS 2 stack — and you switch with a single argument. get_runtime("auto") detects ROS 2 automatically.

Truly robot-agnostic

Write a behavior once and run it on a wheeled base, a quadruped, a humanoid or an arm. Capability-typed commands mean swapping hardware never means rewriting your application.

The whole lifecycle, one engine

Other frameworks stop at control. OhhO OS also carries the agent brain, data collection, training, serving, and skills — the same engine from first prototype to deployed fleet.

Agent-native by design

A continuous perceive → reason → act → reflect loop powered by agent_engine with an LLM tool-calling reasoner. Tools are built automatically from the robot's capabilities. ScriptedBrain fallback needs zero deps.

Training built in

Record demonstrations → fine-tune VLA policies (SmolVLA, ACT, diffusion, OpenVLA) → serve over REST → close the loop. All with device="auto" hardware detection. Mock mode for sim loops — no GPU needed.

Open source, zero lock-in

Apache-2.0 licensed. 197 tests in the engine. Self-host every line, bring your own models and data, and move to OhhO Cloud only when you want managed GPUs, training and fleet operations.

Choose your runtime

Run with ROS, or without it

OhhO OS ships two runtimes behind one identical API. Pick what fits — and switch later by changing a single argument. Your agent, training and application code never change.

No-ROS (native)
Best for: Getting started · single robot · non-ROS hardware · laptop / edge compute · Windows or macOS
  • ▸Zero setup friction — pip install and go, no ROS distro
  • ▸Lightweight, fast cold start, fewer moving parts
  • ▸Pure Python — no workspaces, colcon or launch files
  • ▸Yahboom serial and ROS 2 topics; other protocols are roadmap
  • ▸Runs anywhere Python runs
$ pip install 'ohho-os[base]'
ROS 2
Best for: Production autonomy · Nav2 / SLAM / MoveIt · multi-robot or multi-machine · existing ROS fleets · Gazebo / Isaac sim
  • ▸The entire mature ROS ecosystem — Nav2, SLAM, MoveIt 2
  • ▸ros2_control, RViz, and thousands of community packages
  • ▸Battle-tested multi-node / multi-machine over DDS
  • ▸Industry-standard integration with existing fleets
  • ▸The most capable navigation and manipulation stacks
$ pip install 'ohho-os[ros2]'

No wrong choice. Start native today and graduate to ROS 2 later — Robot.connect("omnibot", runtime="ros2") — without touching the rest of your code.

CapabilityNo-ROSROS 2
Installpip install — any OSUbuntu 24.04 + ROS 2 Jazzy
Drive · teleop · telemetryyesyes
Agent (Mind) · Train · Data · Serveyesyes
DDS / MAVLinkroadmaproadmap
Lightweight nav (built-in A*)yesyes
Nav2 full navigationnoyes
SLAM (slam_toolbox / 3-D)basicyes
MoveIt 2 manipulationnoyes
Multi-machine distributionpartialyes (DDS)
ToolingFoxgloveRViz + Foxglove + ecosystem
Footprint / cold startlight / fastheavy
OS supportWindows · macOS · LinuxLinux
Robot-agnostic

One engine, every robot

A capability model describes what a robot can do — not how it does it — so the same code runs across wildly different hardware, degrading gracefully when a capability is absent. Adapters translate each robot's native protocol underneath.

Robots with code today (C080)
Today: OmniBot mecanum base + SO-101 arm
Transports with code (C079)
ROS 2 topicsROSBridgeWeb SerialWeb BluetoothYahboom serial
Roadmap transports
DDS (experimental)MAVLinkCANopenOPC UAPROFINETEtherNet/IPMQTTVDA 5050ModbusEtherCAT
The platform

Nineteen products. One engine.

Every OhhO product — from Build and Train to Autonomy, Mind and Fleet — is a console that runs on OhhO OS. Use the open engine on its own, or sign in to OhhO Cloud for the managed, hosted experience on top.

Explore all 19 products →
Get started

From install to a moving robot

  1. 1
    Install

    pip install 'ohho-os[base]' — add [serial], [arm], [unitree], [agent], [train], [serve] or [ros2] as you need them.

  2. 2
    Connect

    Robot.connect("omnibot") auto-detects the runtime, or pass transport="sim://" / "serial://" / "dds://" / "ros2://".

  3. 3
    Control

    bot.drive(vx=0.2), bot.move_joints([...]), bot.telemetry() — same API on any robot. Capability-gated, safe no-ops.

  4. 4
    Automate

    Agent(bot).run("explore the room") — perceive→reason→act→reflect loop with LLM tool-calling.

  5. 5
    Train & Serve

    Recorder → finetune() → ohho serve — record→train→serve loop with mock mode for sim (no GPU needed).

  6. 6
    Skills

    ohho market list / ohho market run omnibot patrol — 4 built-in skills, or write your own with @skill.