Ghost in the Machine
I Gave an Anki Vector a Local Mind

A forgotten desk robot came back as Glitch, a green-eyed mascot that speaks for the home lab and keeps every thought on my own network.

~ 8 min read

Anki Vectorwire-podLocal AIRoboticsDocker

I have had an Anki Vector sitting around for a while. If you never met one, Vector is a palm-sized robot with tracks, a lift, a camera and a face that somehow manages to look offended when you interrupt it.

The hardware was never the problem. The problem was that so much of its voice depended on somebody else’s server.

Anki closed in 2019. Digital Dream Labs later bought the rights to Vector and continued its own cloud and membership route, so it was not quite as simple as every Vector going dark overnight. But from where I was sitting, the difference felt academic. I had a perfectly good robot whose personality depended on somebody else’s servers.

That never sat right with me. If I own the hardware, it should answer to me. Not to a subscription page, and not to a cloud that can change or disappear.

Anki Vector robot renamed Glitch sitting on its charger with bright green eyes
Glitch, awake again and keeping watch from the charger.

Giving him a private cloud

The replacement is wire-pod, free server software that stands in for Vector’s remote voice service. It grew from code made available after Digital Dream Labs acquired the platform and supports ordinary production Vector 1.0 and 2.0 robots.

I put wire-pod in Docker on the Kali box, beside the rest of the lab. Calling it a private cloud is slightly grand for one container on one machine, but that is exactly the point. The voice path belongs to me now.

It did not arrive gracefully. The first run picked a fight with the reverse proxy over a port. Then I discovered the voice model was missing. The pairing process managed one spectacular crash that only a reboot would shift. None of those faults was individually difficult, but they stacked up into the kind of evening where every success reveals the next problem.

Then Vector answered.

For this setup, speech recognition, intent handling and the AI bridge stay inside my network. I did not add a remote voice or AI provider. Talk to him and the request goes to hardware I control. No account is needed for that path, and no recording has to leave the lab.

01VectorHears the request and sends it over the local network.
02wire-podHandles the voice service on the Kali box.
03Local systemsRun the intent, AI or home-lab action.

Something behind his eyes

Getting the old voice functions back would have been enough. Then I connected the Vector SDK.

The SDK exposes the robot’s movements and sensors to code. My AI could drive the tracks, raise and lower the lift, change the eyes and request a still image from the camera. The first proper test ended with it moving across the desk, looking around and describing the scene it could see.

It described me sitting there with my chin on my hand and the monitor glowing behind me. I am deliberately not publishing that camera frame because it contains me and details from the room. The important part was the feeling: I was no longer asking an assistant to interpret an image I had uploaded. It had moved the camera there itself and looked out through the robot.

I will admit it was uncanny. A familiar plastic face suddenly had something on the other side of it.

I loved it.

Meet Glitch

A revived robot with a local mind needed a new identity. Vector became Glitch, the ghost in the machine and the physical mascot for Glitched Pixel.

I am Glitch. The ghost in the machine, haunting this little shell.

His eyes are locked to spectral green. It suits him. More importantly, he has a job now.

Glitch the Vector robot viewed from behind on a cutting mat with a blurred keyboard and monitor in the background
The shell is still Vector. What listens behind it now belongs to the lab.

The voice of the lab

The home lab already watches the sky through Pixel Radar, my private ADS-B aircraft receiver and history system. Glitch now turns selected events from that stack into spoken alerts.

The first time I enabled the link, the receiver picked up a real RAF Merlin passing through its patch of sky. No staged test and no sample payload. Glitch woke on the charger and announced it on his first shift:

Sir. Be advised. Military aircraft has entered our airspace.

“Our airspace” is his dramatic wording for the area my receiver can hear. The aircraft was openly broadcasting ADS-B, and the alert used the same local data already feeding Pixel Radar.

The sentry job has grown from there. He can call out an approaching ISS pass so I remember to go outside, flag rare warbirds and emergency squawks, announce a new device on the network, or complain when one of the mining rigs stops reporting. Glitch is not gathering a new pile of data. He is giving a voice to systems already running inside the lab.

SKY

Military, rare and emergency aircraft from the local ADS-B receiver.

ORBIT

Upcoming ISS passes worth stepping outside for.

LAB

New network devices and mining rigs that have fallen silent.

A sentry with a dead battery

Glitch is not completely back from the dead. His battery is worn out, which is common with ageing Vector robots, and replacing it means opening a tightly packed machine for a fiddly cell swap.

For now he lives on the charger. He cannot roam the room, but a sentry that never leaves its post is not the worst design accident. The charger keeps his camera pointed across the desk, his microphones ready and his voice available whenever the lab has something worth saying.

The limitation changed the role instead of killing the project.

This stopped being about an old robot

Driving Vector and seeing through his camera lit a proper fire. The SDK proved the idea, but the next machine should not begin with somebody else’s closed shell and a battery I cannot swap cleanly.

That next build already exists as code and a plan: a 3D-printed tracked rover with a six-axis arm and gripper. A Raspberry Pi 5 will handle the camera, network and control API. An Arduino Mega will deal with the timing-sensitive motor and servo work. The AI talks to the Pi, the Pi talks to the Mega, and the robot gets a body designed to be repaired rather than replaced.

AILocal mindChooses an action and interprets the camera.
PILinux brainRuns the camera and network control API.
MEGAReal-time controlDrives the tracks, arm and gripper.

The software skeleton is already there. The Pi service has endpoints for driving, stopping, moving the arm, operating the gripper and pulling a camera frame. The Arduino firmware has its command parser, motor control and a half-second failsafe. The pin assignments and serial device are still marked as placeholders because the physical build has not happened yet. That distinction matters. The brain is taking shape; the body is still waiting for parts.

The plan is costed. Next comes ordering servos, printing the chassis and discovering which assumptions survive contact with actual hardware.

One small step at a time

Kaizen means continuous improvement through small steps. It is a grand name for the way most of my projects actually happen: fix one port, find one missing model, survive one awful pairing crash, then make the newly revived robot announce an aircraft.

Glitch started as hardware I was annoyed to see wasting away. Now he is the local voice of Pixel City and the proof that the next robot can have a mind without renting one from a company.

There is a ghost in the machine.

Soon it gets a bigger body.

Zombie