HORUS/blog

Sep 5, 2026 · humanoid-robots · robot-simulation · mujoco · isaac-sim

Best Simulators for Humanoid Robot Development

Start humanoid work in MuJoCo, move to Isaac Sim for large-scale learning, and use Gazebo when the stack is ROS 2. Your vendor's own model beats all three.

For most humanoid development, start in MuJoCo, move to Isaac Sim when you need large-scale learning, and use Gazebo when your stack is ROS 2. MuJoCo handles contact and balance on a laptop, and most humanoid research code already speaks it. The verdict flips when your vendor publishes a model of your exact machine, which wins whatever middleware you pair it with, ROS 2 or HORUS. The rest of this post is for somebody choosing where to spend the next quarter of humanoid work, with or without a robot on order.

You have watched the same demonstration reel everyone else has, and somewhere in the comments a person says all of this was trained in simulation. So you go looking for the simulation, and find four of them, each with a tutorial that assumes you already picked it.

One wants a graphics card you do not have. One installs in a minute and then falls over when you ask for a camera. One is clearly what the research papers use, but every example is a walking robot doing nothing recognisable as a task. One is the one your vendor mentions in a single line of documentation, with no explanation of why.

Underneath the choice is a worry you cannot shake. That you will spend a month learning a tool, get a simulated robot walking beautifully, and discover the whole thing was theatre because the real machine behaves nothing like the model. That the sim-to-real gap everybody mentions in passing is actually the entire problem, and the simulator you pick decides how badly it bites.

And the practical version of the worry: your hardware has not arrived, and you need to be doing something useful in the meantime.

Which simulator should you use for humanoid robot development?

MuJoCo is the right first simulator for most humanoid work, with Isaac Sim for large-scale learning and Gazebo when your surrounding stack is ROS 2.

The reason MuJoCo wins the default slot is not physics purity. It is that contact-rich problems, meaning feet on floors and fingers on objects, are exactly what MuJoCo was built to handle; it runs on an ordinary laptop; it is free and open source; and the published humanoid work you want to reproduce is mostly written against it. Reproducing somebody else's result is the shortest route to understanding, and it only happens when you share their tool.

Isaac Sim earns its place when the work becomes training rather than experimenting: many copies of the robot learning at once, photorealistic cameras, and scenes full of objects. That capability is paid for with an NVIDIA graphics card and an installation that will take a day.

Gazebo earns its place through ROS 2. If your robot's stack is nodes and topics, Gazebo speaks that language natively, and the sensor plugins and world files you need already exist.

What does a humanoid simulator actually do?

A humanoid simulator computes what a described machine would do under physics, then draws it and hands the results to your code as though they came from sensors.

Three parts matter. The physics engine works out contact, friction and momentum, which for a humanoid means the difference between a foot planted and a foot sliding. The model description declares the robot's links, joints, masses and limits, usually in a text format you can read and edit. The interface hands your program joint positions, forces and camera images, and takes commands back, ideally through the same calls the real machine uses.

The renderer is the part newcomers over-value. Pretty pictures matter only when a camera is part of the loop, which for locomotion work it usually is not.

What a simulator is not is a model of your specific robot. That comes from the description file, which is why two teams using the same simulator can get wildly different answers, and why the sim-to-real gap keeps catching people out at exactly the moment they thought the hard part was over.

Which simulators are actually in the running for humanoids?

Six, plus one thing that is not a simulator at all but gets confused for part of this decision.

MuJoCo is the research default for locomotion and manipulation. Isaac Sim, with Isaac Lab layered on it, is the training platform when you need many robots learning at once on NVIDIA hardware. Gazebo is the ROS 2-native option with the deepest sensor and world tooling. PyBullet is the quick Python option that installs without ceremony and is still fine for learning. Webots is the friendly one for teaching, with a graphical editor and no build system to fight. And your vendor's own simulation model, shipped inside their software development kit, is the one that matches the robot you actually bought.

The thing that is not a simulator is the layer your programs talk through, which is ROS 2, the vendor's stack, or a middleware such as HORUS, an open-source real-time robotics middleware for Rust, Python and C++ where the three languages share the same shared-memory ring buffers, so messages between programs on one machine are not serialised. That project is Apache-2.0 and validated in simulation, and it contains no physics engine, no renderer and no robot models.

How do the humanoid simulators compare?

Read the last two columns first, because most people are eliminated by their graphics card and by whether their stack is already ROS 2.

OptionWho it is forWhat it assumes you knowWhen to pick itWhen not to
MuJoCoResearchers and developers doing locomotion or manipulationPython, a text robot description, basic physics ideasYou want contact-rich work reproducible on a laptopYou need photorealistic cameras or a large populated world
Isaac Sim with Isaac LabTeams training policies at scaleReinforcement learning, Linux, NVIDIA toolingMany robots must learn at once with realistic renderingYou have no NVIDIA graphics card or no week to install
GazeboTeams whose robot stack is already ROS 2ROS 2 nodes, launch files, sensor pluginsWhole-system testing with sensors and navigationYour work is learning policies rather than integration
PyBulletBeginners and quick experimentsPython onlyYou want a robot moving on screen the same dayThe project has grown past scripts and needs fidelity
WebotsEducators, students, cross-platform classroomsVery little, by designSomebody has to learn without a Linux workflowYou need to match published research setups
Your vendor's own modelAnyone who owns or has ordered that robotThe vendor's software development kitCode must run on the physical machine laterThe vendor did not ship a model worth using
HORUS, a middleware rather than a simulatorTeams whose programs on the robot interfereRust, Python or C++, and how to split programsSeveral programs on one computer share heavy dataWhat you need is physics, models and rendering

For the three-way comparison outside a humanoid context, Isaac Sim, Gazebo and MuJoCo side by side goes deeper on each.

Which simulator fits if you are one person learning on a laptop?

MuJoCo, and start by reproducing somebody else's humanoid example rather than building your own.

A single person has one scarce resource, which is uninterrupted evenings, and the fastest way to waste them is installation. MuJoCo puts a humanoid on screen without a graphics card, without a container, and without a build system, which means the first evening ends with a robot moving instead of with a stack trace. PyBullet is an acceptable alternative if pure Python matters to you more than matching the research world.

The trap for solo learners is starting with a humanoid at all. Balance consumes every session, and the lessons about sensors, control loops and debugging arrive faster on a wheeled robot or a fixed arm. Learn the workflow on something that cannot fall over, then bring it to the humanoid.

The second trap is building your own robot description from scratch. Every humanoid model has quirks in its masses and joint limits, and hand-authoring those before you can tell a good model from a bad one produces a machine that fails for reasons you cannot diagnose.

What computer do you need to simulate a humanoid?

An ordinary laptop is enough for development, and a machine with an NVIDIA graphics card becomes necessary only for training at scale or for realistic cameras.

The split is clean in practice. Writing a controller, testing a behaviour, checking that your state machine stops the robot when a person appears: all of that runs on a processor, in MuJoCo, Gazebo or PyBullet, on hardware you already own. Training a walking policy, where the robot must attempt the task an enormous number of times, is where a graphics card stops being optional, and where Isaac Sim's design starts to make sense.

Two practical notes. Rendering and physics are separate costs, so a simulation with no camera in the loop stays cheap even when the robot is complicated. And your laptop's fan is not a benchmark: a simulation that feels sluggish while you develop is an annoyance, whereas a simulation that is wrong is a wasted quarter.

If a graphics card purchase is on the table, what a GPU actually buys you in robot simulation is worth reading before the order goes in.

What if your humanoid hardware arrives next quarter?

Use the vendor's own simulation model from day one, even if a general simulator would be nicer to work in.

The reason is continuity. Code written against the vendor's model calls the same functions, receives the same message shapes and hits the same joint limits as code on the physical machine, which means the day the crate arrives you are debugging hardware problems rather than porting software. Code written against a general simulator with your own robot description has to be translated first, and translation always takes longer than the estimate.

That does not mean you ignore MuJoCo. A sensible split keeps controller and policy experiments in the research simulator, where iteration is quick and other people's work is reusable, and keeps the integration work, meaning your behaviour, your safety logic and your plumbing, against the vendor's model.

The waiting period is also when you settle the questions that are painful later: how programs are split, what stops the robot, how you record a run. Those are decided in the vendor SDK versus your own stack question, and simulation is a cheap place to get them wrong.

What if you have never used a physics engine before?

Start with Webots or PyBullet, get something moving, and switch to MuJoCo once the vocabulary is familiar.

Physics engines have a small set of ideas that are unfamiliar to everyone at first: timesteps, solvers, contact parameters, joint damping, and the way a bad number in one of them makes a robot explode across the screen. Learning those ideas at the same time as a heavy installation and an unfamiliar workflow is what makes people conclude that simulation is not for them.

Webots removes almost all of the setup, includes robots you can drive immediately, and runs on Windows and macOS without argument. PyBullet asks only for Python. Either one lets you meet the concepts while the friction is low.

The switch to MuJoCo should happen the moment you want to reproduce research or work seriously on contact, and it will be easier then because you will recognise what the configuration is describing. Nobody who understands timesteps and contact settings finds MuJoCo hard; people who skipped that stage find it impenetrable.

What breaks first when you move to the real humanoid?

Timing breaks first, then perception, and the physics you worried about breaks last.

In simulation everything waits for you. The physics step does not advance until your code has answered, so a slow perception model simply makes the simulation take longer and changes nothing about the outcome. On the real machine, the world does not pause. Your model takes as long as it takes, the robot keeps moving, and code that was correct in simulation is now late.

Perception breaks second because a simulated camera is clean. Real images have blur, exposure changes, rolling shutter and a lens that was knocked in transport, and a model trained on the tidy version treats the real room as a novel planet.

Physics breaks third, and less dramatically than expected, mostly through friction, backlash and a battery that sags when the robot works hard.

The reason this order matters is that teams prepare for the third problem and get ambushed by the first, then blame the simulator for a fault that lives in how their programs share one computer.

What do you give up by picking the most realistic simulator?

You give up iteration speed, portability and your own attention, and those cost more than fidelity buys for most projects.

A realistic simulator has to be fed. Materials, lighting, sensor noise models, scene assets and a machine that can render them all become your responsibility, and every one is a place to be subtly wrong. Meanwhile each experiment takes longer to set up and longer to run, so you try fewer ideas, and trying fewer ideas is the real cost in a research-shaped project.

Portability goes too. Elaborate scenes and vendor-specific rendering are hard to hand to a collaborator, and impossible to run on the laptop of the student who joins next month.

The honest position is that fidelity is a tool for a specific question, not a virtue. If your question is whether a grasp policy survives a shiny object under bad lighting, realism is exactly what you need. If your question is whether the robot recovers from a shove, a plain simulator answers it sooner, and the shove is the part you should be spending on.

When is ROS 2 the better choice?

ROS 2 is the better choice when your simulation question is really an integration question, and that is a large share of humanoid projects.

Three cases stand out. First, when the robot must navigate: mapping, planning and the tooling for watching all of it exist in the ROS 2 world and pair with Gazebo out of the box, and rebuilding any of that yourself would consume the year. Second, when many people or several computers are involved, including an operator station, because ROS 2 was designed around that shape. Third, when you need sensor models you did not write, since Gazebo's plugin library covers cameras, depth sensors and inertial units that would otherwise be your homework.

There is also a hiring argument. Simulation work described in ROS 2 terms is legible to the people you will recruit and to the university partners you might work with.

HORUS is not the answer to any of that. A single-machine middleware ships no simulator, no sensor models, no navigation and no visualisation tools, and choosing one to solve an integration problem gets you a smaller community and none of the packages you needed.

Will a policy trained in simulation walk on the real robot?

No, and here is why: a policy learns the simulator it was trained in, and the physical machine is a different simulator with worse manners.

The failure is specific rather than mystical. A trained walking controller comes to rely on exact contact behaviour, exact joint response and exact timing, all of which the real robot gets wrong in ways that vary with temperature, battery charge and the floor. Transfer collapses at whichever of those the policy leaned on hardest.

The working practice is to make the training conditions vary deliberately: randomise masses, friction, delays and sensor noise so the policy cannot depend on any single value, and add the delays the real machine has rather than pretending the world waits. Policies trained that way survive contact with hardware in a form worth debugging.

None of this makes simulation optional. Every humanoid gait you have watched was learned somewhere a robot could fall thousands of times without a repair bill. Simulation is where the attempts happen; the real machine is where the assumptions get audited.

Partly, but not the way you think: popularity matters enormously, but the population that counts is the one working on your specific problem rather than robotics as a whole.

Gazebo has the larger overall community, since ROS 2 brought it along. For humanoid locomotion research, though, the useful population is in MuJoCo, and that is where the papers, the reference implementations and the person who already solved your bug can be found. Picking the globally popular tool while working in a corner where nobody uses it leaves you alone with a large forum full of the wrong questions.

The test is concrete. Find three recent projects doing the thing you want to do. Look at what they used. If they agree, that is your simulator regardless of general popularity, because you will be reading their code more often than any tutorial.

The second half of the test is whether you can leave. A robot description and a controller move between simulators with effort; a project built around one tool's scene format and plugin system does not.

How do you decide which simulator to commit to this quarter?

Decide by the question you are trying to answer this quarter, not by the robot you hope to have next year.

Write the question in one sentence. Can this policy recover from a shove. Can the robot find the mug and get to it. Does the arm stop before it hits the table when a person walks in. Each of those points somewhere different: the first at MuJoCo, the second at Gazebo or Isaac Sim with a real scene, the third at your vendor's model where the stop path is the real one.

Then check two constraints honestly. What hardware you have, since an NVIDIA card decides Isaac Sim in or out with no argument. And what your team already knows, since a simulator nobody else can install is a simulator you will run alone.

If your questions genuinely span all three categories, run two simulators and accept the cost of keeping two robot descriptions in agreement. That is a normal arrangement on serious humanoid projects, and it is cheaper than picking one tool and forcing it to answer questions it was never shaped for.

The HORUS Fit Framework reduces the surrounding stack choice to five things you can judge without a benchmark: ecosystem size, setup effort, team size fit, deployment target and licence. Simulators are chosen the same way, with setup effort and deployment target doing most of the work and licence mattering the day a product is involved.

The week your simulated robot works and the real one hesitates is a bad week to start researching middleware. Put HORUS on the shelf before then: star it so it is in your list when you start building.

Found this useful? Share it:Discuss on HNShare on X