
🐕 MindPaw
桌面级四足机器狗 — 语音交互·手势识别·AI对话·网页控制
v2.0 — 新增流式 3D 重建感知层(端到端 ~150 ms,ABot-Recon 思想)
总物料成本 ≈¥50,全开源
📋 目录
🎯 这是什么
MindPaw 是一个桌面四足机器人项目,基于 ESP8266 微控制器。它的特色是:
- 不只是遥控车 — 你可以和它对话、对它做手势、它会有情绪反应
- 真的能聊 AI — 接入了豆包大模型,能做智能对话
- 真的便宜 — 全部物料加起来不到 ¥50(基础版仅 ¥35)
- 真的开源 — 代码、电路图、3D 打印文件全部提供
这个项目是从零开始自己做的,不是用现成的开发板套件。所以如果你想学习怎么把 ESP8266、舵机、摄像头、语音模块、AI 全部整合在一起,这里的代码和文档应该能帮到你。
🚦 从哪里开始
这个仓库分为两条互不阻塞的路径:
| 路径 | 适合人群 | 入口 |
|---|---|---|
| MindPaw Demo | 初学者、硬件爱好者,目标是把机器狗复现并玩起来 | MindPaw_main/README.md |
| MindPaw AI Infra | AI Infra、边缘计算和 Agent 研究者 | ai-infra/README.md |
| 🛰️ MindPaw 2.0 流式 3D 重建 | 给机器狗加"看见前方"的能力(避障 + 浏览器点云) | Docs/09_Streaming_Recon.md |
| SCH & PCB | 想自己画板、打样或排查供电/接线问题的人 | SCH&PCB/README.md |
初学者不需要安装 Python、Docker 或 AI Gateway;完成基础 Demo 后,再按兴趣进入研究路径。两条路径共享同一套固件和硬件,Gateway 地址留空即可回到原有直连模式。2.0 感知层默认关闭,在 aiconfig.html 里填一个 Recon Gateway URL 即可启用。
✨ 功能总览
| 功能 | 怎么触发 | 机器人会做什么 |
|---|---|---|
| 语音控制 | 说"前进""开心""你好" | 执行动作、切换表情、播放音效 |
| 手势控制 | 在摄像头前挥手/握拳/指点 | 识别手势后执行对应动作 |
| 网页控制 | 手机浏览器打开 192.168.4.1 | 完整的遥控界面,可点按控制 |
| AI 对话 | 网页聊天 / 语音说"你好" | 调用豆包 API,用动作+表情回复 |
| AI Infra 网关 | 可选配置 Gateway 地址 | 面向研究者的 AI 基础设施教程;初学者可以完全跳过 |
| 🛰️ 流式 3D 重建感知层(v2.0) | 摄像头自动推流 | 每帧推流到 Edge Gateway,机器狗能感知障碍距离并自动避障;浏览器可视化稀疏点云。详见 Docs/09_Streaming_Recon.md |
| 情感反应 | 持续运行中自动变化 | 根据交互频率和内容,表现出开心/无聊/难过等情绪 |
| 表情显示 | OLED 屏幕显示 | 7 种表情 + 天气 + 时间 |
| 声音反馈 | 扬声器播放旋律 | 开机/命令确认/情绪表达共 10 种音效 |
🛒 你需要准备什么
硬件清单
以下价格来自 淘宝/拼多多 真实售价(2026年7月)。量大还能更便宜。
🏆 方案一:完整版(≈¥50,带摄像头手势识别)
| 模块 | 参考价格 | 购买建议 |
|---|---|---|
| ESP12F 模块 | ¥5 | 买裸模块自己焊,不要买 NodeMCU 开发板(¥15 贵 3 倍) |
| SG90 舵机 ×4 | ¥12 | 拼多多 4 个装 ¥12,淘宝散买约 ¥3.5/个 |
| SSD1306 OLED 128×64 I2C | ¥6 | 选白色最便宜,蓝色¥7、双色¥9 |
| OV2640 摄像头 | ¥15 | 买不带 FIFO 的裸板,不要买 ArduCAM Mini(¥25) |
| HLK-V20 语音模块 | ¥9 | 搜 "SU-03T" 比 "HLK-V20" 便宜,同一个东西 |
| 8Ω 喇叭 + S8050 + 电阻电容 | ¥3 | 一套散件,邮费都比货贵,建议和其他一起买 |
| PCB 打样 | ¥0 | 嘉立创每月 2 张免费券 |
| 3D 打印 | ¥0 | 嘉立创新用户有免费券 |
| USB 供电 | ¥0 | 手机充电器 + MicroUSB 线,人人都有 |
| 合计 | ≈ ¥50 |
🥉 方案二:基础版(≈¥35)
去掉摄像头,保留语音控制 + AI 对话 + 情感交互。适合先入门、再升级。
| 模块 | 价格 |
|---|---|
| ESP12F ¥5 + SG90×4 ¥12 + OLED ¥6 + SU-03T ¥9 + 喇叭套件 ¥3 | ≈ ¥35 |
💡 注:¥35-¥50 是 物料裸价,不含邮费(约 ¥8)。首次购买建议一次买齐所有器件,邮费只付一次。
软件准备
| 软件 | 用途 | 下载地址 |
|---|---|---|
| VSCode | 代码编辑器 | code.visualstudio.com |
| PlatformIO 扩展 | 编译和烧录 | VSCode 扩展商店搜索安装 |
| Python 3 | 图片转换工具 | python.org |
| 嘉立创 EDA 专业版 | 查看/修改 PCB | pro.lceda.cn |
| SU-03T 配置工具 | 配置语音模块 | 百度搜索 "SU-03T 配置工具" |
需要申请的免费账号
| 服务 | 用途 | 申请地址 | 是否必选 |
|---|---|---|---|
| 心知天气 | 获取天气信息 | seniverse.com | 可选 |
| 火山引擎方舟 | AI 对话 (豆包) | console.volcengine.com | 可选 |
| 嘉立创 | 免费打样 PCB、3D 打印 | jlc.com | 可选 |
以上两个 API 都是可选功能。不配置的话,机器狗的基本运动、表情、语音控制仍能正常工作。
🚀 如何复刻
从零开始做一台 MindPaw,按这个顺序走。
⭐ 开始前,请先支持一下这个开源项目:
- Star ⭐ — 点击仓库右上角 ⭐ Star,收藏本项目,方便以后找到
- Fork 🍴 — 点击 Fork,把项目复制到你自己的 GitHub,之后可自由修改并提交 PR
- Download 📥 — 点击绿色 Code 按钮 → Download ZIP,或直接 clone:
📸 操作示意图:
git clone https://github.com/ace-trump-tech/MindPaw.git
第一步:烧录固件(先让代码跑起来)
先只买 NodeMCU + USB-TTL,花 30 分钟验证环境:
# 1. 安装 VSCode + PlatformIO 扩展
# 2. 克隆项目并打开
git clone https://github.com/你的用户名/MindPaw.git
cd MindPaw/MindPaw_main
# 3. 编译
pio run
# 4. 连接 NodeMCU(GPIO0 接地 → 上电)
# 5. 烧录固件
pio run -t upload
# 6. 上传 Web 页面
pio run -t uploadfs
# 7. 断开 GPIO0 接地 → 按 RST
# 8. 连接 WiFi "MindPaw" → 打开 192.168.4.1
详细步骤 → Docs/04_Firmware_Flashing.md
第二步:打样 PCB 和 3D 打印(做硬件)
如果你有嘉立创的免费打样券,这一步可以不花钱:
| 步骤 | 说明 | 参考文档 |
|---|---|---|
| 导出 PCB Gerber 文件 | 打开 SCH&PCB/MindPaw_SCH&PCB.epro2 → 文件 → 制造 → Gerber |
01_Hardware_Guide.md |
| 下单免费打样 | 嘉立创下单助手 → 上传 Gerber → 使用优惠券 | 02_PCB_Fabrication.md |
| 3D 打印外壳 | 上传 3Dmodel/*.stl → 选择 PLA → 使用优惠券 |
02_PCB_Fabrication.md |
第三步:焊接和组装
收到 PCB 和 3D 打印件后:
- 先焊接电源部分 — 测试 3.3V 和 5V 输出正常
- 焊接 ESP12F 核心 — 烧录固件验证
- 逐个添加模块 — OLED → 舵机 → 语音 → 摄像头 → 扬声器
- 3D 打印件组装 — 舵机装入底盘 → 合上身体 → 安装脚部
接线图 → 05_Assembly_Guide.md
第四步:配置 API(可选)
如果你想要 AI 对话和天气查询功能:
| 服务 | 申请步骤 | 配置位置 |
|---|---|---|
| 心知天气 API | 注册 → 创建免费版 → 复制 Key | 网页控制台 → 设置页面 |
| 火山引擎 API | 注册 → 创建推理接入点 → 复制 Key | http://192.168.4.1/aiconfig.html |
图文步骤 → Docs/07_API_Guide.md
第四步(可选):启动 AI Infra 网关
ai-infra 是可选的独立 AI 基础设施层。它负责上游模型适配、鉴权、超时和结构化输出校验,适合希望研究 Agent、模型接入和边缘设备协同的开发者。初学者可以跳过这一节,直接使用原有的 ESP8266 直连豆包模式,不会影响机器狗的基础功能和 AI 对话。
cd ai-infra
cp .env.example .env
# 编辑 .env,配置 GATEWAY_TOKEN、AI_PROVIDER 和上游 API Key
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn gateway.app:app --host 0.0.0.0 --port 8000
没有云端 Key 时,可以将 .env 中的 AI_PROVIDER 设为 mock,先验证设备链路。然后打开 http://192.168.4.1/aiconfig.html:
- API Key:填写
GATEWAY_TOKEN - 推理端点 ID:填写
mindpaw - AI Gateway 地址:填写
http://网关IP:8000/v1/chat/completions
Docker 用户可以运行 cd ai-infra && docker compose up --build -d。完整说明见 ai-infra/README.md。
两种使用路径
| 目标 | 建议路径 |
|---|---|
| 第一次复现机器狗、学习 ESP8266 和 Arduino | 跳过 ai-infra,直接配置豆包 API |
| 研究 AI Agent、模型路由、结构化输出和边缘网关 | 启动 ai-infra,通过 Gateway 接入设备 |
这两条路径共享同一套固件和网页功能,可以随时从直连模式切换到 Gateway 模式。
为什么先放在同一个仓库?
当前阶段保持 monorepo 的好处是:初学者只需下载一个仓库即可复现,研究者也能在同一个仓库中阅读固件、协议和 Gateway。等接口稳定、网关需要服务其他机器人后,再把 ai-infra 独立成可插拔仓库或 Python 包,并保留本仓库的版本化配置示例。
第五步:配置语音模块
HLK-V20 需要用电脑配置好之后才能用:
- 下载 SU-03T 配置工具
- 通过 USB-TTL 连接模块
- 按表格添加 22 条语音命令
- 烧录 → 断电 → 接到 MindPaw
详细命令表 → Docs/07_API_Guide.md#3-hlk-v20-语音模块配置
📁 项目结构
MindPaw/
│
├── 3Dmodel/ ← 3D 打印件(body.stl / bottom.stl / foot.stl)
│
├── SCH&PCB/ ← 电路设计文件(立创 EDA 专业版)
│ ├── MindPaw_SCH&PCB.epro2
│ └── README.md ← 硬件复现、打样和排障入口
│
├── MindPaw_main/ ← 固件源代码(初学者 Demo 入口)
│ ├── README.md ← 编译、烧录、验收和故障排查
│ ├── src/ ← C++ 源码
│ │ ├── main.cpp ← 主程序(入口、Web服务器、舵机动作)
│ │ ├── image.cpp ← OLED 屏幕显示的位图数据
│ │ ├── hlkv20.* ← HLK-V20 语音识别模块驱动
│ │ ├── ov2640.* ← OV2640 摄像头驱动
│ │ ├── speaker.* ← 扬声器旋律播放
│ │ ├── motion_emotion.* ← 机器狗的情感动作(跳舞、点头等)
│ │ ├── emotion_engine.* ← 情感状态机(PAD 模型)
│ │ ├── gesture_nn.* ← 手势识别(轻量 MLP)
│ │ ├── multimodal_fusion.* ← 多模态输入融合
│ │ ├── doubao_agent.* ← 豆包 AI API 客户端
│ │ └── doubao_config.h ← AI 提示词和配置
│ ├── data/ ← 网页控制界面(11 个 HTML 文件)
│ ├── tools/ ← Python 工具脚本
│ │ └── distill_gesture.py ← 手势模型训练脚本
│ ├── platformio.ini ← 编译配置文件
│ └── PIN_WIRING.md ← 引脚接线图
│
├── ai-infra/ ← 独立 AI Gateway(可选,研究者教程)
│ ├── gateway/app.py ← OpenAI 兼容入口、鉴权和上游适配
│ ├── tests/ ← Gateway 契约单元测试
│ ├── .env.example ← 网关配置模板
│ ├── Dockerfile ← 容器部署
│ └── README.md ← 研究问题、实验路线和网关启动说明
│
├── Picture/ ← 图片资源
│ ├── MindPaw_oled/ ← 表情源文件(BMP)
│ └── PCtoLCD2002/ ← 图片转像素图工具
│
├── Docs/ ← 文档
│ ├── 01_Hardware_Guide.md ← 硬件设计导入指南
│ ├── 02_PCB_Fabrication.md ← PCB 免费打样指南
│ ├── 03_Image_Conversion.md ← OLED 表情制作指南
│ ├── 04_Firmware_Flashing.md ← 固件烧录指南
│ ├── 05_Assembly_Guide.md ← 结构组装与接线指南
│ ├── 06_Quick_Start.md ← 5 分钟快速上手
│ └── 07_API_Guide.md ← API 密钥获取指南
│
├── hardware-manifest.json ← 硬件、固件和复现路径清单
├── scripts/validate_project.py ← 自动校验清单和敏感配置
│
└── README.md ← 就是这个文件
🔌 硬件接线图
快速接线表
| ESP12F 引脚 | 接到哪里 | 注意事项 |
|---|---|---|
| GPIO0 (D3) | HLK-V20 TX | 语音模块的发送引脚 |
| GPIO2 (D4) | 按键 → GND | 启动时必须 HIGH |
| GPIO4 (D2) | OLED SDA | I2C 数据,需 4.7KΩ 上拉 |
| GPIO5 (D1) | OLED SCL | I2C 时钟,需 4.7KΩ 上拉 |
| GPIO14 (D5) | Servo 1 + OV2640 SCK | ⚠ 串联 1KΩ 与舵机共享 |
| GPIO12 (D6) | Servo 3 + OV2640 MISO | ⚠ 串联 1KΩ 与舵机共享 |
| GPIO13 (D7) | Servo 4 + OV2640 MOSI | ⚠ 串联 1KΩ 与舵机共享 |
| GPIO15 (D8) | OV2640 CS | ⚠ 必须 10KΩ 下拉到 GND |
| GPIO16 (D0) | 扬声器 (三极管驱动) | 或改接 Servo 2(二选一) |
| A0 | 电池分压检测 | — |
| TX/RX | USB-TTL 调试口 | 烧录和串口调试 |
⚠ 最重要的两条规则:
- GPIO15 必须接 10KΩ 下拉电阻到 GND — 否则 ESP8266 无法启动
- OV2640 的 SCK/MISO/MOSI 与舵机共享时串联 1KΩ — 防止信号冲突
完整接线图 → Docs/05_Assembly_Guide.md
📚 文档索引
| 如果你想... | 看这个 |
|---|---|
| 机器狗送人了,教他怎么玩 | 使用说明书(给不懂技术的人) |
| 5 分钟跑起来 | 快速上手指南 |
| 编译烧录代码 | 固件烧录指南 |
| 看懂/修改 PCB | 硬件设计导入指南 |
| 免费打样 PCB | PCB 打样指南 |
| 组装接线 | 结构组装与接线指南 |
| 改 OLED 表情 | 图片转换指南 |
| 申请 API 密钥 | API 密钥获取指南 |
| 所有引脚定义 | PIN_WIRING.md |
| 从零复现固件 Demo | MindPaw_main/README.md |
| 研究 AI Infra 和边缘-云 Agent | ai-infra/README.md |
| 导入/修改/打样 PCB | SCH&PCB/README.md |
🌿 分支与版本
仓库当前有两条远程分支,分别承担不同角色:
| 分支 | 状态 | 说明 |
|---|---|---|
main |
✅ 受保护候选(建议在 GitHub Settings → Branches 加规则) | 稳定发布线。当前是 MindPaw 2.0。 |
feature/2.0-streaming-recon |
✅ 已合并进 main(merge commit 4900898) |
2.0 感知层开发分支。代码已经在 main,可以安全删除。 |
推荐的 main 保护规则
GitHub 网页会提示 "Your main branch isn't protected"。建议在 Settings → Branches → Add rule 加:
- ✅ Require a pull request before merging
- ✅ Require status checks to pass before merging(至少勾上
docs-and-manifest+gateway-tests+recon-tests三个 job) - ✅ Do not allow force pushes
- ✅ Do not allow deletions
- ✅ Require linear history(可选;如果想保留
--no-ffmerge commit 就不要勾这个)
清理已合并的 feature 分支
git push origin --delete feature/2.0-streaming-recon
git branch -d feature/2.0-streaming-recon # 本地
发布历史
| Tag | Commit | 备注 |
|---|---|---|
v2.0.0 |
ac65e8c |
MindPaw 2.0 — 流式 3D 重建感知层 |
| (older) | — | MindPaw 1.x — 桌面狗 + 豆包对话 + 情感反应 |
详细 changelog 见 RELEASE_NOTES.md。
❓ 常见问题
我不会编程,能做出这个吗?
如果你没有嵌入式开发经验,建议至少先了解 Arduino 的基本用法(点亮 LED、串口输出)。然后跟着文档一步步来,遇到问题可以在 GitHub 提 Issue。
一定要用嘉立创打样 PCB 吗?
不是。你也可以用**洞洞板(万用板)**手焊。PCB 文件只是更方便、更可靠。第一次做建议用手焊,成功后再打样。
一定要 3D 打印外壳吗?
不是。你也可以用纸板、亚克力、积木搭一个身体。3D 模型只是我设计的参考外形。
可以用 ESP32 代替吗?
当然,而且推荐。 ESP32 引脚更多、内存更大、还有蓝牙。迁移方法:
platformio.ini中改board = nodemcu-32s- 引脚分配按 ESP32 重新调整
- 大部分代码无需修改
语音模块一定要用 HLK-V20 吗?
如果你已经有 LD3320,也可以接(需要 5 个 SPI 引脚)。但 HLK-V20 只需要 1 个引脚,识别率更高,推荐用它。
为什么 GPIO15 要下拉到 GND?
这是 ESP8266 的硬件要求:GPIO15 在启动时如果为 HIGH,芯片会进入测试模式导致无法正常工作。10KΩ 电阻下拉确保启动时是 LOW。
🧰 维护与贡献
MindPaw 同时包含固件、真实硬件、3D 模型和可选 AI Gateway。为了让贡献可以复现,提交前请先阅读:
Issue 不能只是一段无法验证的 AI 生成文本;作者必须亲自复现、提供日志或测量结果,并能回答维护者追问。AI 可以辅助检索、翻译和排版,但不能替代硬件安全审查和实验验证。
仓库的 Quality、Firmware build 和 Link check 工作流会自动检查项目清单、Gateway 契约、固件编译和文档链接。涉及舵机、供电、引脚或动作协议的改动必须附上断电措施和兼容性说明。
📜 许可证
- 软件代码(
MindPaw_main/src/):MIT License - 硬件设计(
SCH&PCB/):CC BY-NC 4.0 - 3D 模型(
3Dmodel/):CC BY-NC 4.0 - 文档(
Docs/和README.md):CC BY 4.0
简单说:代码随便用,硬件和 3D 模型可以个人使用、修改,但不要商用。
Made with ❤️ and a lot of coffee
如果你也做了这个项目,欢迎在 GitHub 上 @ 我!
