Sep 5, 2026 · simulation · gazebo · isaac-sim · mujoco
Isaac Sim, Gazebo or MuJoCo: Which Simulator Fits Your Project?
Gazebo fits whole-robot testing, MuJoCo fits control and learning work, Isaac Sim fits camera-driven robots with a strong graphics card. Here is how to choose.
Gazebo fits whole robots with sensors, MuJoCo fits contact-rich control and learning research, and Isaac Sim fits vision work backed by a serious graphics card. Each is strongest at a different job, and the choice decides what you can test cheaply, not how the robot behaves later. The verdict flips when a robot works in simulation and fails on hardware, which is a timing question for ROS 2 or HORUS. The rest of this post is for someone who has a robot design, a deadline and one machine to run everything on, choosing where simulation time goes.
Everyone told you to simulate first, so you did. You installed a simulator on a Friday, and by Sunday night you had a robot model that fell through the floor and a wheel that spun without the machine moving anywhere. Then you watched a video of a humanoid learning to walk inside a world that looked photographed rather than drawn, and now you are not sure whether you picked the wrong tool or whether the video was made by twenty people with a compute budget.
The confusion underneath is that nobody told you what the simulator is for. Is it for checking that your code does not crash? For training a controller? For showing an investor something that moves? Those are three different tools and three different months of work.
Meanwhile the real robot is late, the parts are on a shelf, and you can feel a month disappearing into building a virtual version of a machine that does not exist yet. You want to know which tool to open on Monday, and how much of the weekend you just lost was your fault.
Which simulator should you build your project on?
Choose by the question you need answered: Gazebo to test a whole robot, MuJoCo to develop or train a controller, Isaac Sim to make a camera-driven system believable. That sounds obvious and is routinely ignored, because simulators get chosen from videos, and every video shows the one job that tool does best.
A whole-robot project means several programs running together, a driver, a planner, a navigation layer, a behaviour layer, against simulated wheels, a simulated depth camera and a world with doors and furniture in it. Gazebo is built around that shape, and the plumbing between it and a real robot's software already exists.
A controller project means the interesting part is contact: a foot landing, a finger closing, a joint pushing against something that pushes back. MuJoCo was built for contact, which is why so much locomotion and manipulation research is done there.
A vision project means the pixels matter. When a robot's behaviour comes from a network looking at images, a simulator whose images look nothing like the world teaches that network the wrong lesson, and closing that gap is the reason Isaac Sim exists.
What does a robotics simulator actually do?
A simulator does three separate jobs, and knowing which one you need makes the choice much easier. The first is physics: working out where everything ends up a moment from now, given masses, joints, friction and whatever is pushing against what. The second is rendering: producing the images a camera would have seen. The third is pretending, presenting itself to your software as motors, encoders, a laser scanner and a clock, so your code cannot easily tell it is not attached to a machine.
Tools are strong in different jobs. A simulator with excellent contact behaviour may render plainly. One with beautiful images may treat a gripper crudely. One that is mediocre at both can still be the right choice, because what you are testing is whether your programs agree with each other.
That third job is the one people underrate. A simulator that speaks the same interfaces as the robot lets you find the ordinary bugs, a flipped sign, a mislabelled frame, a program that dies quietly on startup, before those bugs meet an expensive machine and an audience.
What are the real simulator options today?
About seven simulators carry real projects, and the rest are variations on them. Gazebo is the default for whole-robot work and the one most ROS 2 material assumes. Isaac Sim is NVIDIA's, built for photoreal rendering and for generating labelled images to train vision models, with Isaac Lab on top for training locomotion and manipulation policies. MuJoCo, open source under Apache-2.0, is the standard in control and learning research. Webots is the friendliest to install. PyBullet is still the quickest way to get a Python experiment moving. Drake suits teams who want to check a manipulation plan rather than watch one. And a bought platform usually arrives with a model for one of them.
One separation is worth making early: the simulator is not the layer your programs talk through. That layer is ROS 2, or a vendor 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, validated in simulation, and it is not a simulator and does not replace any of the tools above.
How do the simulators compare?
Read the last column first, because most projects are eliminated into a simulator rather than argued into one. The graphics card you already own, the ecosystem your code already lives in, and the week you can actually spare will cross out most of this table before taste gets a vote.
| Option | Who it is for | What it assumes you know | When to pick it | When not to |
|---|---|---|---|---|
| Gazebo | Teams simulating a whole robot with sensors | ROS 2 conventions, robot description files, Linux | The robot has sensors and several programs to test together | You are training a policy that needs enormous numbers of runs |
| Isaac Sim | Teams whose robot is judged by what its camera sees | Graphics drivers, scene authoring, a heavy install | Vision models need images and labels you cannot photograph | The machine has no capable NVIDIA graphics card |
| MuJoCo | Control and learning researchers | Python, contact dynamics, its own model format | Legs, hands and contact decide whether the behaviour works | You need a laser scanner, maps and a full sensor suite |
| Webots | Educators, beginners and small teams | Very little at the start, one language later | You want a robot moving on screen the same afternoon | The project leans on a large package ecosystem |
| PyBullet | Individuals prototyping in Python | Python and basic rigid-body ideas | A quick experiment matters more than fidelity | The result has to convince somebody else |
| Drake | Teams doing manipulation that must be checked | Optimisation, control theory, C++ or Python | The plan has to be proven, not only watched | The team wants motion before it wants mathematics |
| A robot maker's own simulator | Owners of a bought platform | The vendor's tools and the vendor's limits | The hardware came with a model you would otherwise rebuild | You must simulate hardware the vendor does not sell |
| HORUS, a middleware rather than a simulator | Teams whose programs interfere once off the simulator | Rust, Python or C++, and how the processes are split | The physics was never the problem and the timing was | What you are missing is a world, sensors and images |
Nothing in that table ranks physical accuracy, because for almost every project accuracy is not the deciding question.
Are you doing research, shipping a product, or learning?
Researchers should follow their field, product teams should follow their robot's software, and learners should pick whatever gets something moving soonest. In research the simulator is part of the argument: if the papers you are answering use MuJoCo, using MuJoCo means your numbers can be compared and your code can be run by a reviewer. Choosing differently to be clever costs you the audience you were writing for.
A product team has the opposite priority. The simulator earns its place by running the same code that runs on the robot, unattended, every night, and telling you when somebody broke the arm. That makes integration with your actual stack the deciding feature, and it usually points at Gazebo or at whatever the robot vendor ships.
A learner should optimise for staying interested. The failure mode for a beginner is four evenings of installation followed by giving up, and the tool that avoids that is worth more than the tool a famous lab uses. Webots and Gazebo both get a wheeled robot driving quickly, and either one teaches the concepts that transfer.
What computer will you run the simulator on?
The machine you own eliminates options before any preference does. Isaac Sim expects a recent NVIDIA graphics card with generous video memory and a large install, and on a laptop with integrated graphics it is not a slow choice, it is not a choice. That single fact decides this question for a large share of small teams, and there is no configuration flag that argues with it.
Gazebo runs on ordinary hardware, and a big world full of sensors will still make a laptop labour, because every simulated camera and laser scanner costs real computation. MuJoCo is light enough to run comfortably on a normal machine when you are simulating one robot, and wants a graphics card when you start running many copies for training.
Two practical notes. A workstation under a desk or a rented machine in a data centre is a legitimate answer, and many teams do their heavy simulation there and keep laptops for editing. And do not run the simulator on the robot's own computer, which is already busy being a robot.
How soon do you need the simulator to earn its keep?
If the deadline is weeks away, use the simulator your code already connects to, and if it is quarters away, choosing on merit starts to pay. The reason is that the cost of a simulator is almost never the installation. The cost is modelling your robot: meshes, joint limits, masses that are guesses, sensor placement, friction values that somebody has to invent and then tune until the machine stops sliding across the floor.
That modelling work is per robot and mostly per simulator, and it is where the month goes. A team that switches tools in month three pays it twice.
What you get soonest is not fidelity, it is a catch net. Within days a simulator will find the wrong sign in a transform, the program that never started, the arm that swings through its own base. Those bugs cost nothing to fix in a simulator and cost a gearbox on hardware. Fidelity, in the sense of the simulated robot behaving like the real one, arrives much later, if it arrives at all.
What does your team already know how to do?
Pick what your team can debug at midnight, because every simulator fails in ways that are strange the first time. The description formats are the first tax: each tool wants your robot written in its own dialect, and converting between them is a job that is never quite finished, so a team already fluent in one dialect starts a long way ahead.
A Python-heavy team, especially one that came from machine learning, will be at home in MuJoCo or PyBullet and will find a full simulation platform heavy and strange. A team fluent in ROS 2 will find Gazebo familiar because the vocabulary is shared. People who have worked in games or graphics take to Isaac Sim faster than roboticists do, because the scene, the asset pipeline and the renderer are all familiar objects to them.
The mixed-language question matters here too, since simulation code, control code and learning code often arrive in different languages and have to meet, which is the same boundary that makes robot software untidy in general.
What do you give up by committing to one simulator?
You give up portability of the robot model, and that is a larger cost than it sounds. The model you build is not just geometry: it is contact settings tuned until the feet stop skating, sensor plugins somebody wrote, a controller interface that matches this tool's assumptions, and a pile of small corrections nobody wrote down. Very little of that survives a move to another simulator.
You give up a certain kind of honesty too. Each tool has its own contact model, and a behaviour tuned inside one can be quietly exploiting that model rather than being correct. A gripper that holds a mug in one simulator and drops it in another is not two bugs, it is one unmodelled thing.
And you give up time in an obvious way: hours in the simulator are hours not spent on hardware. That trade is worth it for anything that could break a machine or a person, and it is a bad trade for questions the real robot could answer in an afternoon on a bench.
When is ROS 2 the better choice?
ROS 2 with Gazebo is the better choice for most robots that have to move around, perceive their surroundings and be worked on by more than one person, and HORUS is not the answer for a team whose real gap is that the robot has no map, no planner and no drivers yet. If you are choosing between writing a navigation stack and adopting one, adopt. That code represents years of work, it has been run on far more robots than yours will be, and rewriting it is a project rather than a task.
ROS 2 also wins whenever the work must be shared. A university group, a supplier delivering a subsystem, a team that hires every year: all of them get more from a common interface than from a private one, and a simulator that plugs into that interface is worth more than a better simulator that does not.
And it wins on recording and replay. Capturing a run, real or simulated, and playing it back at a desk afterwards changes how quickly a team understands its own robot, and that habit has saved more projects than any physics engine.
Does a robot that works in simulation work in the real world?
No, and here is why: a simulator only models the parts of the world somebody thought to model, and the failures that hurt come from the parts nobody thought about. The floor in the simulator has one friction value. The real floor has dust, a threshold strip, a patch where a cleaner used something slippery, and a slope you never noticed until a robot rolled down it.
The pattern repeats everywhere. The simulated gearbox transmits motion exactly, and the real one has play in it, so the arm arrives at a slightly different place each time. The simulated camera returns a perfect image instantly, and the real one adjusts its exposure as the robot turns towards a window, hands you a blurred frame, and hands it over later than you expected.
Then there is the clock. In a simulator, time waits for your code. On a robot, time does not, and programs that were never late in simulation start being late, which is why a machine can behave differently on every run.
Will a better simulator fix a robot that behaves differently every run?
Partly, but not the way you think: a better simulator will make the physics more convincing without touching the most common cause, which is that programs on the robot disagree about when things happened. Higher fidelity helps with wheels that slip and grippers that drop things. It does nothing for a perception program that hands the planner a picture of where the world was a moment ago.
The two problems have different fingerprints and are easy to tell apart if you look. A physics problem shows up as the same wrong thing happening in the same situation: the robot always understeers on that carpet, always misses that shelf by the same margin. A timing problem shows up as the same input producing different behaviour on different days, worse when more programs are running, better when you switch something off.
Run the test before spending a quarter. Start the robot with the heavy programs disabled and repeat the motion. If it is repeatable then and unrepeatable with everything running, the gap is not in the simulator, and what real-time actually means for robot software is the honest treatment of it.
Why do so many teams end up running two simulators?
Because training a controller and testing a system pull in opposite directions, and one tool rarely does both well. Training wants a small world, no sensors it does not need, and the ability to run the same scene over and over without a person watching. System testing wants the sensor suite, the same interfaces as the robot, and one run you can watch and record.
So the common shape is: a policy is trained in MuJoCo or Isaac Lab, then the trained controller is dropped into a Gazebo world with the full stack around it to check that it does not confuse the navigation layer, then it goes to hardware. Each stage answers a question the previous one could not.
The cost of that arrangement is two robot models drifting apart, which is a real maintenance burden and the reason it should be a deliberate choice rather than an accident. The mitigation most teams land on is to keep one source of truth for the robot's description and generate what each tool needs from it, so a changed link length does not have to be remembered twice.
How do you decide which simulator to use?
Decide by writing down the single question you want a simulator to answer this quarter, then picking the tool that answers it with the least modelling work. Not the best simulator, the one that answers your question. Almost every regretted choice comes from picking a tool for a question the project did not have yet, and the modelling cost being discovered afterwards.
Here is the decision in five lines.
- If you are testing a whole robot with sensors -> Gazebo, because the connection to your robot's software already exists.
- If you are training a walking or grasping controller -> MuJoCo or Isaac Lab, because contact and repetition are the entire job.
- If your robot is judged on what its camera sees -> Isaac Sim, because the images have to be believable to the network reading them.
- If you are learning and want to stay interested -> Webots, because a robot moving this afternoon beats a perfect world next month.
- If the simulated robot works and the real one does not -> stop buying fidelity, because the gap is in drivers and timing rather than physics, and it is nearer to what a humanoid actually runs onboard than to any renderer.
The HORUS Fit Framework reduces the choice around the simulator to five axes you can judge without a benchmark: ecosystem size, setup effort, team size fit, deployment target and licence. For simulation, setup effort and deployment target usually decide it, and licence matters more than people expect the day a client asks whether the work can be handed over.
The week your simulated robot works and the real one does not is a bad week to start reading about middleware. Put HORUS on the shelf before then: star it so it is in your list when you start building.