HORUS/blog

Sep 5, 2026 · ros-2 · beginners · learning-robotics · getting-started

Why Do So Many People Quit ROS 2 in the First Week?

People quit ROS 2 in week one because setup and build errors arrive before anything moves. Push through only if you came for the packages ROS 2 ships.

Most people quit ROS 2 in week one because installation and build errors arrive before the robot moves, while a plain Python script moves something immediately. The first week is spent on packaging rather than robots, so quitting is a fair verdict on bad ordering, not on robotics. The verdict flips once you need the mapping, navigation and driver code ROS 2 ships and lighter tools like HORUS do not. The rest of this post is for beginners deciding whether to push through a second week, start smaller, or walk away entirely.

You set aside a weekend for this. The plan was simple: install the thing everyone recommends, run the demo where the little robot drives in a circle, and then start building your own. That was Friday.

It is now Sunday evening. You have installed an operating system you did not previously use. You have typed a command that failed, searched the error, found an answer written for a version that no longer exists, tried it anyway, and broken something else. You have learned that there is a build step, that the build step succeeded, and that the thing you built cannot be found by the program that needs it. You have read the word workspace forty times without anyone defining it.

At some point you wrote two small programs that were supposed to talk to each other. They run. Neither errors. Nothing arrives. There is no message telling you why, because as far as the framework is concerned, nothing has gone wrong.

You are not asking whether robotics is hard. You are asking whether this part is supposed to be this bad, or whether you picked the wrong thing to start with.

Should you push through the second week or stop?

Push through if you came for the code other people have already written, and stop if you came to make one specific machine move this month. That is the entire decision and it has nothing to do with grit. ROS 2 is the front door to an enormous amount of finished work: mapping a room while driving through it, planning a path around a table leg, moving an arm without hitting itself, and talking to hundreds of specific sensors. The first week is the toll on that door. It is a badly ordered toll, charged before you see anything of value, but it is paid once. If those packages are what you came for, the week you hated pays for itself. Plenty of people arrive with a different goal, though. You want a camera watching a bird feeder and a servo turning a lens. You want a small rover to reach the end of a corridor. For that, the toll buys nothing, and every hour spent on packaging is an hour not spent on the thing you wanted. Leaving a tool that solves a problem you do not have is not leaving robotics.

What is robotics middleware, and why does ROS 2 feel like an operating system?

Middleware is the postal service between the separate programs inside a robot, and ROS 2 feels larger than that because it ships the post office, the building, the staff handbook and the town around it. The messaging idea is small enough to explain in a sentence: one program announces readings under a name, another asks for anything published under that name, and neither needs to know where the other is running. A camera program publishes frames. A detector subscribes to frames and publishes what it saw. A controller subscribes to that and publishes wheel commands. That is the whole concept, and it takes about ten minutes to understand. What surrounds it is the part that eats a weekend: a build system with its own vocabulary, a way of describing which programs start together, conventions for how coordinate frames relate to one another, a package archive, and a discovery layer that decides which programs can see each other. Every one of those exists for a real reason, and every one of them arrives before the ten-minute idea does. That inversion, not the concept, is what people quit.

What are your actual options after a bad first week?

You have about seven, and they differ mostly in how much of the setup somebody else has already done for you. A prepared container is the most direct fix, because the failures that ended your weekend were environment failures and a container is someone else's environment. A browser-based course goes further and hands you a whole machine. Installing natively on the Linux release the documentation assumes is more work upfront and fewer surprises afterwards, which is why people who intend to work in the field do it eventually. If your goal is one small device rather than the field, plain Python talking to hardware directly skips the question entirely. HORUS is a different shape of answer: 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 are not serialised between processes on one machine, and it is Apache-2.0 in the same way ROS 2 is, but it does not carry the mapping and navigation packages that make ROS 2 worth its setup. A microcontroller and a motor is the honest answer when what is failing is your motivation rather than your understanding.

OptionWho it is forWhat it assumes you knowWhen to pick itWhen not to
ROS 2 in a prepared containerBeginners who lost week one to installationHow to run one command somebody else wroteYou want the tutorials to work tonightYou need a graphics-heavy simulator on a thin laptop
ROS 2 installed natively on LinuxPeople who intend to work in roboticsTerminals, filesystems, patience with buildsYou are learning the setup that jobs assumeYour only machine runs Windows or macOS and cannot dual boot
A browser-based ROS 2 courseAnyone who never reached a running demoNothing beyond a browserYou want the lesson to be robots, not packagingYou need the environment to survive after the course
Plain Python and one deviceHobby builders with one clear goalBasic Python and how to read a datasheetThe robot is small and lives on one computerYou want mapping, navigation or arm planning
HORUSBuilders splitting work across languages on one machineWhich loop must never wait and what your messages containA model and a controller share one on-board computerYou are learning in order to read other people's ROS 2 code
A microcontroller and a motorPeople who need something to move tonightWiring basics and a little embedded workMotivation is the thing that is failingThe project is really about perception or planning
Recorded robot data and a notebookLearners drawn to the perception sideHow to plot what is inside a messageYou want real sensor streams without a build systemYou want to close a loop and watch something move

Does your background make ROS 2 easier or harder?

Your background decides which week is hard, not whether a hard week happens. If you come from web or application development, the concepts land quickly and the environment fights you, because you are used to a package manager that resolves things and a run command that simply runs. Here you install system packages, source a file into your shell before anything is visible, and rebuild after changes you did not think of as code. If you come from embedded work, the opposite happens: the tooling feels normal and the architecture feels wasteful, because you are used to one program owning the whole machine and now there are nine of them, chatting. Students who have written mostly single scripts meet a genuinely new idea, which is that a program is now several programs running at once with none of them in charge. Nobody is spared, but knowing which half is your weak half changes what you do next. Environment problems are solved by taking somebody else's environment. Concept problems are solved by drawing the boxes and the arrows on paper before writing anything at all.

What computer should you be running this on?

Run it on a machine with the Linux release the documentation names, and treat anything else as a decision you will pay for later. That is not snobbery about operating systems; it is that every unusual setup adds a category of failure with no community answer behind it. A virtual machine is fine for messaging and stalls the moment a graphical simulator wants a real graphics card. Windows Subsystem for Linux works until the networking between programs behaves in a way nothing online describes. A Mac pushes you towards containers, which is a reasonable route but means your first week is also a container week. A Raspberry Pi runs the messaging happily and is a poor place to open a simulator. The specific trap is running an unusual setup while also being new, because then every failure has two possible causes and you cannot tell them apart. If your only machine has another operating system on it, take the container or the browser-based course rather than the heroic path. Your options on Windows and macOS are narrower than they first appear.

How long does the painful part last?

Setup pain lasts days, vocabulary lasts weeks, and design instinct takes months, so the part that made you want to quit is also the shortest part. That ordering is worth internalising, because a first week gives a wildly misleading impression of what the rest is like. Installation, sourcing, building and a first launch file are a one-off cost you never pay again on that machine. After that comes the middle phase, where things run but everything takes three attempts, and where most of the difficulty is not knowing what the framework already offers, so you write something that already exists. That phase lasts a few weeks and it feels like progress because things move. The long part is judgement: how to divide a robot into programs, which failures deserve a supervisor watching for them, where to put the loop that must never be late. That takes months and never entirely finishes. Almost nobody quits during the long part, because by then the work pays you back. How long learning ROS 2 really takes breaks the phases down further.

What do you need to know before you start, and what can wait?

You need a terminal, basic Python, and a willingness to read an error rather than paste it straight into a search box. Everything else can wait, including most of what beginners believe are prerequisites. You do not need C++ to start, you do not need control theory, you do not need to understand the discovery layer, and you certainly do not need to know what a quaternion is. What actually blocks people is smaller and duller: not knowing that a shell session carries state, not knowing what a path is, not knowing that a build produced files somewhere and that something has to be told where they are. If those sentences felt unclear, that gap is your real first task, and it is a two-evening task rather than a semester. Learn to move around a filesystem, read a command's output, and notice when an instruction assumes you are standing in a particular directory. Learners who do that first stop having mysterious weeks. The six things that trip newcomers up are mostly of this kind rather than the kind you were dreading.

What does a failed first week actually look like?

It looks like an evening in which every error is about the environment and none is about robots. You install, and a key or a repository has changed since the guide was written. You run the demo, and the terminal says the package does not exist, because a fresh shell knows nothing about the thing you just built. You fix that, and the demo opens a window that is empty grey. You search, and the top answer is for the previous generation of the framework and looks close enough to be worth trying. Later that evening you write two tiny programs, and the characteristic failure of this field arrives all at once: both run, neither complains, and no message ever appears. Nothing tells you that one file spelled a topic name in the singular and the other in the plural, or that one program wanted every message delivered while the other was content to lose some. Silence is the default response to a mistake, which is why week one feels less like difficulty and more like being ignored.

What do beginners try first, and why does it stop working?

Beginners try to follow one tutorial exactly, and that stops working the moment their machine differs from the author's in any way. The tutorial was written on a particular version, on a particular Linux release, by somebody who already had a working setup, and it silently assumes all three. When step four fails there is no way to tell whether you made a mistake or the instructions simply aged. So a second strategy appears: collect fixes from search results and apply them in sequence. This works briefly and then poisons the machine, because half those fixes were written for a different version and you now have two installations arguing with each other. The third strategy is the one that works, and hardly anybody starts there. Take an environment somebody else has already made correct, run the demo inside it without changing anything, and only then start editing. It feels like cheating and it is the opposite: it removes the one variable a beginner cannot debug. Once the untouched demo runs, every later failure is yours, which means it is understandable and fixable.

What do you give up if you leave ROS 2 behind?

You give up other people's finished work, and that is a larger loss than it feels like on the day you leave. Mapping and localisation, path planning that avoids obstacles, arm motion that does not hit the arm, sensor drivers written by the people who built the sensor, a visualiser showing what the robot currently believes, tools for recording a run and replaying it later: all of it exists and all of it already speaks the same message system. Rebuilding any one of those alone is a serious project. You also give up the answers, and when something breaks at midnight the difference between a framework thousands of people use and one used by a few hundred is whether your exact error is already written down somewhere. And you give up the vocabulary, which matters if you want to be hired, because interviews are conducted in it and most open robot code you would learn from is written against it. None of that is an argument for enduring a bad first week for its own sake. It is an argument for knowing the price of the exit before taking it.

When is ROS 2 the better choice?

ROS 2 is the better choice for almost everyone who quit in week one, and saying otherwise would flatter the wrong instinct. If you want a job in robotics, ROS 2 is the shared language of the field and the thing job adverts name. If you want a robot that maps a building, plans around furniture and returns to a charger, that behaviour exists today in packages you can install, and no amount of clever coding will match it in a month. If you want to learn from other people's robots, the open code is written against ROS 2. If your project will have more than two people on it, the conventions are worth more than any technical difference, because conventions are why a new person can read your code at all. HORUS is not the answer for a beginner stuck on installation, and it will not make a first week gentler, because a smaller ecosystem means fewer written answers on the night you are the one stuck. The narrow case for a shared-memory middleware arrives much later, when several programs on one computer must read the same camera frames without copies passing between them.

Is quitting in the first week a sign you are not cut out for robotics?

No, and here is why: the first week tests packaging rather than robotics, and tolerating one has almost nothing to do with being good at the other. The people who wrote the software you are fighting to install had working environments handed to them by colleagues, or built them over years, one problem at a time. Nobody's first day involved reading forty lines of build output alone at midnight. The skills the field rewards are different in kind: deciding what a machine should do when one sensor disagrees with another, noticing that a behaviour works only because the room happens to be tidy, refusing to trust a demo that succeeded once. None of those were measured this weekend. What week one does measure is real but narrow, which is your tolerance for problems with no conceptual content in them. That tolerance can be bought rather than developed, by taking an environment somebody else has already fixed. Buy it, and get to the part of the field that has something to do with robots.

Would a different framework have saved your weekend?

Partly, but not the way you think. A smaller framework genuinely would have given you a running program sooner, because there is far less machinery between you and a first message. What it would not have done is hand you a second week that is better than your second week here. The problems that come next are not framework problems at all. Your programs will still need to agree about names and message shapes. Data will still arrive late, out of order, or not at all. Your robot will still behave differently on carpet than on a hard floor, and your controller will still be tuned for whichever one you happened to test on. Those are the actual subject, and every tool has them. The other half of the answer is that saving the weekend costs you the library, and for most beginners the library is the whole reason to be here. If your goal is one small device on one computer, that trade is clearly worth making. If your goal is the field, you would have paid the same toll a month later with less patience left.

How do you decide whether to continue, restart smaller, or switch?

Decide by naming what you wanted before the install failed, because the install failure has nothing to say about it. Write down the thing you imagined the robot doing, in one sentence. If that sentence contains mapping, navigation, an arm, or a sensor somebody else has already written a driver for, continue, and continue inside a container so the environment stops being the lesson. If it contains one device, one computer, and a behaviour you could describe to a child, restart smaller with plain Python and come back when the project outgrows it. If it contains several programs on one on-board computer sharing heavy data such as camera frames, that is a different question with a different answer and worth reading about before you commit. If you cannot write the sentence at all, that is the real finding, and no framework repairs it. Build anything that moves for two weeks and ask again. An assistant can shorten the reading around all of this, though what it gets right and wrong is worth knowing before you lean on one.

The decision reads more clearly as situations than as opinions:

When two routes stay close, weigh them on the five axes of the HORUS Fit Framework: ecosystem size, setup effort, team size fit, deployment target, and licence. They are five plain questions about your situation rather than about the software, with no scores attached to them. And if your eventual robot puts a model and a controller on the same on-board computer, star HORUS on GitHub so it is in your list when you start building.

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