JBR-001 开源 3D 打印桌面机器人概述
TL;DR
JBR-001 是一款完全开源、可 3D 打印的桌面机器人,基于 Arduino UNO Q 构建,配备三个舵机、一个摄像头、距离传感器、蜂鸣器以及一个 8×13 点阵显示屏,让爱好者能够进行边缘 AI、计算机视觉和物理交互的实验。
什么是 JBR-001?
JBR-001 是一个紧凑的、可 3D 打印的机器人平台,专为机器人技术、感知和边缘 AI 的快速原型设计而开发。所有机械部件、固件和 CAD 文件均在开源许可下发布,物料清单由廉价的现成组件组成:
- Arduino UNO Q(中央控制器)
- 用于摄像头连接的 USB-C 集线器
- 一个摄像头模块(前置)
- Modulino 距离传感器(后置)
- Modulino 蜂鸣器(音频反馈)
- 三个爱好级舵机(头部和双臂)
- 用于舵机的外部 5 V/2 A 电源
- 托管在 GitHub 上的完整 STL 文件
该机器人可以问候用户、显示心跳动画、通过距离传感器检测物体,并在板载运行计算机视觉模型。
核心架构与接线
Arduino UNO Q 驱动所有外设并运行计算机视觉模型的推理。关键接线规则如下:
- 头部舵机 → 引脚 9
- 左臂舵机 → 引脚 10
- 右臂舵机 → 引脚 11
- 所有舵机 → 外部 5 V 电源(切勿直接从 UNO Q 供电)
- 外部电源接地 ↔ UNO Q 接地(公共参考点)
- Modulino 距离传感器与蜂鸣器 → UNO Q 引脚(如接线图所示)
- 摄像头 → USB-C 集线器 → UNO Q
重要提示: 将舵机电源直接连接到 UNO Q 会导致电压骤降和运动不稳定;请务必使用专用电源并共地。
机械组装
机器人主体由 3D 打印部件组成,用于容纳电子元件和舵机。组装步骤:
- 打印所有 STL 文件。
- 安装头部舵机(水平旋转)和手臂舵机(垂直运动),确保轴对齐。
- 将摄像头安装在头部,距离传感器安装在后部。
- 在合上外壳之前,将线缆穿过打印的通道。
- 固定 Arduino UNO Q 并连接外部电源。
项目页面提供了完整的视频演示。
显示动画(心跳)
8×13 LED 矩阵在空闲时显示跳动的心脏。两个位图数组(heartSmall 和 heartLarge)在一个定时状态机中渲染,该状态机在更新时不会阻塞传感器读取:
unsigned long heartbeatTimer = 0;
int heartbeatStep = 0;
void heartbeat() {
unsigned long now = millis();
switch (heartbeatStep) {
case 0: matrix.renderBitmap(heartLarge,8,13); heartbeatTimer=now; heartbeatStep=1; break;
case 1: if (now-heartbeatTimer>=120) { matrix.renderBitmap(heartSmall,8,13); heartbeatTimer=now; heartbeatStep=2; }
case 2: if (now-heartbeatTimer>=100) { matrix.renderBitmap(heartLarge,8,13); heartbeatTimer=now; heartbeatStep=3; }
case 3: if (now-heartbeatTimer>=160) { matrix.renderBitmap(heartSmall,8,13); heartbeatTimer=now; heartbeatStep=4; }
case 4: if (now-heartbeatTimer>=700) { heartbeatStep=0; }
}
}
这种非阻塞设计让机器人能够同时监控距离传感器和摄像头。
蜂鸣器音频反馈
当距离传感器检测到附近物体时,一段简单的四音调旋律会发出友好的问候:
void playHello() {
buzzer.tone(523,120); delay(150);
buzzer.tone(659,120); delay(150);
buzzer.tone(784,180); delay(210);
buzzer.tone(1047,250); delay(270);
}
开发者可以用自定义的音调序列替换该旋律,以指示不同的机器人状态。
接近感应
后置距离传感器持续报告距离。典型的交互模式如下:
if (distanceSensor.available()) {
float d = distanceSensor.get();
if (d < DETECTION_DISTANCE && !objectDetected) {
objectDetected = true;
playHello();
}
if (d > RESET_DISTANCE) objectDetected = false;
}
调整 DETECTION_DISTANCE 和 RESET_DISTANCE 以调节响应灵敏度。
舵机控制指南
舵机通过标准的 Servo.write(angle) 调用进行驱动。推荐做法:
- 将运动限制在打印关节的机械范围内(避免 0-180° 的全行程扫描)。
- 使用细微、富有表现力的动作(例如 10-30° 的头部转动)以实现自然行为。
- 始终使用外部电源为舵机供电并保持共地。
边缘 AI:在 UNO Q 上运行计算机视觉
摄像头将 96×96(或类似)帧发送到 Arduino UNO Q,由 Edge Impulse 生成的模型执行推理。工作流程如下:
- 数据集获取 – 使用 VisionDatasets.com 下载合成数据集(例如 Arduino Modulino 图像)。
- Edge Impulse 导入 – 通过提供的 API 密钥直接上传数据集。
- 模型训练 – 配置图像分类脉冲;Edge Impulse 处理训练和验证。
- 部署 – 将模型导出为 C++ 库并集成到 JBR-001 固件中。
- 推理循环 – 捕获一帧,运行
run_classifier(),并根据预测的类别采取行动。
因此,机器人可以识别特定物体(例如不同的 Modulino)并触发协调动作,如转动头部、抬起手臂、播放声音或更改显示内容。
应用示例:Modulino 识别
作者训练了一个模型来区分几种 Arduino Modulino 板。当 Modulino 出现在机器人面前时,会发生以下序列:
- 摄像头捕获图像。
- Edge Impulse 模型预测 Modulino 类别。
- 固件将该类别映射到一种行为(例如:转头 + 抬臂 + 蜂鸣)。
由于数据集包含了多样的光照、姿势和背景,模型能够泛化到现实世界的捕获场景中。
扩展 JBR-001
该平台特意设计为模块化:
- 更换摄像头以获得更高的分辨率或红外功能。
- 添加传感器(例如温度、IMU),通过连接到备用的 UNO Q 引脚。
- 更换显示屏,使用更大的矩阵或 OLED 以获得更丰富的 UI。
- 训练新模型,使用 VisionDatasets.com 或自定义图像识别任何物体集。
- 编程自定义行为,在 Arduino IDE 或 PlatformIO 中利用相同的非阻塞循环结构。
社区反响
Hacker News 上的讨论强调了几个用户观点:
- 对开源性质和适合家庭的构建体验表示积极热情(评论者 salamachinas)。
- 对 UNO Q 的成本和有限的克隆版供应表示担忧(mrheosuper)。
- 与 Otto DIY 等早期开源套件进行比较,指出商业化趋势(phil42)。
- 对机器人的美学和实用性发表了轻松的评论(shevy-java, krisoft)。
这些评论强调了该项目的教育价值,以及保持硬件价格合理且真正开源的重要性。
结论
JBR-001 证明了功能齐全、具备 AI 能力的桌面机器人可以使用廉价的 3D 打印部件和单块 Arduino UNO Q 板构建。其开源设计、完整的固件示例以及与 Edge Impulse 的无缝集成,使其成为学习机器人技术、计算机视觉和边缘 AI 的理想沙盒。
Sources
相关
- 项目
- 项目
- 项目
- 项目
- 项目