HORUS/blog

Sep 5, 2026 · beginners · first-robot · learning-robotics · project-planning

Why Most Beginner Robotics Projects Stall, and How to Finish One

Beginner robot projects stall on scope, not talent. Pick one visible behaviour, build it with the parts you already have, and finish before you change stacks.

Most beginner projects stall on scope, not skill; finish one by picking a single visible behaviour before choosing between a kit's library and ROS 2. Projects die because a new part gets added before the last one worked, so nothing runs end to end and the enthusiasm drains away. That changes when two parts of the robot fight over one computer, which is when HORUS or ROS 2 matters. This post is for someone with a half-built robot on a desk who wants to know how to get it finished.

There is a box. In the box are a small computer, a camera you bought because a video said to, two motors, a driver board, and a bag of jumper wires that were never going to be enough. Some of it has been assembled. Some of it was assembled and then taken apart when a tutorial suggested a different arrangement. The robot has driven forward exactly once, on a table, on a Saturday, and you have not managed to make it happen again in quite the same way.

You have three tutorials open. One is for a different board. One assumes you already have a working setup and starts at step four. The third worked right up to the part where nothing appeared on the screen and the comments underneath say the same thing happened to everyone in a different year. Between attempts you have started reading about frameworks, because the suspicion has crept in that real robots are built some other way and you are doing the amateur version.

The parts still work. The interest is still there on a good evening. What is missing is any sense of what would count as done.

Why do beginner robotics projects stall before they finish?

Beginner projects stall because the goal grows faster than the robot works, and the growth feels like progress right up to the moment everything is half-built. It starts reasonably. The robot drives, so a camera goes on, because a robot that sees is obviously better. The camera needs the wheels to slow down, so a new control scheme appears. Then a sensor is added to fix the thing the camera cannot do, and the wiring changes, and now the drive code that used to work is untested against the new wiring. At no point did anything break loudly. What happened is that the number of unfinished things crossed the number a beginner can hold in their head at once, and after that every session begins with twenty minutes of remembering where you were. The stall is not a skills problem and it is rarely a hardware problem. It is a scope problem with a motivation problem growing on top of it, and both are cured by the same thing: a finish line small enough that you can cross it this month.

What is actually inside a beginner robotics project?

A robot project is five separate jobs that beginners meet as one confusing lump, and naming them separately is most of the cure. There is the hardware: motors, wheels, wiring, power, and the connector that comes loose. There is the driver layer, the code that speaks to that specific hardware, usually supplied by whoever sold it to you. There is sensing, which turns a camera or a distance sensor into something you can reason about. There is deciding, the part everyone imagines when they imagine robotics, which is often ten lines long. And there is the glue: starting things in the right order, keeping them running, and knowing what happened when they stop. Beginners assume the deciding is the project, so they are shocked to find most of the difficulty living in the hardware and the glue. Once you can say which of the five your current problem belongs to, you stop treating a loose wire and a logic error as the same kind of mystery, and the project starts moving again.

What are your options for how to build a first robot?

There are about seven honest paths to a first working robot, and the differences matter less than picking one and staying on it. You can follow a kit's own examples, which is the shortest route to something moving. You can write a single Python program on a small computer, which is where most self-taught builders live. You can use a microcontroller alone, with no operating system underneath, which suits a robot that is motors and sensors. You can build in simulation while you wait for parts. You can start with ROS 2 and get drivers, mapping, navigation and a real toolset in exchange for learning a large system before your robot moves. You can use HORUS, an open-source real-time robotics middleware for Rust, Python and C++ under Apache-2.0, where the three languages share the same shared-memory ring buffers so messages are not serialised between processes on one machine, which matters once a Python program and a compiled loop share your board. Or you can follow a course or an existing open project and change one thing at a time.

OptionWho it is forWhat it assumes you knowWhen to pick itWhen not to
A kit and its own examplesAnyone whose first robot is still theoreticalThe one language the kit documentsYou want something moving this weekYour parts came from several places
One Python program on a small computerSelf-taught builders with a camera and wheelsPython, and how to install a libraryNothing on the robot needs a strict rhythmTwo jobs on the board keep interrupting each other
A microcontroller and nothing elseBuilders whose robot is motors, sensors and a batteryWiring, one language, reading a datasheetTiming near the motors has to be predictableA camera or a model is part of the plan
Simulation while you wait for partsLearners with a laptop and no hardware yetA simulator's setup and a scripting languageHardware is missing, broken or unaffordableThe lesson you need is about wires and friction
ROS 2 from the startLearners aiming at a robotics job or a labLinux, workspaces, launch files, package layoutBorrowed packages are most of your robotYou have never finished a software project before
HORUSBuilders running Python and a compiled loop on one boardYour message shapes and how your loops are scheduledCamera frames cross between languages on one machineYour robot still only drives forward
A course or an existing open projectPeople who stall when given a blank pageEnough of a language to read someone else's codeYou need structure more than freedomYou already know what you want to build

Which path fits someone learning alone at home?

Take a kit and its own examples, because a solo beginner cannot afford ambiguity about where a fault lives. The single most exhausting experience in early robotics is not knowing whether the robot is misbehaving because of your code, your wiring, your power supply or your setup, and a kit collapses four suspects into one. With matched parts and working examples, a failure means your change broke something, which is a fact you can act on tonight. Alone, you also have no one to tell you when a problem is unusual, so anything that shortens the loop between a change and a visible result is worth more than elegance. Resist the pull towards sourcing your own parts for now, however much cheaper it looks, and resist rewriting the kit's examples into a nicer structure before they have taught you anything. Whether to start with a kit or build from scratch covers that trade properly, and the answer for a first project is not close.

What if you have a laptop and no robot yet?

Build in simulation and choose a project whose lesson survives the move to hardware, because a simulator teaches the software half honestly and the physical half not at all. In simulation you can learn how a control loop is structured, how a robot decides what to do next, how a camera image becomes a decision, and how to organise code that runs continuously rather than once. Those transfer completely. What does not transfer is everything that stalls real projects: connectors that work loose, batteries that sag under load, a wheel that slips on one surface and grips on another, a sensor that reads differently after an hour. So pick a simulated project that exercises the transferable half and expect the first hardware day to be humbling rather than confirming. The other advantage is emotional and worth naming: simulation removes the excuse of waiting for a delivery, and waiting is where a surprising number of first projects quietly die. Projects for beginners that teach the software side is a good source of candidates.

What if you only have a few evenings a week?

Shrink the project until a single evening can produce a visible change, because a session that ends with nothing to show is how a hobby project dies. Long-gap work has a specific failure mode: the reload cost. Come back after a week and the first half hour goes on remembering what half-worked, which wire you moved, and why there are two versions of the same file. If that reload cost is bigger than the work you can do in one sitting, the project can never move forward again, no matter how motivated you are. Two habits fix it cheaply. Keep a plain text file at the top of the project that says what works today and what the very next step is, written for the version of you who has forgotten everything. And end every session with the robot in a state that runs, even if the new feature is switched off, so you always start from something that moves rather than from a broken machine you have to fix before you can begin.

What if you have never written code outside a tutorial?

Learn one language properly on your laptop before you try to learn it on a machine that moves, because debugging a robot means debugging two unknowns at once. A tutorial gives you code that works, which is not the same as knowing how to find out why code does not. The specific skills that decide whether a first robot gets finished are unglamorous: reading an error message to the end, printing a value to check an assumption, knowing what a loop does, and being able to tell the difference between code that never ran and code that ran and did nothing useful. None of that requires robotics. All of it is brutal to learn for the first time while a motor is spinning and a battery is running down. Python is the pragmatic choice because most beginner robot hardware documents it. Spend a short stretch on plain programming, then come back. Beginners who skip this step do not fail at robotics, they fail at debugging and conclude it was robotics.

What does a stalled project look like from the inside?

A stalled project looks like activity without motion, and it is unusually hard to spot from inside because every session feels busy. The signs are consistent. You are researching rather than building, comparing frameworks for a robot that does not yet drive. You have several directories with similar names and no confidence about which one runs. You changed something on Tuesday and cannot remember what. The robot worked last week and does not now, and the difference is untracked. You have begun describing the project to people in the future tense, as the thing you are going to build, rather than showing them what happens when you switch it on. The tell that outranks all the others is a rewrite you are looking forward to, because the clean version is always easier than the messy version in front of you, and starting it converts real progress into imagined progress. Recognising this pattern early is worth more than any tool, because the fix is free and takes one evening: shrink the goal and finish something.

What do beginners usually try first?

Most beginners try to build the robot they imagined, and it stops working because the imagined robot has six features and no working first one. The pattern repeats almost word for word. The plan is a robot that drives around, avoids obstacles, recognises objects and maybe responds when spoken to. Work starts on all four at once because they seem related, and each one gets to the halfway point where it does something in good conditions. Then the four halves have to run at the same time, and they interrupt each other, and the robot behaves differently on every run. The second common move is to reach for a large framework at this point, on the theory that professionals do not have this problem. They do, and the framework is not what saves them. What saves them is finishing one behaviour before starting the next, so that when the robot misbehaves there is exactly one recent change to blame. Adopting a framework now adds installation, vocabulary and a build system to a project that is already stuck.

What do you give up by keeping the first project small?

You give up the impressive demo, the architecture you have been reading about, and the sense that you are doing real robotics, and all three are worth giving up exactly once. A small first project will not look like the videos. It will drive a fixed pattern, or follow a line, or stop before it hits the table, and nobody will be amazed. You also genuinely defer skills: the tooling, the message design, the multi-machine setups, the recorded runs you can replay at your desk. Those matter later and are easier to learn against a robot that already works. The real thing you give up is the fantasy that the first project would be the good one, and letting that go is what makes the second project possible. Beginners who insist on building the impressive version first almost never get a second project, because the first one is still open. One boring finished robot teaches more than three ambitious ones left open, and it teaches the specific lesson that everything after it depends on: how it feels when something repeats.

When is ROS 2 the better choice?

ROS 2 is the better choice when the goal is a career rather than a robot, or when the robot needs software you cannot write. If you are learning robotics to get hired, ROS 2 is what job adverts mean by robotics experience, and the sooner you are fluent in nodes, topics, launch files and the standard tools, the better placed you are. If your robot must build a map of a room and drive to a point on that map, use ROS 2, because mapping and navigation represent years of work you are not going to reproduce. If your sensor ships one driver and it is a ROS 2 package, the choice is already made. And if you are in a class, a lab or a club where everyone else uses ROS 2, take the help, because a person who can look at your screen beats any framework comparison. HORUS is not the answer in those cases. Its narrow case is one machine where a Python program and a compiled loop pass camera data between them constantly, which is not a first project. Whether ROS 2 is overkill for a hobby robot walks through the middle ground.

Is stalling just a motivation problem?

No, and here is why: motivation is the symptom, and the cause is almost always an invisible feedback loop that has gone quiet. People stay motivated when their effort produces visible change, and beginner robotics is unusually good at breaking that connection. You write code and nothing moves, and you cannot tell whether the fault is in the code, the wiring, the power or the setup, so the effort produces no information at all. Do that on four consecutive evenings and anyone stops, regardless of discipline. This matters because the fix is mechanical rather than emotional. Reduce the number of things that could be wrong, by using matched hardware and changing one thing at a time. Shorten the loop between a change and a result, so you find out tonight rather than next week. Make the robot show you what it thinks, with a light, a printed line, anything, so a failure tells you which of the five layers is at fault. Do that and motivation tends to arrive on its own, because the project starts answering back.

Would a better framework at the start have prevented this?

Partly, but not the way you think. A framework does solve real problems: it gives you a standard way to split a robot into parts, drivers you did not write, tools that show what the robot believes, and a recording of a bad run you can replay at your desk. Any beginner who reaches the stage of several programs running at once will feel the benefit. What a framework does not do is make a half-finished robot finish, and adopting one mid-stall usually makes things worse, because it adds installation, an unfamiliar build system and a new vocabulary to a project whose real problem is that you have not defined done. The pattern to watch for is a framework decision being made while the robot is on the bench, unmoving, and the decision feeling like relief. That relief is procrastination with good branding. Finish something first, then let the specific difficulty you hit choose the tool. Why projects stall after the prototype is the same story one stage later.

How do you decide what to finish first?

Pick the smallest behaviour someone else could watch, and define finished as doing it three times without you touching the keyboard between attempts. That definition does the work, because repetition is where the genuine problems live: the wheel that slips, the sensor that drifts, the code path that only ran because the room was bright. A demo you can perform on demand has taught you something a demo you performed once has not. Write the finish line down before you start, in one sentence, and treat every other idea as a note in a file rather than a change to the robot. Then defend it, because the pull to add one more thing is strongest right when you are close. If you cannot name a behaviour small enough to fit that rule, your project is still too vague to work on, and the next hour is better spent shrinking it than programming. Beginners who do this once rarely go back, because finishing turns out to be a skill rather than an outcome.

Decide by situation rather than by ambition:

When the choice does get serious, weigh it on the five axes of the HORUS Fit Framework: ecosystem size, setup effort, team size fit, deployment target and licence. No scores, just the option that loses on the fewest axes for the robot in front of you. And when your robot finally does have a Python program and a compiled loop arguing over one small board, star HORUS on GitHub so it is in your list when you start building.

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