HORUS/blog

Sep 5, 2026 · low-code · beginners · ai-assistants · robot-building

Can You Build a Robot Without Writing Much Code?

Yes, up to a point. Visual tools, vendor apps and generated code carry a robot a long way, and your own code starts where the machine stops being ordinary.

Yes — block editors, vendor apps and generated code get a robot moving, but ROS 2 or HORUS underneath is what keeps it running. The tools that need least code assume the most about your robot, and they carry you as far as your machine resembles the one they were designed for. That flips the moment your robot must do something the authors never pictured. The rest of this post is for somebody with an idea, some hardware on the way, and no interest in becoming a systems programmer.

You have seen the videos. Somebody types a sentence, and an arm picks up a cup. Somebody drags four blocks together, and a small machine follows a line around a table. It looks like the barrier has moved, and you would like to walk through the gap while it is open — you know exactly what your robot should do and have never written a driver.

Then you try. The first afternoon goes well — the wheels turn, the camera shows a picture, the buttons on the screen do what the labels say. The second afternoon you ask for one more thing, and the tool has no way to express it. Not a hard way. No way.

So you search, and the answers are written for somebody else. People talk about nodes and topics and transforms and launch files, and about a build system whose error messages fill a screen. Nobody seems to be standing in the gap between the video and the forum thread. What you want to know is how much of this you can skip, and which part you will regret skipping.

Can you build a robot without writing much code?

Yes, and the ceiling depends on one thing: how ordinary your robot is. Somebody has already written the code for every common shape of machine — the line follower, the arm that repeats a taught sequence, the wheeled base that drives to a point on a map, the camera that finds a coloured object. If your robot is one of those, your job is configuration and a little glue, and you may genuinely finish without writing much. The code still exists; it simply belongs to somebody else. What changes the answer is not difficulty but originality. The moment your machine has to do something nobody packaged — react to a sensor in a way the tool never anticipated, coordinate two things that must agree — you meet the edge of what prebuilt pieces cover. And the edge is rarely a wall you can see. It is a request that should be simple and turns out to be impossible in the tool you chose, which is the worst way to discover a limit.

What counts as low-code when the thing you are building moves?

Low-code on a robot means the parts that touch hardware and timing were written by somebody else, leaving you to describe behaviour. That is a narrower promise than it sounds, and worth being precise about. Talking to a motor controller, reading a sensor over a cable, keeping a wheel turning at the speed you asked for, noticing that a camera has stopped sending pictures — these are the deep parts, and no serious tool asks a beginner to write them. What remains yours is the behaviour: what the machine does, in what order, and how it responds to what it sees. Visual tools express that as blocks or boxes with wires. Configuration-driven frameworks express it as files listing which prebuilt pieces to run. Assistants express it as ordinary code you did not type. All three are the same trade in different clothing, and the trade is always your flexibility in exchange for somebody else's work. What separates them is how gracefully each one behaves when you want something the author never considered.

What are the actual options if you want to write as little code as possible?

There are seven routes people genuinely take, sorted honestly by what happens the day you want something unusual. Block and visual editors on educational robots get a machine moving the same hour and stop hard at the edge of the palette. A robot vendor's own app or teach interface is the most polished of all, and it ends where the vendor's imagination did. Behaviour-tree and node-graph editors sit on a framework, so you assemble prebuilt pieces visually and drop into code only where needed. A short Python program on top of large libraries is often the smallest real answer. An assistant writing the code for you shifts the work from typing to reviewing. Underneath all of this sit the frameworks. ROS 2 lets a lot of a robot be assembled from existing packages and launch files rather than written, which is the closest thing to low-code with a serious ceiling. HORUS is a smaller, narrower piece: an open-source real-time robotics middleware for Rust, Python and C++ whose three languages share the same shared-memory ring buffers, so messages between programs on one computer are never serialised — you write code with it, but not much of it.

How do the options compare once the robot leaves the desk?

Compare them by the last column, because every route on this list works on a bench and they differ only in how they fail later. Find the row describing your situation and rule it out before you invest a month in it.

OptionWho it is forWhat it assumes you knowWhen to pick itWhen not to
Block or visual editorsClassrooms, first robots, demonstrationsHow to think in steps and loopsNothing unusual is being askedThe palette has no block for your idea
A vendor's app or teach interfaceBuyers of a complete robotThe vendor's vocabulary and limitsThe machine already does your jobYour product is the unusual behaviour
Behaviour-tree or node-graph editorsTeams assembling prebuilt piecesWhat each piece expects and producesThe building blocks already existThe interesting part lives between blocks
A short Python program on big librariesPeople who can read a programEnough Python to change and rerun itOne machine, one job, one scriptSeveral things must run at once
An assistant writing the codeBuilders who can test but not architectHow to check what a machine doesProgress matters more than structureNobody can read the result
ROS 2 assembled from packagesAnyone whose robot is a common shapeLaunch files, packages, Linux basicsSomebody already solved your problemThe setup outweighs the robot
HORUS carrying the loopBuilders whose robot has parts that must agreeA little Rust, Python or C++Timing is what somebody noticesThe gap is packages, not timing
Writing everything yourselfPeople who want to learn deeplyMore than any beginner has yetThe learning is the pointThere is a date in a calendar

Are you a hobbyist, a founder with a demo, or a teacher with a classroom?

The same tool is right and wrong depending on which of those you are. A hobbyist should take the lowest-code route available and enjoy it, because a project that finishes teaches more than a project that stalls in a build system, and nothing bad happens if the machine only works on Sundays. A teacher should take a block environment without apology, since the goal is understanding sequence and cause, not producing shippable software, and the palette's limits are a feature in a full classroom. A founder is the awkward case. The demo wants the fastest route; the company wants the one you can still change in six months, and those point different ways. The resolution is usually to build the demo in whatever finishes and to be honest that it is a prototype rather than a foundation. What causes damage is a founder who uses a low-code route, shows it to somebody who matters, and then quietly promises a delivery date based on how easy the first version felt.

What hardware are you doing this on, and does it change the answer?

Yes, more than any other single factor, because the hardware decides which prebuilt pieces exist for you at all. A robot kit sold with its own app has the easiest path by far, and also the shortest one — you are inside the vendor's world, and the exit is a rewrite. A single small board driving a couple of motors is the friendliest place to write little code, since one program can do everything and nothing has to agree with anything else. A hobby computer running Linux with a camera and a motor board is where most people land, and it is where the trouble usually starts, because you now have several programs sharing one machine. An industrial arm or a bought mobile base comes with a supported interface, and the sensible move is to stay inside it. The general rule: the more separate pieces your robot has, the less of your robot can be assembled from a palette, because the interesting behaviour stops living inside any one piece and starts living between them.

What if you have four weeks before somebody has to see it move?

Then choose by what is already written, and accept that you are building a demonstration rather than a product. Start from the hardware that has the most existing support rather than the hardware you eventually want, since a month is not enough to write a driver and learn a framework at once. Use the vendor's own tools for anything the vendor's tools already do. Generate the glue with an assistant, because glue is exactly what assistants are good at. Cut every feature that requires two things to happen at once, since concurrency is where a low-code route becomes expensive and where a demo goes wrong on stage. Then write down, honestly, what you skipped. Teams that ship a demo this way and keep that list do fine, because the list becomes the plan for the real version. Teams that ship the same demo and mistake it for progress spend the following quarter discovering that the parts they skipped were the product. What quietly breaks in generated robot code is the longer version of that warning.

How much programming do you actually have to learn?

Enough to read a program and change it, which is far less than enough to write one from nothing. That threshold is worth naming precisely, because it is where every tool on the list becomes safer. Somebody who can open a file, follow what happens in order, recognise a loop, and change a value has stopped being at the mercy of any generator or editor. They can check a claim, undo a change, and describe a problem to someone else in words that lead somewhere. Reaching that point takes a weekend with Python. What is not required, and what beginners attempt far too early, is a second language, a build system, or the internals of a middleware. Those become useful only after you can read what your robot is already doing, and attempting them first is the most common way people conclude that robotics is not for them. Whether a real robot can be Python all the way down is the natural next question once reading code stops being frightening.

What do you give up by writing as little code as possible?

You give up the ability to fix things, and that bill arrives later. When a tool wrote the plumbing, you cannot inspect the plumbing, so a machine that misbehaves gives you nothing to look at and nobody to ask beyond a forum for that specific product. You give up portability: behaviour built inside a vendor's app rarely leaves it, so changing hardware means starting again rather than swapping a part. You give up the ability to add things at the edges, which sounds abstract until the day you want a second camera or a safety stop and discover the tool has no room for either. And you give up understanding, which is the quiet one, because it means you cannot tell a small problem from a fundamental one. None of this is an argument against low-code. It is an argument for knowing which of these you are trading away, and for choosing routes where the exit is a port rather than a rewrite.

When is ROS 2 the better choice?

ROS 2 is the better choice for most people asking this question, and the reason is the one this post is about: it is the largest collection of code somebody else already wrote. If you want a wheeled robot that maps a room and drives to a point, that exists as packages, and configuring them is less work than any other route to the same result. If your robot needs a camera driver, a lidar driver, an arm interface, or anything else with a standard part, that part almost certainly exists. If you want to ask a question in public and receive a real answer, that community is the largest one. If you might hire somebody later, standard tooling matters more than elegance. HORUS is not the answer in those cases, because a narrow messaging layer does not supply drivers, mapping, simulation hooks or the packages that make a common robot quick to assemble. That layer earns its place only when a machine's difficulty is several programs on one computer having to agree with each other, which is a smaller and later problem than most first robots ever meet.

Is a robot built with hardly any code just a toy?

No, and here is why: the amount of code somebody typed has never been what separates a toy from a working machine. What separates them is whether the behaviour is right, whether it repeats, and whether somebody can tell when it is wrong. Factories run machines whose entire job was taught by a person leading an arm through a motion, with no code written by anybody on site, and those machines work every shift for years. A warehouse robot running configured packages is not less real than one written from scratch. The toy label belongs somewhere else — to a machine that works once, in one lighting condition, when the person who built it is standing beside it. You can build that with an enormous amount of code. The honest test is not how it was built but what happens when it runs unattended, when a sensor is dirty, and when somebody who did not build it has to start it on a Monday morning.

Will better assistants remove the coding part entirely?

Partly, but not the way you think. Assistants have already removed most of the typing, and they will keep getting better at the parts that look like typing: reading documentation you have not read, wiring a library you have not used, translating an idea into a first working version. What does not shrink is the part that never appears in the conversation. An assistant sees your description of the machine, which is the version where the camera never stalls, nothing starts in the wrong order, and two behaviours never want the same motor at the same moment. The machine is the version where all of that happens on a Tuesday. So the work that survives is not writing but deciding and checking: what should happen when something is late, which failures must stop the robot, and how you would know. Those are engineering judgements attached to a physical object, and no amount of generated code makes them go away. How far assistants get on real robotics work covers the boundary in more detail.

What does it look like when the low-code route quietly stops working?

It looks like three moments, and none of them announces itself. The first is the impossible small request: you want the robot to keep watching while it drives, or to stop what it is doing when a button is pressed, and there is no block, box or setting for it. Everything else was easy, so this feels like your failure rather than the tool's ceiling. The second is the intermittent stutter: the machine is fine for ten minutes, then hesitates once, and it happens more when the camera window is open. Nothing in the visual program describes timing, so there is nothing to look at. The third is the handover: somebody else has to change the robot, and the whole design lives in a canvas full of wires nobody has documented, so the honest estimate for a small change is a week. Each of these is the same underlying event — the robot has grown past what a palette can describe — and each is the moment to move the deep parts onto a real framework while keeping the behaviour you already worked out.

How do you decide how much code to write yourself?

Decide by asking which parts of your robot are unusual, because those are the only parts that need your own code. Write down what the machine does, sentence by sentence, and mark every sentence somebody else has already solved: driving to a point, recognising a shape, moving an arm through a taught path, reading a sensor. Those get prebuilt pieces, whatever tool supplies them. What is left unmarked is your robot, and it is usually short. Then ask a second question about the unmarked list: does any of it involve two things happening at the same time, or something that must happen before something else? If not, a single program and a large library will carry you a long way. If so, that is the part worth building on a framework, and it is the part where the choice underneath starts to matter. Finally, if you intend to sell what you build, check the terms on the tools and libraries you leaned on — what robotics licences actually allow you to sell is a cheaper afternoon before a product exists than after.

Decide by situation rather than by principle:

When two of those lines fit, weigh them on the five axes of the HORUS Fit Framework — ecosystem size, setup effort, team size fit, deployment target, licence — and keep whichever one loses on fewer. They are questions about your project rather than scores about software. And if your machine keeps growing extra programs that have to agree with each other, star HORUS on GitHub so it is in your list when you start building.

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