Replacing Vector Robot Brain Board

Created a project doc

Passive Wiretap Board Status

View Document

This board has been redesigned as a safe listen-only wiretap for the Vector head/body 4-wire cable. It no longer includes the ESP32-C3 or ac...
Done — I redesigned it as a passive listen-only wiretap.
What changed:
  • Removed ESP32-C3 and level-shifter from the signal path.
  • Kept only headers + protection resistors.
  • Mapped the confirmed Vector wires:
    • black GND
    • red VMAIN
    • white BODY_RX
    • green TX1.8
  • Routed the simplified PCB.
  • Ran ERC/DRC checks: no errors/warnings came back in the checked categories.
Saved status here:
Passive Wiretap Board Status
Open item:
  • This is still a hand-wired/probe board, not the final drop-in Vector connector board.
Document, BOM, export
Create wiring guide
Check BOM cost
Export files
Review manufacturability
GND
J2
R3 P2 - J2 2
R2
Resistance
10kΩ
GND
J1 Pin_3 - R1 P1
R1
Resistance
10kΩ
J1 Pin_4 - R2 P1
J1 Pin_4 - R2 P1
R2 P2 - J2 5
J1 Pin_3 - R1 P1
R1 P2 - J2 4
J1 Pin_2 - R3 P1
J1 Pin_2 - R3 P1
R2 P2 - J2 5
R3 P2 - J2 2
R1 P2 - J2 4
R3
Resistance
100kΩ
J1

Refine this doc
Ask about this doc
Vector Brain Board Replacement — Claude Code Requirements Package
Corrected Goal
The goal is not to run Ollama or simply add a chatbot to wire-pod. The goal is to investigate and potentially design a smarter replacement brain board for Vector Robot 2.0 while reusing as much of the existing robot hardware as possible:
  • Existing camera
  • Existing display
  • Existing speaker
  • Existing microphone(s)
  • Existing motors/body board if practical
  • Existing sensors/encoders where possible
  • Existing battery/charging system where safe
Claude Code or another coding AI should be used to help inspect repos, write firmware/software, reverse engineer protocols, and build integration tools.
Key Reality Check
Vector has two major control domains:
  1. Head / brain board
    • Qualcomm APQ8009 Linux-class processor.
    • Likely handles camera, display, audio, Wi-Fi, higher-level behavior, and communication to the body board.
  2. Body board
    • STM32F030C8T6TR microcontroller.
    • About 2.8 V logic.
    • Handles motors, encoders, charger, battery, proximity/IR sensors, and body real-time control.
The most realistic replacement strategy is probably replace the head/brain board first while keeping the STM32 body board, then talk to the body board over its existing head/body communication link.
A full replacement of both head and body boards is possible, but much harder and riskier.
Preferred Path: New Smart Head Board + Original Body Board
Replace or bypass the Qualcomm APQ8009 head brain, but keep the body board for motor/sensor/battery control.
Advantages:
  • Avoids redesigning motor drivers and charging circuitry immediately.
  • Keeps the dangerous/high-current control on known hardware.
  • Lets the new brain focus on camera/audio/display/network/AI behavior.
  • Lower risk than replacing every board.
Requires reverse engineering:
  • Head-to-body UART/protocol.
  • Head-board connector pinout.
  • Camera interface.
  • Display interface.
  • Audio/mic/speaker interface.
  • Power rails available from battery/body board.
Alternative Path: Interposer First
Before making a replacement board, make a passive/interposer board that sits between head and body boards or breaks out the relevant connector.
Purpose:
  • Measure signals safely.
  • Capture UART/I2C/SPI/MIPI/audio lines.
  • Confirm voltages.
  • Avoid destroying original boards.
Highest-Risk Path: Full Brain + Body Replacement
Only do this after the protocol and power system are understood.
Requires:
  • New motor drivers.
  • Encoder inputs.
  • Charger/power-path design.
  • Battery safety design.
  • Sensor interfaces.
  • Linux compute module or high-end MCU/SBC.
  • Mechanical board match.
Candidate New Brain Hardware
Because Vector likely uses camera/display/audio, an ESP32-C3 is not enough for the main brain.
Better candidates:
Raspberry Pi Compute Module 4 / 5
Pros:
  • Linux-capable.
  • Good camera/display/audio ecosystem.
  • Claude Code can target Python/C++/ROS/Linux easily.
  • Strong community support.
Cons:
  • Physically large.
  • Power hungry.
  • May be difficult to fit inside Vector.
Raspberry Pi Zero 2 W
Pros:
  • Small, Linux-capable.
  • Easier than CM4/CM5.
  • Wi-Fi built in.
Cons:
  • Limited camera/display lanes.
  • Less powerful.
  • May still struggle with real-time audio/video.
Radxa / Luckfox / small Linux SOM
Pros:
  • Smaller SOM options may fit better.
  • Some include camera/display interfaces.
Cons:
  • More integration risk.
  • Less beginner-friendly.
ESP32-S3
Pros:
  • Better than ESP32-C3 for camera/audio experiments.
  • Small and cheap.
Cons:
  • Still not a true Linux smart brain.
  • Not ideal for reusing Vector’s existing display/camera if they are MIPI/parallel interfaces.
ESP32-C3
Use only as:
  • Helper MCU
  • UART bridge
  • Wi-Fi telemetry/debug tool
  • Not the main brain board
Existing Hardware Interfaces To Identify
Camera
Need to determine:
  • Camera module part number.
  • Connector pin count/pitch.
  • Interface type: MIPI CSI-2, parallel DVP, USB, or proprietary.
  • Required power rails.
  • I2C control bus address.
  • Clock requirements.
Likely risk:
  • If it is MIPI CSI-2, the replacement brain must support compatible CSI lanes and camera driver work.
Display
Need to determine:
  • Display panel part number.
  • Connector pin count/pitch.
  • Interface: MIPI DSI, SPI, RGB parallel, or other.
  • Backlight power requirements.
  • Touch interface if any.
Likely risk:
  • Reusing the original display may require Linux kernel/display driver work.
Microphones
Need to determine:
  • Number of microphones.
  • Analog, PDM, I2S/TDM, or Qualcomm-specific codec path.
  • Bias/power requirements.
  • Whether microphones connect directly to APQ8009/codec/PMIC.
Speaker
Need to determine:
  • Speaker impedance.
  • Existing amplifier part number.
  • Whether the amp is on the head board or separate.
  • Interface to amp: analog, I2S, PWM, or codec output.
Need to determine:
  • Connector pinout between head and body.
  • UART baud rate and voltage.
  • Message protocol.
  • Boot/reset/enable lines.
  • Power-good or wake lines.
Known labels to investigate:
  • BODY_TX
  • BODY_RX
  • TXD
  • RXD
  • SCL2
  • SDA2
  • VBAT
  • BAT+
  • BAT-
  • GND
  • USB D+
  • USB D-
Claude Code Work Package Prompt
Use this with Claude Code:

Text


You are helping me reverse engineer and potentially replace the brain board in an Anki / Digital Dream Labs Vector Robot 2.0.

I do NOT want an Ollama chatbot-only solution. I want a real hardware/software integration plan and codebase for using a smarter onboard brain board while reusing Vector's existing hardware where possible: camera, display, speaker, microphones, body board, motors, encoders, sensors, battery, and charger.

Known facts:
- Vector appears to have a Qualcomm APQ8009 head/brain board.
- Vector body board uses STM32F030C8T6TR at approximately 2.8 V logic.
- Body board likely handles motors, encoders, battery/charging, IR/proximity sensors, and low-level real-time control.
- The best first hardware strategy is probably to replace or emulate the head board while keeping the original body board.
- I have ESP32-C3 chips, but they are not powerful enough to be the main brain. They may be used only as bridge/debug/helper MCUs.

Your job:
1. Create a reverse-engineering plan for the existing head board interfaces.
2. Identify what evidence is needed to reuse the original camera, display, microphones, speaker, and body board.
3. Build software tools to capture and analyze the head-to-body protocol.
4. Build a Python parser for UART/logic-analyzer captures.
5. Define a candidate replacement-brain software architecture for a Linux SBC/SOM.
6. Define how the new brain would talk to the original STM32 body board.
7. Define how to validate camera/display/audio compatibility before designing a PCB.
8. Create a repository structure for this project.
9. Write code stubs for protocol decoding, robot command abstraction, and hardware diagnostics.
10. Do not assume the original camera/display/audio can be reused until their part numbers and electrical interfaces are confirmed.
11. Do not drive motors or transmit onto the body-board bus until passive captures are decoded.
12. Respect 2.8 V logic; do not connect 3.3 V GPIO directly without level shifting or verified tolerance.

Expected output:
- A staged reverse-engineering plan.
- A requirements list for camera/display/audio/body-board integration.
- A list of candidate replacement compute modules with pros/cons.
- A repo layout.
- Python code for parsing UART captures from CSV/Saleae exports.
- Python classes for representing body-board messages.
- A diagnostic CLI skeleton.
- A hardware test checklist.
- A list of measurements/photos needed from me.

Preferred architecture:
- New Linux-capable smart brain board or dev board.
- Original STM32 body board retained initially.
- Home server or cloud LLM API can be used for heavy AI, but the robot brain should handle local camera/audio/display/body communication.
Suggested Repo Layout

Text


vector-brain-re/
  README.md
  docs/
    hardware-notes.md
    connector-map.md
    camera-display-audio.md
    body-protocol.md
    replacement-brain-options.md
  captures/
    uart/
    i2c/
    boot/
    movement/
    charging/
  tools/
    parse_saleae_uart.py
    detect_baud.py
    packet_cluster.py
    annotate_capture.py
  vector_body/
    __init__.py
    messages.py
    protocol.py
    transport.py
    commands.py
  diagnostics/
    body_cli.py
    camera_probe.py
    audio_probe.py
    display_probe.py
  hardware/
    interposer/
    level_shifter/
  tests/
    test_protocol.py
Starter UART Capture Parser

Python


#!/usr/bin/env python3
import argparse
import csv
from dataclasses import dataclass
from pathlib import Path

@dataclass
class UartByte:
    time_s: float
    direction: str
    value: int

@dataclass
class Packet:
    direction: str
    start_time_s: float
    data: bytes


def load_saleae_uart_csv(path: Path, direction: str) -> list[UartByte]:
    rows = []
    with path.open(newline="") as f:
        reader = csv.DictReader(f)
        for row in reader:
            # Saleae exports vary. Adjust these keys after seeing real files.
            time_key = "Time [s]" if "Time [s]" in row else "Time"
            data_key = "Data" if "Data" in row else "Value"
            raw = row[data_key].strip()
            if raw.startswith("0x"):
                value = int(raw, 16)
            else:
                value = int(raw)
            rows.append(UartByte(float(row[time_key]), direction, value))
    return rows


def split_packets(bytes_in: list[UartByte], gap_s: float = 0.01) -> list[Packet]:
    if not bytes_in:
        return []
    packets = []
    current = [bytes_in[0]]
    for b in bytes_in[1:]:
        if b.time_s - current[-1].time_s > gap_s or b.direction != current[-1].direction:
            packets.append(Packet(current[0].direction, current[0].time_s, bytes(x.value for x in current)))
            current = [b]
        else:
            current.append(b)
    packets.append(Packet(current[0].direction, current[0].time_s, bytes(x.value for x in current)))
    return packets


def main():
    ap = argparse.ArgumentParser(description="Parse Vector head/body UART captures")
    ap.add_argument("--tx", type=Path, help="CSV for head-to-body or TX line")
    ap.add_argument("--rx", type=Path, help="CSV for body-to-head or RX line")
    ap.add_argument("--gap-ms", type=float, default=10.0)
    args = ap.parse_args()

    all_bytes = []
    if args.tx:
        all_bytes += load_saleae_uart_csv(args.tx, "TX")
    if args.rx:
        all_bytes += load_saleae_uart_csv(args.rx, "RX")
    all_bytes.sort(key=lambda x: x.time_s)

    packets = split_packets(all_bytes, args.gap_ms / 1000.0)
    for p in packets:
        hexdata = " ".join(f"{b:02X}" for b in p.data)
        ascii_hint = "".join(chr(b) if 32 <= b <= 126 else "." for b in p.data)
        print(f"{p.start_time_s:012.6f} {p.direction:>2} len={len(p.data):03d} {hexdata} |{ascii_hint}|")

if __name__ == "__main__":
    main()
Replacement Brain Requirements
Minimum replacement brain should have:
  • Linux support.
  • Wi-Fi.
  • UART at 2.8 V-compatible levels or level shifting.
  • I2C support.
  • Audio input/output support.
  • Camera interface compatible with the chosen camera.
  • Display interface compatible with the chosen display.
  • Enough CPU/RAM for audio/video handling and API calls.
  • Low enough power for Vector’s battery.
  • Small enough mechanical footprint.
Preferred development board before custom PCB:
  • Raspberry Pi Zero 2 W if space and interfaces are enough.
  • Raspberry Pi CM4/CM5 if camera/display interface compatibility matters more than size.
  • Other small Linux SOM only after confirming camera/display requirements.
Immediate Data Needed From User
To actually determine whether the current camera/speaker/display can be reused, collect:
  1. Macro photos of head board both sides.
  2. Macro photos of camera module markings.
  3. Macro photos of display connector and display flex markings.
  4. Macro photos of microphone(s) and speaker amplifier area.
  5. Connector pin counts and pitch measurements.
  6. Any readable part numbers on the camera, display, codec, amp, PMIC, memory, and Wi-Fi chips.
  7. Logic analyzer capture of BODY_TX/BODY_RX during boot and simple movement.
  8. Voltage measurements on head/body connector pins.
Bottom Line
The correct next engineering move is:
  1. Reverse engineer the head/body interface.
  2. Identify camera/display/audio electrical interfaces.
  3. Prototype with a Linux dev board before making a custom brain PCB.
  4. Keep the STM32 body board at first.
  5. Use Claude Code to build the protocol tools and replacement-brain software stack.
  • Corrected Goal

  • Key Reality Check

  • Recommended Hardware Strategy

  • Preferred Path: New Smart Head Board + Original Body Board

  • Alternative Path: Interposer First

  • Highest-Risk Path: Full Brain + Body Replacement

  • Candidate New Brain Hardware

  • Raspberry Pi Compute Module 4 / 5

  • Raspberry Pi Zero 2 W

  • Radxa / Luckfox / small Linux SOM

  • ESP32-S3

  • ESP32-C3

  • Existing Hardware Interfaces To Identify

  • Camera

  • Display

  • Microphones

  • Speaker

  • Body Board Link

  • Claude Code Work Package Prompt

  • Suggested Repo Layout

  • Starter UART Capture Parser

  • Replacement Brain Requirements

  • Immediate Data Needed From User

  • Bottom Line

Vector Robot Smart Brain Replacement thumbnail
Custom replacement brain board for Anki Vector Robot 2.0 that preserves stock robot functions while offloading conversation, context, and LLM behavior to a home server.

Properties

Pricing & Availability

Distributor

Qty 1

Digi-Key

$1.33

Mouser

$1.44

Controls