Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

硬件外设设计:ZeroClaw

ZeroClaw 使微控制器(MCU)和单板计算机(SBC)能够动态解释自然语言命令,生成特定于硬件的代码,并实时执行外围设备交互。

1. 视觉

目标: ZeroClaw 作为一个硬件感知的 AI 代理,能够:

  • 通过频道(如 WhatsApp、Telegram)接收自然语言触发指令(例如“移动 X 轴”、“打开 LED”)
  • 获取准确的硬件文档(数据手册、寄存器映射)
  • 使用大语言模型(如 Gemini、本地开源模型)合成 Rust 代码/逻辑
  • 执行用于操作外设(GPIO、I2C、SPI)的逻辑
  • 持久化优化后的代码,以便将来复用

心智模型: ZeroClaw = 理解硬件的大脑。外设 = 它控制的臂和腿。

2. 两种操作模式

模式 1:边缘原生(独立)

目标: 支持 Wi-Fi 的板子(ESP32、树莓派)。

ZeroClaw 直接在设备上运行。该板卡会启动一个 gRPC/nanoRPC 服务器,并与外围设备在本地进行通信。

ZeroClaw on ESP32 / Raspberry Pi (Edge-Native)

  Channels (WhatsApp, Telegram)
        │
        ▼
  Agent Loop (LLM calls) ──► RAG: datasheets, register maps ──► LLM context
        │
        ▼
  Code synthesis ──► Wasm / dynamic exec ──► GPIO / I2C / SPI ──► persist
        │
        ▼
  gRPC/nanoRPC server ◄──► Peripherals (GPIO, I2C, SPI, sensors, actuators)

工作流程:

  1. 用户通过 WhatsApp 发送:“打开引脚 13 上的 LED”
  2. ZeroClaw 会获取特定板子的文档(例如 ESP32 GPIO 映射)
  3. LLM 生成 Rust 代码
  4. 代码在沙箱中运行(Wasm 或动态链接)
  5. GPIO 被切换;结果返回给用户
  6. 优化后的代码会被持久化,以便用于未来的“打开 LED”请求

所有操作均在设备本地完成。 无需主机。

模式 2:主机中介(开发/调试)

**目标:**通过 USB / J-Link 连接到主机的硬件。

ZeroClaw 在主机上运行,并与目标设备保持硬件感知的连接。用于开发、内省和烧录。

  ZeroClaw on Mac (host)              STM32 Nucleo-F401RE (or other MCU)
  ─────────────────────              ──────────────────────────────────
  - Channels                         - Memory map
  - LLM                              - Peripherals (GPIO, ADC, I2C)
  - Hardware probe        ◄────────► - Flash / RAM
  - Flash / debug
                       USB / J-Link
                       VID/PID discovery

工作流程:

  1. 用户通过 Telegram 发送:“这个 USB 设备上有哪些可读的内存地址?”
  2. ZeroClaw 识别连接的硬件(VID/PID、架构)
  3. 执行内存映射;建议可用的地址空间
  4. 将结果返回给用户

或者:

  1. 将此固件刷写到 Nucleo
  2. ZeroClaw 通过 OpenOCD 或 probe-rs 写入/烧录
  3. 确认成功

或者:

  1. ZeroClaw 自动发现:“STM32 Nucleo 位于 /dev/ttyACM0,ARM Cortex-M4”
  2. 建议:“我可以读写 GPIO、ADC 和闪存。你想做什么?”

模式比较

方面边缘原生主机介导
ZeroClaw 运行在设备(ESP32、RPi)主机(Mac、Linux)
硬件链接本地(GPIO、I2C、SPI)USB, J-Link
LLM在设备上或云端(Gemini)主机(云端或本地)
用例生产环境,独立部署开发、调试、内省
频道WhatsApp 等(通过 WiFi)Telegram、命令行界面(CLI)等。

3. 传统/更简单的模式(LLM 边缘部署之前)

对于没有 WiFi 的板子,或者在 Edge-Native 完全就绪之前:

模式 A:主机 + 远程外设(通过串口连接 STM32)

主机运行 ZeroClaw;外设运行精简固件。通过串口传输简单的 JSON 数据。

模式 B:RPi 作为主机(原生 GPIO)

ZeroClaw 在树莓派上运行;通过 rppal 或 sysfs 访问 GPIO。无需单独的固件。

4. 技术要求

需求描述
语言纯 Rust 实现。在嵌入式目标平台(如 STM32、ESP32)上适用 no_std
通信用于低延迟命令处理的轻量级 gRPC 或 nanoRPC 堆栈。
动态执行安全地运行即时生成的 LLM 逻辑:使用 Wasm 运行时进行隔离,或在支持的情况下使用动态链接。
文档检索RAG(检索增强生成)管道,用于将数据表片段、寄存器映射和引脚图注入到 LLM 上下文中。
硬件发现基于 VID/PID 的 USB 设备识别;架构检测(ARM Cortex-M、RISC-V 等)。

RAG 管道(数据表检索)

  • 索引: 数据手册、参考手册、寄存器映射(已预转换的 .md / .txt → 分块、嵌入)。
  • 检索: 在用户查询(如“打开 LED”)时,获取相关片段(例如目标板的 GPIO 部分)。
  • 注入: 添加到 LLM 系统提示或上下文中。
  • 结果: LLM 生成准确、针对特定板子的代码。

动态执行选项

选项优点缺点
Wasm沙盒化、可移植、无 FFI开销;Wasm 对硬件访问受限
动态链接原生速度,完全硬件访问特定于平台的;安全注意事项
解释型 DSL安全、可审计较慢;表达能力有限
预编译模板快速、安全灵活性较低;需要模板库

建议: 从预编译模板和参数化入手;待稳定后,再演进至使用 Wasm 实现用户自定义逻辑。

5. CLI 和配置

有关 zeroclaw hardware / zeroclaw peripheral 子命令的详细信息,请参阅 CLI 参考;有关 [peripherals][[peripherals.boards]] 字段的配置说明,请参阅 配置参考

6. 架构:外设作为扩展点

新特性:Peripheral

#![allow(unused)]
fn main() {
/// 一个将功能作为工具暴露的硬件外设。
#[async_trait]
pub trait Peripheral: Send + Sync {
    fn name(&self) -> &str;
    fn board_type(&self) -> &str;  // 例如 "nucleo-f401re"、"rpi-gpio"
    async fn connect(&mut self) -> anyhow::Result<()>;
    async fn disconnect(&mut self) -> anyhow::Result<()>;
    async fn health_check(&self) -> bool;
    /// 该外设提供的工具(gpio_read、gpio_write、sensor_read 等)
    fn tools(&self) -> Vec<Box<dyn Tool>>;
}
}

流程

  1. 启动: ZeroClaw 加载配置,检测到 peripherals.boards
  2. 连接: 为每个板子创建一个 Peripheral 实现,并调用 connect()
  3. 工具: 从所有连接的外设中收集工具;与默认工具合并。
  4. **Agent 循环:**Agent 可以调用 gpio_writesensor_read 等函数,这些函数会委托给外设处理。
  5. 关闭: 对每个外围设备调用 disconnect()

板级支持

开发板通过规范注册表中的 USB VID/PID 进行标识:

开发板架构USB VID:PID
nucleo-f401reARM Cortex-M40x0483:0x374b
nucleo-f411reARM Cortex-M40x0483:0x3748
arduino-unoAVR ATmega328P0x2341:0x0043
arduino-unoArduino Uno Q / ATmega328P0x2341:0x0078
arduino-megaAVR ATmega25600x2341:0x0042
cp2102USB-UART 桥接器0x10c4:0xea60
cp2102nUSB-UART 桥接器0x10c4:0xea70
esp32ESP32 (CH340)0x1a86:0x7523
esp32ESP32 (CH340)0x1a86:0x55d4

每个连接的板卡都通过某个子系统传输通道进行驱动:

传输描述
serial基于 USB CDC 串口的换行符分隔 JSON
swdSWD 调试探针 (probe-rs)
uf2UF2 大容量存储固件烧录
native直接 Linux GPIO/I2C/SPI(rppal、sysfs)

每个板卡提供的基本工具都列在硬件子系统 → 运行时工具中。

7. 通信协议

gRPC / nanoRPC(边缘原生,主机中介)

用于 ZeroClaw 与外设之间的低延迟、类型化 RPC:

  • nanoRPCtonic(gRPC):由 Protobuf 定义的服务。
  • 方法:GpioWriteGpioReadI2cTransferSpiTransferMemoryReadFlashWrite 等。
  • 启用从 .proto 文件进行流式双向调用和代码生成。

串行传输(主机中介,旧版)

适用于不支持 gRPC 的板子的简单 JSON 串行通信:

请求(主机 → 外设):

{"id":"1","cmd":`gpio_write`,"参数":{固定:13,“值”:1}}

响应(外设 → 主机):

{"id":"1",“好的”:true,"结果":完成}

8. 固件(独立仓库或 Crate)

  • zeroclaw-firmwarezeroclaw-peripheral:一个独立的 crate/workspace。
  • 目标平台:thumbv7em-none-eabihf(STM32)、armv7-unknown-linux-gnueabihf(树莓派)等。
  • 在 STM32 上使用 embassy 或 Zephyr。
  • 实现上述协议。
  • 用户将此固件刷写到开发板上;ZeroClaw 连接并发现其功能。

9. 能力层

该子系统采用分层构建,每一层均可独立使用。与其在此跟踪各阶段状态(随着工作的推进会逐渐失真),不如列出各层:

  • 框架。 Peripheral trait、配置模式以及 zeroclaw peripheral CLI。--peripheral 标志将开发板接入到 agent 中。

  • 主机协调发现。 zeroclaw hardware discover 通过 VID/PID 枚举 USB 设备;板卡注册表将其映射到架构和名称;zeroclaw hardware introspect <path> 报告内存映射和外设列表。

  • 串行 / 探针传输。 SerialPeripheral 通过 USB CDC 承载 JSON 协议;probe 功能添加了用于刷写、内存映射和内存读取的 probe-rs SWD(参见 hardware_* 工具)。

  • RAG 流水线。 数据手册经过索引,并在硬件查询时注入到 LLM 上下文中。

    用法: zeroclaw config set peripherals.datasheet-dir docs/datasheets。放置以板子命名的 .md.txt 文件(例如 nucleo-f401re.mdrpi-gpio.md)。位于 _generic/ 目录中或名为 generic.md 的文件适用于所有板子。通过关键词匹配检索内容块,并将其注入到用户消息上下文中。

  • 边缘原生(Raspberry Pi)。 ZeroClaw 通过 rppal 在 Pi 上运行,原生支持 GPIO(peripheral-rpi 特性)。

  • ESP32。 通过串行传输由主机中介,使用与 STM32 相同的 JSON 协议。ESP32 开发板通过其 CH340 USB VID/PID 注册在登记表中。

    用法:firmware/esp32 烧录到 ESP32,并在配置中添加 board = "esp32"transport = "serial"path = "/dev/ttyUSB0"

  • 动态执行。 LLM 生成的逻辑通过参数化模板运行,而沙盒化的 Wasm 运行时则是用户自定义逻辑的长期发展方向。

10. 安全注意事项

  • 串行路径: 验证 path 是否在允许列表中(例如 /dev/ttyACM*/dev/ttyUSB*);绝不允许任意路径。
  • GPIO: 限制暴露的引脚;避免使用电源/复位引脚。
  • 外设上不存储密钥: 固件不应存储 API 密钥;主机负责处理身份验证。

11. 非目标(暂时)

  • 在裸机 STM32 上_直接_运行完整的 ZeroClaw(无 WiFi、RAM 有限),请改用 Host-Mediated 方式
  • 实时性保证:外设采用尽力而为方式处理
  • 来自 LLM 的任意本机代码执行:建议使用 Wasm 或模板

12. 相关文档

13. 参考文献

14. 原始提示摘要

像 ESP、Raspberry Pi 或带 WiFi 的开发板可以连接到 LLM(Gemini 或开源模型)。ZeroClaw 在设备上运行,创建自己的 gRPC,启动它,并与外设进行通信。用户通过 WhatsApp 提问:“移动 X 机械臂”或“打开 LED”。ZeroClaw 获取准确的文档,编写代码,执行代码,以最优方式存储,运行它,并点亮 LED,这一切都在开发板上完成。

对于通过 USB/J-Link 连接到我的 Mac 的 STM Nucleo:ZeroClaw 可以从我的 Mac 访问硬件,在设备上安装或写入所需内容,然后返回结果。例如:“嘿 ZeroClaw,这个 USB 设备上有哪些可用/可读地址?”它可以判断连接了哪些设备以及连接位置,并给出建议。