HORUS/blog

Sep 5, 2026 · ros2 · hobby-robotics · beginners · middleware

Is ROS 2 Overkill for a Hobby Robot?

For a first hobby robot ROS 2 is usually overkill, and one plain program on one board gets you moving sooner. Here is when ROS 2 earns its setup cost.

For a first hobby robot ROS 2 is usually overkill, and neither ROS 2 nor HORUS beats one plain program on one board. Middleware earns its cost when a robot needs mapping, navigation, or several programs that must agree with each other, and a first robot usually needs none of those. The verdict flips the moment your robot has to find its own way around a room. The rest of this post is for someone standing over a half-built robot, deciding what to install before the weekend disappears.

Everyone told you to learn ROS 2, so you did what people do. You found a tutorial, discovered it wanted a particular Ubuntu version, and spent an evening on that instead. Then something about a workspace. Then a build tool with a name you had never heard. Three evenings in, there is a turtle moving on your screen and nothing at all moving on your desk.

Meanwhile the robot itself is two motors, a driver board, a distance sensor and a chassis you printed, and you already know how to make the motors turn, because you did it in a few lines the week before you started reading about frameworks. The nagging feeling is not that ROS 2 is bad. It is that you cannot see the line between the tutorial and your robot, and part of you suspects the reason is you. You are also aware that everyone who does this professionally uses it, which makes walking away feel like cheating rather than like a decision.

Is ROS 2 more than a first robot needs?

Yes, for most first robots ROS 2 is more machinery than the robot needs. ROS 2 was built for robots with many programs, hardware from many vendors, several people committing code, and a lifespan measured in years. A first hobby robot is one board, one loop and one author. Almost every piece of ceremony you meet in the first week exists to protect a project from a problem you do not yet have.

The cost is not runtime. The cost is the number of ideas you have to hold in your head before anything moves: workspaces, packages, a build tool, launch files, coordinate frames, parameters, message types. Each of those exists for a genuinely good reason, and each is also a reason your motors are still not turning on Sunday evening.

So the honest test is short. Can you name a problem ROS 2 solves that you actually have this month? If you can, install it today. If you cannot, you are installing a solution and quietly hoping the matching problem turns up later.

What is robot middleware, in plain terms?

Middleware is the post office between the separate programs that make up a robot. Instead of one program that does everything, you have several: one that reads the camera, one that works out where the robot is, one that decides what to do, one that drives the motors. Middleware lets them send each other messages without any of them knowing how the others were written.

The everyday version is a group chat with named channels. One program posts readings on a channel called distance, and anything that cares about distance reads that channel. You can restart one program without restarting the robot, write one part in a different language, or hand a part to a friend.

What it costs is bookkeeping. Every program has to be described, named, built and launched, and the connections between them live in configuration rather than in a line of code you can see. On a robot small enough to live in one file, that bookkeeping is pure cost with nothing on the other side of the ledger.

What can you actually build a hobby robot on?

There are five honest choices: one plain program, a kit vendor's own library, microcontroller firmware, ROS 2, or a shared-memory middleware. One plain program means Python on a single-board computer with a loop that reads, decides and drives, and it is the correct answer far more often than the internet suggests. A vendor library is what arrives with a kit, and it is fine until you want to change the hardware.

Firmware means writing C on an Arduino-class board with no operating system underneath, which is the right answer whenever the robot only needs to react. ROS 2 is the professional default and brings mapping, navigation, visualisation, recording, simulator integration and vendor drivers, in exchange for setup and concepts. HORUS is a real-time middleware for Rust, Python and C++ in which all three share the same shared-memory ring buffers, so messages between processes on one machine are never serialised; it is Apache-2.0, it is validated in simulation, and it is aimed at robots whose control loop is already struggling rather than at first robots.

How do the choices compare side by side?

Find the row whose last column describes you, and cross that row out. For most people reading this, four of the six disappear immediately.

OptionWho it is forWhat it assumes you knowWhen to pick itWhen not to
One plain programFirst robots and one-person projectsBasic Python and how to read a sensorThe robot does one job and you are the only authorRuns must be recorded and replayed later
A kit vendor's libraryPeople who want the robot working todayThe vendor's own examplesYou care about the behaviour, not the plumbingYou want to swap in your own motors or sensors
Microcontroller firmwareRobots that only need to react to sensorsC or C++ on a small board, and wiringThere is no camera and no map involvedYou need a camera, a network or a laptop in the loop
ROS 2Builders who want mapping and navigation without writing themLinux, packages, launch files and a build toolThe robot must work out where it is and go somewhereYou have one weekend and a two-wheeled toy
HORUSHobbyists whose working robot now stutters under loadPython, Rust or C++, and how your programs are splitSeveral programs on one board must agree quicklyYou are still choosing a chassis
A simulator firstPeople learning without hardware to handOne simulator and its scripting languageThe parts have not arrived yetYou want to feel real motors move

What does it look like when a hobby project stalls?

A stalled hobby robot has almost always stalled at the setup, not at the robotics. The pattern is recognisable: an operating system reinstall, a dependency error nobody on the internet has in quite your form, a tutorial written for a version you cannot install, and then three weekends where the robot sits on the desk untouched. Nothing broke. The enthusiasm just ran out somewhere between the terminal and the chassis.

There is a second pattern that looks like success. The robot works, but only you can start it, and starting it means a text file of commands you paste in order.

And a third: the robot works, you add a camera, and now everything is late and jerky, so you start editing sleep values to compensate.

Those three have different cures. Stuck at setup means you picked too much tool. A fragile start sequence means you need structure. Late and jerky under load means the programs on the board are getting in each other's way, which is the only one of the three that is genuinely a middleware problem.

Are you building for fun, for a class, or for a portfolio?

For fun, start with the smallest thing that moves; for a class or a portfolio, the answer changes, because someone else is going to read your work. If nobody but you will ever see the code, the only metric that matters is whether the robot did something new this session. Choose whatever keeps that streak alive, and be suspicious of any tool that costs three sessions before the wheels turn.

For a class or a competition, read the brief before reading anything else. If your marker expects the standard vocabulary, or your team already has code, the decision has already been made for you.

For a portfolio, be blunt with yourself about the goal. If you want a robotics job, learn ROS 2 even when it is overkill for the robot you are holding, because ROS 2 is the word recruiters search for and the shared language of every interview you want. In that case the robot is the excuse and the framework is the point, which is a completely legitimate way to spend a winter.

What can the board on your robot actually run?

If your robot's brain is a microcontroller, ROS 2 is not a choice you have; if it is a Linux board, it is. An Arduino-class board has no operating system, so what you write is firmware: a loop, some interrupts, and direct control of pins. That is not a lesser path. For a robot that reads a sensor and reacts, firmware is the correct engineering answer and everything else is decoration.

A Raspberry Pi-class board runs Linux and therefore runs anything discussed here, though a small board doing camera work alongside a full stack will let you know about it.

The arrangement most serious hobby robots eventually reach is two-part: a Linux board doing the thinking and a microcontroller doing the tight motor loop, connected by a wire. That split removes most of the timing pressure from the Linux side. If your robot is heading that way and you want to combine wheel odometry with an inertial sensor, how sensor fusion is put together is a better next read than any framework comparison.

How many weekends do you have?

If you have one weekend, do not install a framework. Spend it on one script that makes the wheels turn and the robot stop before it hits the table leg. You will end Sunday with something that moves, and something that moves is what makes you come back next weekend.

With a month of evenings you can learn ROS 2 properly, and it is a reasonable way to spend a month. Just be honest about which thing you are doing: that month buys you ROS 2, not a finished robot, and the robot arrives afterwards.

With a season, build the robot the simple way first and then rebuild it with structure once you know what it actually does. The second build is always better, because the first one told you the requirements.

The outcome to avoid is half-learning a framework. Half-learning costs you the whole setup and gives you almost none of the packages, and it tends to end with a robot that neither moves nor teaches.

How much programming do you already know?

If you are still learning to program, a framework will hide the exact thing you are trying to learn. Beginners need short feedback loops: change a number, run it, watch the wheel spin differently. Anything that puts a build step and a launch file between your edit and your robot makes learning harder, not more professional.

If you are comfortable in Python but new to Linux, notice that your difficulty is the operating system rather than the robot. ROS 2 will teach you Linux, but it will teach you in the least forgiving order possible.

If you are an experienced programmer who is new to robots, you will have no trouble with the concepts, and you should still start small, because the hard parts of robotics are physical. The encoder counts backwards. The distance sensor lies when the wall is close. The battery droops and the robot veers left. None of that is architecture. If you want to see how little code a working node needs, a plain Python node next to its ROS 2 equivalent makes the comparison concrete.

What do you give up by skipping ROS 2?

You give up maps, navigation, visualisation, replay, simulation and other people's drivers, which is a genuinely large pile. You give up being able to say "go to the kitchen" and having that work. You give up a window on your laptop showing what the robot believes about the world, which is the single best debugging tool in robotics and impossible to appreciate until you have used it.

You give up recording a run that went wrong and replaying it at your desk afterwards, instead of chasing the robot around with a laptop. You give up a simulator, so you cannot make progress while the battery charges. And you give up a driver for the lidar you bought, written by someone who read the protocol document so that you never have to.

You also give up community. A pasted error message returns results, and a question posted in the standard vocabulary gets answered. So skip ROS 2 because you do not need those things yet, which is often true, and not because the installation annoyed you on a Tuesday.

When is ROS 2 the better choice?

ROS 2 is the better choice as soon as your robot has to understand the room rather than just react to it, and HORUS is not the answer for a hobby robot that has no timing problem at all. If you want autonomous navigation, mapping, or an arm that plans its own path around an obstacle, use the packages that exist. Rewriting a navigation stack is not a weekend and not a season; it is somebody's career.

Use ROS 2 when your lidar ships with a vendor driver, when your course or your competition expects it, when you are working with other people, and when recording and replaying runs would save your evenings.

And use it when you simply want to learn the professional tool, which is a complete reason on its own. A hobby is allowed to be about learning rather than about shipping. Most hobbyists who stay in robotics end up on ROS 2 sooner or later, and arriving there deliberately, once you have a robot that needs it, is a better route than arriving there confused in week one.

Is ROS 2 simply too heavy for a small computer?

No, and here is why: the weight you are feeling is in your head, not in the board. A modern single-board computer runs ROS 2 without complaint for ordinary hobby workloads, and when people do notice their robot labouring, the cause is usually something they added on top, such as a camera pipeline, rather than the messaging underneath it.

The weight that is actually crushing you is conceptual: the count of unfamiliar ideas standing between you and a turning wheel. That distinction matters because it changes the fix. If the board were the problem, a more powerful board would help. Since the concepts are the problem, only a smaller first project helps.

There is a later stage where the costs do become physical, and it looks different when it arrives. It looks like a robot that was fine last month and now stutters when the camera process gets busy. That is a real problem with a real cause, and it is worth a longer look at how the two approaches actually differ when you get there.

Will learning ROS 2 be wasted if you start simpler?

Partly, but not the way you think: the commands fade and the concepts are what last. What transfers from any time spent with ROS 2 is the habit of thinking in published streams and subscribers, naming your data, keeping track of which coordinate frame a number belongs to, separating sensing from deciding from acting, and recording runs so that a failure can be examined twice. Those ideas outlive any particular framework.

What does not transfer is the surface: the build tool's flags, the exact shape of a launch file, the workaround for a version that will be gone next year. That is the part people mean when they say a framework was wasted time, and they are right about that part and wrong about the rest.

So starting simple and moving up later is not a detour, it is the normal order. The genuinely wasted path is a different one: installing everything, following a tutorial to the end without connecting any of it to your own hardware, and finishing with a memorised sequence of commands and no model of what happened.

How do you decide what to install this weekend?

Decide by writing one sentence describing what your robot must do by Sunday night, and then installing only what that sentence requires. "The robot drives forward and stops before it hits the table" needs no framework and no middleware, just a loop and a distance sensor. "The robot wanders my flat without getting wedged under the sofa" still needs no framework, just better sensing.

"The robot builds a map of my flat and drives to a spot I click on a screen" needs ROS 2, this weekend.

Then keep one habit: at the end of each session, check whether you can still explain everything running on your robot. The first time the answer is no, you have added machinery you are not using.

One more habit: keep the simple version working while you learn the bigger one. A robot that still moves is a robot you come back to, and the plain script is what you fall back on when the new thing will not build.

Here is the whole decision in six lines.

The HORUS Fit Framework compresses that into five axes you can score any option on: ecosystem size, setup effort, team size fit, deployment target, and licence. For a hobby robot, setup effort is usually the axis that decides, and ecosystem size is the one that overrules it later.

When your robot does grow into a timing problem, you will want the option already on your shelf. Put HORUS on that shelf now: star it so it is in your list when you start building.

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