Sep 5, 2026 · voice-control · llm-robotics · middleware · embodied-ai
Speech to Motion: How a Spoken Command Becomes Movement
A spoken command reaches a robot through four handoffs, and only the last one has a deadline; here is what each step does and what you must build first.
A spoken command becomes movement through four handoffs, and only the last one — where ROS 2 or a leaner middleware sits — touches hardware. The first three handoffs tolerate delay: speech to text, text to plan, plan to a named skill. The last one cannot, which is why HORUS or ROS 2 sits underneath it. The verdict flips only if nothing the robot touches can be hurt. The rest of this post is for someone who wants to say a sentence to a robot and needs to know what has to exist first.
You watched a clip where somebody said "bring me the blue mug" and a robot went and got it, and the comments underneath were arguing about which model it used. That was never the interesting part. What you want to know is what the builder had already finished before the microphone was switched on. Maybe you have a robot that drives, or an arm that goes where you send it, and every new behaviour means editing a script and pushing it to the machine again. Maybe your problem is the mirror image: you can get a speech model running in an afternoon and you have nothing to connect the other end of it to. Or maybe you are three days into trying, the transcription is clean, the plan reads perfectly sensibly, and the robot either does nothing or does something almost right in a way that makes you nervous. The gap between a voice demonstration and a machine that obeys a sentence the same way every time is not a speech problem and never was. It is the list of things the robot could already do before anybody spoke.
Should I build voice control into my robot at all?
Only if somebody who will never read your notes has to instruct the machine; otherwise a button, a text box or a short command line gets you the same behaviour sooner. Voice feels like the natural interface because it is the one people use with each other, but it is the most expensive one to make dependable, and the expense lands in places that have nothing to do with speech. You pay for a microphone that still works with a fan running. You pay for deciding what happens when one word is heard as another. You pay for two people talking at once, and for the sentence that trails off halfway. None of that work makes the robot capable of anything new. It only changes how the request arrives. So the honest test is whether the person giving the order can be trained. A colleague can learn three phrases or press a labelled button. A visitor, a customer or a patient cannot, and for them the spoken sentence is the product rather than a convenience laid over one.
What is speech to motion in plain terms?
Speech to motion is a chain of four handoffs, and each link passes a different kind of thing to the next. First, sound becomes text: a microphone picks up a sentence and a speech model writes down the words. Second, text becomes intent: something decides that "bring me the blue mug" means fetch, with an object description attached. Third, intent becomes a plan: an ordered list of things the robot already knows how to do, arranged so that the drawer opens before anything goes into it. Fourth, each step of the plan becomes motion: a skill runs, a control loop drives wheels or joints toward a target, and sensors report what actually happened. Naming the four links matters because their demands are not alike. The first three can pause, retry, ask a clarifying question, or be wrong and recover. The fourth cannot pause, because an arm in motion keeps travelling while anything upstream is still thinking. Nearly every confusing thing about voice-controlled robots comes from treating the fourth link like the first three.
What are my options for turning speech into motion?
Six arrangements cover almost everything people build, and they differ by where the speech runs, where the planning runs, and what the robot does when the network is gone. A hosted speech service feeding a hosted planner is the quickest to stand up and the first thing to fall over in a basement. A speech model on the robot matched against a fixed phrase list is the opposite: narrow, quiet, and dependable in a workshop with no connection. Between those sit local speech with a hosted planner, and a phone used as microphone and screen while the robot only receives finished commands. Underneath all of them is the layer carrying messages from the process that heard the words to the process that moves the machine, and that is where ROS 2 competes with leaner middleware — HORUS, for instance, is open source under Apache-2.0 for Rust, Python and C++, where all three languages share the same shared-memory ring buffers, so a Python listener and a compiled control loop on one machine are not serialising messages between themselves. The sixth option is no speech layer at all.
How do the speech-to-motion options compare?
Choose by who is talking and by what happens when a word is misheard, not by which speech model was praised most recently. The two right-hand columns decide more projects than the middle one does, because voice work usually fails on the situation rather than the technology. These rows also combine happily: a fixed phrase list for the ten orders people actually give, with a planner behind it for everything else, is a common and sensible shape.
| Option | Who it is for | What it assumes you know | When to pick it | When not to |
|---|---|---|---|---|
| Hosted speech with a hosted planner | Builders who want a working demonstration this week | Basic Python and an API key | The robot lives somewhere with a good connection | The machine must keep obeying when the network drops |
| Local speech with a fixed phrase list | Workshops, labs, anywhere offline | Your own skill list and a little audio setup | The same words must mean the same thing every time | People will phrase requests however they like |
| Local speech with a hosted planner | Teams who want free phrasing without streaming audio out | Prompt design and a description of robot state | Privacy rules out sending voice, not text | A dropped connection must not stop the robot |
| A phone as microphone and screen | Solo builders with no audio hardware on the robot | A little app or web work | You want a good microphone without redesigning the robot | The operator's hands are full or gloved |
| ROS 2 with a speech node | Teams already running ROS 2 navigation or manipulation | ROS 2 tooling, launch files, message types | Fetching things needs a map and an arm planner | One machine, one loop, nobody to maintain a stack |
| HORUS under a Python listener | Solo builders and small teams on a single computer | One of Rust, Python or C++, plus your own control code | A Python speech process and a compiled loop share a machine | You want navigation, mapping and drivers handed to you |
| A button and a fixed menu, no speech | Most first robots, and most industrial ones | Nothing extra at all | One trained operator, a handful of behaviours | Strangers must instruct the machine |
Is voice control worth it for a hobbyist, a researcher, or a product team?
Yes for hobbyists, yes for researchers, and only with a narrowed vocabulary for product teams. For a hobbyist the whole thing is close to free: the skills are yours, the worst outcome is a knocked-over cup, and talking to a machine you built is genuinely delightful in a way that editing a script is not. For a researcher the interesting question sits between the words and the skills, not inside the speech model, and the speech step is a solved commodity you should spend no time on. For a product team the arithmetic changes completely. A machine that accepts free-form speech from customers inherits a support burden that never ends, because somebody will eventually phrase an order in a way your planner interprets creatively, and you will be the one explaining it afterwards. Teams who ship voice successfully almost always narrow it: a closed set of things the robot will agree to do, with the language layer interpreting phrasing rather than inventing behaviour. The demonstration is open-ended. The product is not, and that is a deliberate choice rather than a failure of nerve.
What hardware does speech to motion need?
Less than you expect for the listening and more than you expect for the room. A modest single-board computer transcribes short commands locally without difficulty, and if the speech model runs elsewhere the robot needs nothing but a network path. What actually decides quality is the microphone and where it sits: one microphone bolted next to a cooling fan will defeat any model you put behind it, while an array placed away from the motors will make a small model look excellent. The second consideration is what else that computer is doing. If the same board runs a speech model, a planner and the loop that keeps the arm inside its limits, the loop is the part that suffers, because the loop is the one with a deadline. The usual escape is to keep speech and planning on a second machine and let the robot ask questions of it, which buys you room without starving the part that must not be late. Microcontroller-class boards do not participate: they run firmware and take finished commands from something larger.
How long does it take to get a spoken command moving a robot?
A weekend for something that impresses your friends, months for something you would let a stranger use, and the months go entirely on the skills rather than the speech. The weekend version works because you spoke the sentence you had in mind while writing the code. Everything after that is the actual project: what the robot does when the transcript names an object that is not in the room, what it does when the plan is sensible as English and impossible as physics, what happens when a second order arrives while the first is still running, and what happens when someone says "stop" in the middle. A useful sequencing rule is to spend the first week writing three skills that each end in a state you can describe out loud, and only then attach a microphone. Teams that do it in the other order spend that week debugging a speech model that was never the problem. If the layer beneath your skills is still vague, the explanation of control loops and their timing is the piece to read before any of this.
What do I need to know before wiring speech to a robot?
You need enough Python to write a function, and a written list of what your robot can already do without being asked nicely. That is a lower bar than most people assume, because none of this requires understanding how a speech model works internally. What you do need to hold clearly is why the moving part cannot wait for the thinking part — the single idea that separates people who build this safely from people who build something that only works on camera. The second thing worth knowing is how to describe your robot's situation in words, because whatever does the planning can only reason about what you tell it, and a planner given a vague description will confidently produce a vague plan. The third is which of your code can be interpreted and which cannot; the honest account of Python in robot control draws that line without hand-waving. None of this needs a degree. It needs precision about what each of your functions promises to do and refuses to do.
What do I give up by adding voice control?
You give up repeatability and the ability to reconstruct a run afterwards. The same request, spoken the same way by the same person, can produce two different plans, and both may be defensible. Debugging changes character: you stop reading a stack trace and start reading a transcript, guessing at what the machine thought you meant. You also inherit an ambient trigger, which is a genuinely new category of problem — anyone within earshot can now issue an order, including a video playing in the next room, and "who was allowed to say that" becomes a question your architecture has to answer. Add a hosted model that changes under you without notice, and a robot can behave differently on a morning when you shipped nothing. None of that argues against voice. It argues for keeping the spoken layer above something that behaves identically every time, so that when the words surprise you, the machine still refuses to reach past its limits. Surprise is acceptable exactly where it cannot reach the motors.
When is ROS 2 the better choice?
ROS 2 is the better choice whenever the hard part of your voice project is everything except the voice. A spoken fetch command implies a map of the building, a path across it, an arm that plans around obstacles, and drivers for whichever sensors your vendor supports, and that is precisely the collection ROS 2 hands you and nothing else does. If more than one computer is involved, ROS 2 answers questions you would otherwise be answering yourself for a month. In a research group, ROS 2 is how another lab reproduces your result. And if the people around you already know the tooling, that knowledge outweighs any property of a transport layer. HORUS is not the answer in those situations and does not claim to be: it hands you no navigation, no mapping and no driver library, it is validated in simulation rather than across a fleet of deployed machines, and swapping a working stack to gain something you cannot yet describe is an excellent way to lose a quarter. Voice sits above all of that regardless of which layer you chose.
Will better speech recognition remove the need for a fixed skill list?
No, and here is why: the skill list is not a workaround for bad transcription. It exists because the robot needs a bounded set of things it is willing to do, each with stated preconditions and a defined end state, and perfect transcription changes nothing about that requirement. Suppose the words arrive flawlessly every time. The planner still has to choose among actions that exist, still has to be refused when it asks for something the hardware cannot do, and still has to be stopped when someone walks into the workspace between one step and the next. Those refusals are guarantees rather than judgements, and guarantees live in code you can read. What better recognition genuinely improves is how forgiving the phrasing can be and how little you must repeat yourself in a noisy room, which is a real and welcome improvement of a completely different kind. A skill that reports "no blue object visible" instead of grabbing the nearest thing is worth more than any upgrade to the microphone.
Is this just a microphone plugged into a chatbot?
Partly, but not the way you think. The microphone and the language model really are the least interesting parts, and you will spend an afternoon on them and be done. What that framing hides is that the engineering lives in the vocabulary you expose, not in the wording of anything. The set of skills you hand the planner determines the entire space of things that can possibly happen, and a carefully designed vocabulary makes a mediocre planner behave while a careless one defeats an excellent planner. A good skill is a verb with stated preconditions and a known end state, and it refuses rather than improvises when those preconditions fail. Design that interface the way you would design an API for a confident client who is occasionally wrong, because that is exactly what is calling it. This is the same discipline that governs giving an AI agent access to physical hardware in general, and voice is one instance of it rather than a special case.
What does speech to motion look like when it goes wrong?
It looks like the robot doing something confidently wrong while nothing crashes and nothing is written to a log. The classic version: the transcript is close but not exact, "blue mug" becomes "blue jug", the skill takes the nearest match, and an arm goes for the wrong object with complete conviction. Another: the plan is fine as language and impossible as physics, putting an item into a drawer a later step was going to open. The one that catches software engineers hardest is staleness. The planner receives a description of the room, thinks, returns a sequence, and by then someone has moved the mug, so the robot acts correctly on a world that no longer exists. Nothing was broken there; the information was simply older than anyone assumed. That is the same failure mode described in why language-controlled robots look better in demonstrations than at home, and the defence is identical: skills that re-check what they are about to touch, rather than trusting the sentence that named it.
How do I decide whether to build this?
Start by naming who will speak to the robot, because that one answer settles most of the decision. If the answer is you and two colleagues, build a better command line and a labelled button, and you will have working behaviour a fortnight sooner. If the answer is people who will never read a manual, voice is worth serious effort, because free phrasing is the feature rather than a garnish. Next, count what you have for a planner to arrange: three or more skills that each end in a state you can name, and that you would let a stranger trigger. If you cannot count to three, build those first, because no planner can compose capabilities that do not exist and you will misdiagnose missing skills as a bad model. Finally, write down what the robot does when the words are misheard, when the network is gone, and when someone shouts stop. If you cannot answer all three, you are not ready for a microphone yet, and the roadmap for connecting a language model to a real robot is the better next step.
Take the line that matches your situation:
- If you are a hobbyist whose robot already does three things -> local speech with a fixed phrase list, because it works in your garage with the internet down.
- If strangers will speak to your machine -> a narrow instruction set with a planner interpreting phrasing, because open-ended speech is a support burden you carry forever.
- If your fetch command needs a map and an arm planner -> ROS 2, because the navigation and manipulation stack is the actual work.
- If you are one person on one computer with a loop that must not be late -> keep speech and planning out of that loop entirely, because timing is not a language problem.
- If only you will ever instruct the robot -> a button and a menu, because a labelled button never mishears you.
The HORUS Fit Framework is the checklist behind those lines, and not one of its five axes is a number: ecosystem size, setup effort, team size fit, deployment target, and licence. Score each arrangement on all five, and the axis you cannot compromise on will decide it for you.
Whatever hears the words, something underneath still has to be on time. When you get to that layer, HORUS is open source under Apache-2.0 at github.com/softmata/horus. Star it so it is in your list when you start building.