Bob: AI-Powered Raspberry Pi Rover

Published: July 27, 2026

Bob is an ongoing AI-powered mobile rover that combines a Raspberry Pi, Arduino motor control, computer vision, voice interaction, an animated robot face, and a custom browser dashboard in one modular robotics platform.

I started Bob as a hands-on way to explore how embedded electronics, software, artificial intelligence, and physical hardware can work together. Rather than building only a remote-controlled car or a screen-based chatbot, my goal is to create a robot that can move, see, listen, speak, respond conversationally, and gradually develop a recognisable personality.

Current status: Functional prototype under active development.


📸 Preview


🎯 Project Vision

Bob is designed as a practical robotics and embedded-systems learning platform rather than a finished consumer robot. Its modular design lets me improve individual systems without rebuilding the entire rover.


⚙️ How Bob Works

Bob separates high-level intelligence from direct hardware control. The Raspberry Pi handles the dashboard, camera, audio, AI, and command validation. An Arduino-compatible controller handles the motors and pan-and-tilt servos through a small serial protocol.

Browser, microphone, wake word, or remote message
  -> Raspberry Pi dashboard and deterministic command parser
  -> conversational request OR allow-listed robot command
  -> OpenClaw with local Ollama fallback for conversation
  -> Piper text-to-speech for spoken responses
  -> bounded serial command for Arduino-controlled movement

Conversational model output is never trusted as a direct motor command. Physical actions must pass through deterministic application logic before a short allow-listed command is sent to the Arduino.


✅ Current Working Features

FeatureCurrent Capability
Rover movementForward, backward, pivot left, pivot right, stop, and five speed levels through an Arduino serial protocol
Motor safetyExplicit stop command and a one-second Arduino motor inactivity failsafe
DashboardAuthenticated Flask interface for status, movement, camera, chat, and robot controls
Conversational AIOpenClaw is the primary route, with local Ollama retained as a fallback
SpeechUSB microphone capture, speech recognition, local Piper text-to-speech, and browser speech fallback
CameraLazy Picamera2 capture with OpenCV overlays, motion processing, and dashboard streaming
Robot faceBrowser-rendered vector face with expressions, gaze, listening, thinking, speaking, and sleep states
Power monitoringUPS integration detects its I2C fuel-gauge interface

🚧 Implemented but Not Fully Active


🧰 Main Hardware

ComponentRoleStatus
Raspberry Pi 5Dashboard, AI, camera, speech, power monitoring, and serial communicationConfirmed
Arduino-compatible AVR boardBounded motor and servo controlWorking role confirmed; exact installed board still being verified
Four DC motors and rover chassisPhysical movementConfirmed
Motor Shield V1-compatible driverControls four motor channels using the AFMotor APISoftware interface confirmed; exact hardware revision being verified
Raspberry Pi Camera Module 3Video, motion, and vision inputConfirmed
Pan-and-tilt servo mountMoves the camera horizontally and verticallyConfirmed with ongoing reliability work
USB microphone and speakerVoice input and spoken responsesConfirmed
7-inch HDMI touchscreenLocal dashboard and robot-face displayConfirmed
20,000 mAh power bank and UPS arrangementPortable Raspberry Pi powerUsed; final power architecture still being refined

💻 Software and AI System

TechnologyPurpose
Python and FlaskDashboard, API endpoints, hardware bridge, and system status
OpenClawPrimary conversational gateway and remote integration
OllamaLocal conversational fallback and experimental local vision descriptions
Picamera2 and OpenCVCamera capture, overlays, motion, and experimental tracking
SpeechRecognitionSpeech-to-text with explicit remote-recognition consent
PiperLocal text-to-speech
OpenWakeWordCustom "Hey Bob" activation experiments
Arduino C++Real-time motor and servo control
HTML, CSS, and JavaScriptDashboard and animated robot-face interfaces

🎤 Voice and "Hey Bob"

The latest audited wake-word configuration uses a custom OpenWakeWord model with thresholding, cooldown control, and suppression while Bob is speaking. Test mode is deliberately non-actioning: detecting the wake word during a test cannot activate speech, AI, the camera, or the motors.

The working voice path records bounded microphone input, converts speech to text, routes the request to the assistant, cleans and limits the reply, then speaks it through a local Piper voice. Recordings, private datasets, transcripts, and trained model files are not published.


👀 Robot Face and Personality

Bob's active face is rendered in a browser and served by the dashboard. It supports idle, awake, listening, thinking, speaking, confused, happy, searching, startled, bored, and sleeping states. Gaze values are clamped to a safe range, temporary expressions return to neutral, and the display enters a sleep presentation after inactivity.

The face is more than decoration: it makes Bob's internal state easier to understand while giving the rover a recognisable personality.


🚗 Motor and Camera Protocol

CommandAction
FMove forward
BMove backward
L / RPivot left or right
SStop immediately
Q / EMove camera pan angle
U / DMove camera tilt angle
CCentre the camera
V1 to V5Select one of five movement speeds

🔬 Experimental and Planned Features


⚠️ Safety and Privacy


📝 Notes

← Back to Projects