Venn: The Companion Robot
An open-source telepresence robot: a Raspberry Pi rover streaming live video and two-way audio over WebRTC, driven from a phone and expressing emotions on an OLED face.
An open-source telepresence robot: a Raspberry Pi Zero 2 W rover that streams live video and two-way audio over peer-to-peer WebRTC, takes driving commands back, and shows how it feels on a small OLED face.

Operator Mobile Application
One landscape screen holding the video feed, two-way audio to talk to the robot, the joystick, the throttle and its face

Core Features
Mobility, presence and expression on budget hardware
Low-Latency WebRTC Video
A 480p H.264 feed from the Pi camera reaches the operator at 142 ms average glass-to-glass latency, comfortably under the 200 ms target set for fluid teleoperation.
38 ms Command Path
Joystick input travels as JSON over a WebRTC RTCDataChannel straight to the robot, reaching PWM output on the L298N driver in 38 ms — crisp steering with no visible lag or oversteer.
Affective OLED Interface
A 128x32 SSD1306 OLED on the I2C bus renders five expressions — happy, angry, neutral, sad, surprised — picked from the phone and drawn on the robot's face near-instantly.
Two-Way I2S Audio
An INMP441 MEMS microphone and a MAX98357 Class-D amplifier driving a 1W speaker carry conversation both ways over I2S, handled with ALSA on the Pi.
Raspberry Pi Zero 2 W Core
A headless Raspberry Pi OS Lite install runs a Python aiortc application launched by a systemd service on boot, multiplexing video, audio and control over a single peer connection.
Stable Power for 10.7 Hours
Two 18650 cells in series feed the L298N at 7.4V while an LM2596 buck converter holds the Pi's 5V rail within ±0.02V — about 10.7 hours idle and 4 hours under full streaming and driving load.
Hardware Integration

Venn's physical architecture is structured to optimize battery weight distribution, and ensure clean power delivery through buck converter stepping. A high-quality omnidirectional microphone and a digital amplifier are powered over I2S to ensure natural audio feedback.
Circuit Schema

The schematic highlights the circuit diagram connecting the Raspberry Pi Zero 2 W, the L298N driver, Sony 18650 Li-Ion batteries, digital MEMS INMP441, SSD1306 OLED, and speaker.
Project Description
Static IP cameras and fixed-angle home monitoring reduce remote presence to a passive, one-way task. Commercial telepresence robots that fix this, such as the Enabot EBO series, come at a high retail cost and lock users into closed, proprietary cloud ecosystems, while accessible DIY rovers built around microcontrollers like the ESP32-CAM keep costs down but treat the robot purely as a utilitarian surveillance tool, with no affective feedback for genuine social engagement.
Venn was built by a 5-person team to close that gap: an open-source telepresence platform that brings dynamic spatial mobility, low-latency bidirectional communication and an integrated affective interface together in one budget-friendly package. A Raspberry Pi Zero 2 W drives a 2WD chassis and opens a peer-to-peer WebRTC connection straight to the operator's phone, carrying live video, two-way audio and motor commands with no server in the data path, while a minimalist OLED face renders emotional expressions so remote interaction feels less like surveillance and more like presence.
Technology Stack
Robot (Raspberry Pi)
- Python with the aiortc library, launched on boot by a systemd service and answering the phone's WebRTC offer.
- Headless Raspberry Pi OS Lite (32-bit) on a Raspberry Pi Zero 2 W, with a 5MP Camera Module V1.3 on the CSI port.
- ALSA (pyalsaaudio) for I2S capture and playback, PWM to the L298N for steering, and I2C to the SSD1306 OLED face.
Mobile Client
- React Native with Expo and TypeScript, acting as the WebRTC offerer through react-native-webrtc.
- React Native Gesture Handler and Reanimated behind the on-screen joystick that drives the robot.
- Operator input packaged as JSON commands and sent straight down the P2P data channel, with no server in between.
Backend & Protocols
- Python FastAPI exposing WebSocket endpoints as a rendezvous point for the robot and the phone.
- WebRTC signalling over SDP offers and answers, with ICE candidates gathered through STUN.
- One peer connection carrying a 480p H.264 video track, two-way audio and a JSON RTCDataChannel.