稚晖君 Dummy-Robot 全栈技术拆解(详细分册)
📌 本分册目标
Dummy-Robot 是稚晖君(彭志辉)开源的超迷你六轴机械臂,也是国内开源机器人里完成度最高的项目之一:3D 模型、PCB 硬件、STM32 固件、闭环步进驱动器、无线示教器、上位机,六层一次性全给。它和前两个项目的定位完全不同——前两个是「能照着做出来」的复刻项目,Dummy 是「拿来读架构」的教科书。
所以本分册不写「第几步拧哪颗螺丝」,而是把官方资料按 结构 → 电子 → 固件 → 算法 → 上位机 五层拆开讲:每层官方开源了什么、关键设计点在哪、为什么这么设计、你想动手时该从哪一层切进去。读完你应该能回答三个问题:这台机械臂凭什么只用 4 根线就能驱动 6 个关节?没有限位开关它怎么归零?解析逆解为什么必须满足 Pieper 判据?
🗂️ 官方仓库资料总览
仓库地址 github.com/peng-zhihui/Dummy-Robot,默认分支 main,GitHub 上万 Star。顶层只分六个目录,一层就把「做一台机械臂需要的所有东西」全包了:
| 目录 | 开源内容 |
|---|---|
| 0.SubModules | 子模块集合。Peak 无线示教器(基于 X-Track 项目)的软硬件工程以 submodule 形式挂在这里,clone 时必须带 --recursive 才拉得全。 |
| 1.Hardware | 硬件设计源文件:REF 核心板、REF 底板(装在机械臂底座内的主控板)、42/20 步进电机驱动器硬件工程、夹爪硬件设计、LED 灯环 PCB、无线空间定位控制器 PCB。 |
| 2.Firmware | 主控固件源码与驱动器固件:STM32 + FreeRTOS,核心是 Robot 机器人库(运动学解算)与 UserApp 上层应用;另含命令行调试工具 reftool。 |
| 3.Software | 上位机相关工程(含基于 Unity3D 的 DummyStudio 上位机工程文件)。 |
| 4.Model | 3D 模型设计源文件:整机模型、夹爪,以及便携手提箱模型。 |
| 5.Docs | 文档与图片资料(1.Images 子目录)。 |
README 里的「资料说明(更新日期 22-2-9)」还逐条列出了后来补上的文件——夹爪硬件设计、LED 灯环 PCB、无线空间定位控制器 PCB、REF 硬件设计、42/20 步进驱动固件、无线示教器 Peak、DummyStudio、reftool。连「怎么调电机」的调试工具都给齐了。
1.Hardware)是官方原始命名,不是本站改动——引用路径时注意保留点号与大小写。🔧 第一层 · 机械架构:步进电机 + 减速器
原版 Dummy 的关节方案是 步进电机 + 谐波减速模组,机体为铝 CNC 加工。谐波减速器是工业机械臂的标配(零背隙、高减速比、大扭矩密度),但二手件单个约 600 元,六个关节光减速器就是一笔不小的开支——这正是原版「成本与制作难度都比较高」的根本原因。
低成本替代方案已单独开源
作者把自研的小型摆线针轮减速器单独开在了另一个仓库 peng-zhihui/CycloidAcuratorNano。围绕它设计的「Dummy 青春版」改进点非常明确:
- 整机重新设计,改用 3D 打印制造(原版是铝 CNC),大幅降低门槛与成本
- 用自研摆线针轮减速器替代谐波减速器——这是成本下降的最大来源
- 软件与固件与原版通用、功能完全一致:换的是机械,控制栈一行不动
- 改进驱动器走线,改用 4P 接插件(电源 + CAN 总线)
- 整机成本目标压到 2000 元以内,并计划配套保姆级视频教程
💡 第二层 · 电子架构:四块板 + 一根 CAN 总线
整机电子部分被压到极简——核心只需四块板:REF 核心板(主控)、REF 底板(底座内的控制底板)、步进电机驱动器、Peak 无线示教器。其中 REF 核心板、REF 底板、Peak 三块均已开源。
为什么是四块板,而不是「主控 + 六组脉冲线」
传统 GRBL 类驱动方案的典型问题是:每个关节都要单独拉一组 step/dir 脉冲线,走线又多又乱,固件耦合也重。Dummy 换了个思路——每个关节挂一个闭环步进驱动器,六个驱动器串在同一根 CAN 总线上。于是整臂只需要 4 根线(电源正负 + CAN_H / CAN_L)就能贯穿所有关节,而且每个电机可工作在力矩 / 速度 / 位置 / 轨迹四种模式。
驱动器硬件参考了开源项目 unlir/XDrive(基于 STM32 的闭环步进驱动)。作者重做了 PCB、增加了 CAN 总线硬件支持,并完全重构了核心代码——C++11 重写、底层与 C 混编,硬件依赖彻底解耦,便于移植到其他 MCU。相对上游的主要改进:
- 添加 CAN 协议与 UART 协议的自定义模板,通信层可替换
- 添加模拟 EEPROM 参数存储,配置掉电不丢
- 支持任意位置设为零点,并保证双向半圈内即可归零
- 完全兼容 STM32 HAL 库,可用 STM32CubeMX 生成配置代码
- 二次开发只需关注
UserApp文件夹,不必碰底层
驱动器怎么用:按键逻辑
| 操作 | 作用 |
|---|---|
| 按住两键上电 | 自动编码器校准(首次上电必做,失败可重新校准) |
| 短按按键 1 | 使能 / 失能闭环(开环与闭环模式切换) |
| 长按按键 1 | 重启驱动器 |
| 短按按键 2 | 清除堵转保护 |
| 长按按键 2 | 目标值归零 |
官方已提供编译好的二进制固件可直接烧录:刷进去、校准编码器、按一下按键进入闭环,就能通过 CAN 或串口发指令控制。
💾 第三层 · 固件架构:FreeRTOS + Robot 核心库
主控固件从 LiteOS 移植到了 FreeRTOS,模块划分得相当规整,基本就是一个「可以当毕设模板用」的嵌入式工程结构:
| 模块 | 职责 |
|---|---|
| Core | ST 官方 HAL 库(芯片外设抽象) |
| Driver | ARM CMSIS 驱动 |
| Midwares | FreeRTOS 支持包 |
| BSP | 板级驱动:OLED、IMU、LED、蜂鸣器、非易失存储等 |
| 3rdParty | 第三方库:U8G2 图形库、Fibre 序列化 / 反序列化库 |
| Robot | 核心机器人库:运动学算法与电机驱动封装 |
| UserApp | 上层应用,可基于提供的 API 自行开发 |
一个很说明问题的工程细节:板载 OLED 由 Arduino 的 U8G2 库移植而来,因为 STM32 的硬件 I2C 存在 BUG,作者改用软件 I2C,实测帧率反而更高。这种「官方外设有坑、绕过去更快」的判断,只有真做过项目的人才会给出。
DummyRobot 类:一台机械臂的全部定义
固件里 DummyRobot 这个类就是整机的完整抽象。初始化它需要两类信息:
- 六个步进电机驱动的信息:CAN 节点 ID、是否反向、减速比、运动限制范围
- 机械臂自身的 DH 参数:决定运动学模型的几何关系
关键约束在这里:机械臂构型必须满足 Pieper 判据(三个相邻关节轴交于一点,或三条轴线平行),才能解出解析解。换句话说,想用这套固件驱动你自制的六轴臂,机构设计阶段就得按 Pieper 判据来搭,否则逆解只能退回数值迭代。移植时只需替换 DH 参数——但前提是你的结构本身撑得住。
🎯 第四层 · 运动控制算法
正逆解:DH 参数 + 多解择优
正解与逆解都用传统 DH 参数计算。逆解一般会得到 8 组解(对应「左/右手 × 肘上/下 × 腕翻转」的构型组合),Dummy 的选解策略是:取「上一姿态与目标姿态之间、六个关节变化最大角中最小」的那一组作为 config。翻译成人话就是——不走回头路,永远挑关节动得最少的解,保证姿态切换时机械臂不会突然甩一下。
MoveJ 同步:梯形加减速让六轴同时到位
拿到目标角度后,关节角要通过梯形加减速曲线做速度与位置规划。MoveJ 的同步逻辑非常经典,值得直接抄:
- 差分计算出六个关节各自要转过的角度,取其中最大的那个角 θ
- 按设定的 JointSpeed 算出转过 θ 所需的时间(含加速段与减速段)
- 其余五个电机按这个统一时间反算各自的加减速度与最高速度
- 结果:角度小的关节自动跑得慢一些,六轴同时启动、同时停止
CAN 广播同步:命令同时到达,动作同时开始
六个电机挂在同一根 CAN 总线上,每个驱动器既接收自己的 ID,也接收 0 号 ID 的广播。控制器的发令流程是:先给各关节发带自身 ID 的位置指令(驱动器收到后只存进影子寄存器,先不动),最后再发一帧 0 号广播同步信号——所有电机在同一时刻开始运动。这是分布式系统里最经典的「栅栏(barrier)」思路,用在这里刚刚好。
🧭 零点校准:没有限位开关,怎么知道自己在哪
这是 Dummy 最值得单独拎出来讲的设计。背景问题:绝对值编码器的位置只在单圈内有效,而关节经过减速器后要转很多圈才能走完全行程。工业上的常规解法有两种——做 输出端编码(精度直接降 k 倍,k 为减速比),或者用 双编码器 / 低功耗编码器 + 电池(成本与体积都上去了)。
Dummy 结构太紧凑,两条路都不好走,于是用了第三种办法:
- 上电后利用电流环做低力矩的「无零点定向运动」——轻轻把关节推向机械限位,靠碰撞确定粗零点,不装任何限位开关。
- 再根据单圈绝对值编码器在限位附近精调零点。
为什么能保证精度?因为机械限位被设计在 12°(= 360° / 30)的范围内,而这个范围正好落在单圈绝对值编码器的有效精度区间内。于是零点「无误差,且几乎不受加工精度影响」——CNC 件公差大一点也不会毁掉归零精度。用一个巧妙的机械约束,绕开了昂贵的传感方案。
🕹️ 第五层 · 指令模式与上位机
三种指令模式
| 模式 | 发送频率 | 执行方式 | 可打断 | 典型场景 |
|---|---|---|---|---|
| SEQ | 随机 · 低(<5 Hz) | FIFO 队列依次执行 | 否 | 视觉抓取、码垛等「一条条排队做」的任务 |
| INT | 随机 · 不限 | 指令覆盖,立即执行 | 是 | 动作同步等实时控制 |
| TRJ | 固定 · 高(200 Hz) | 自动插值,固定周期执行 | 否 | 3D 打印、雕刻、绘画等连续轨迹(官方标注 ToDo) |
指令可通过 USB、串口、CAN 三种通道接收。这套 SEQ / INT / TRJ 的划分,与工业控制器里的「队列指令 / 实时指令 / 轨迹流」基本同构——读懂了它,再翻工业机器人手册会轻松很多。
上位机与仿真
- 作者最早基于 RoboDK 做仿真,并为其开发了连接 Dummy 的 Driver(把原版 TCP 接口改成串口,并兼容 Dummy 协议)
- 因为 RoboDK 收费,后来改用 Unity3D 自研上位机 DummyStudio——目标是做成类似 RoboDK 的通用免费软件,工程文件在仓库里
- 上位机暂未开源(功能仍在添加),所以「零硬件跑仿真」这条路目前不如前两个项目顺畅
🪜 复刻路线怎么选
| 维度 | 原版 Dummy | 低成本路线(青春版方向) |
|---|---|---|
| 机体 | 铝 CNC 加工 | 3D 打印 |
| 减速器 | 谐波减速模组(二手约 600 元 / 个) | 自研摆线针轮减速器(CycloidAcuratorNano) |
| 成本 | 高(数千元级) | 目标 2000 元以内 |
| 精度 | 高(谐波零背隙) | 略降,功能一致 |
| 软件固件 | —— | 与原版完全通用,换的只是机械与走线 |
| 适合谁 | 有机加工资源,想做高精度样机 | 个人创客、3D 打印玩家、预算有限的学生 |
4.Model 下载模型,在电脑里量尺寸、看结构 → 读 2.Firmware 的 Robot 库搞懂 DH 与解析逆解 → 决定走哪条路线 → 再动手。跳过前两步直接买件,大概率会卡在「装完了动不了、又不知道算法哪出错」。⚠️ 复刻前必须知道的三件事
- 仓库没有 LICENSE 文件:不包含任何许可证说明,也就没有默认的开源授权。自己研究学习没问题,但商用、二次分发、或把代码与模型用于公开产品之前,请先联系原作者确认授权——这一点与前两个项目(GPL-3.0 / 官方免费公开)有本质区别。
- 难度是全栈级的:会同时碰到机加工(或 3D 打印)、PCB 设计与打样、STM32 嵌入式开发、CAN 总线调试、运动学算法。它不是「照着 PDF 装一遍」的项目,而是「你得先会这些东西」的项目。
- 成本先算清再动手:原版谐波方案单是减速器就超出多数 DIY 预算;即便走低成本路线,也建议先按 CycloidAcuratorNano 的物料表算一遍,再决定采购规模。
💡 要点提示
- clone 记得带子模块:用
git clone --recursive,否则0.SubModules里的 Peak 示教器工程是空的。 - 先读 README 的「资料说明」:作者会在这里标注后来补上了哪些文件(夹爪、灯环 PCB、示教器、reftool 等),比翻目录找快得多。
- Pieper 判据要在设计阶段就满足:如果自制结构的三个相邻关节轴既不交于一点、也不平行,解析逆解直接无解,只能改用数值解法——这是最容易在动手后才暴露、代价最大的坑。
- 驱动器编码器校准是首次上电的必做项:按住两键上电进入校准,失败可重来;没校准就去调闭环,会怎么调都不对。
- 理解「影子寄存器 + 广播同步」:自己写多轴控制时,如果六个轴动作总是有先后,多半就是漏了这一层——先缓存、再统一触发,是分布式执行的通用套路。
- 别指望固件做动力学:官方明确标注动力学仍在开发中。要重力补偿、要力矩控制,得自己补,或换框架计算(可参考本站项目 03 里的 Drake 真实动力学做法)。
- 想找社区复刻经验:B 站与 CSDN 上有不少「复刻 Dummy 保姆教程」类文章,能补上官方没写的加工与装配细节——但结构与参数请一律以官方仓库为准。
🔗 官方资料直达
- Dummy-Robot 主仓库0.SubModules / 1.Hardware / 2.Firmware / 3.Software / 4.Model / 5.Docs 六个顶层目录
- 1.Hardware · 硬件设计源文件REF 核心板 / REF 底板 / 42·20 步进电机驱动器 / 夹爪 / LED 灯环 PCB
- 2.Firmware · 主控固件源码STM32 + FreeRTOS,Robot 核心运动学库 + UserApp
- 4.Model · 3D 模型设计源文件整机模型、夹爪、便携手提箱
- CycloidAcuratorNano · 自研摆线针轮减速器低成本复刻路线的关键零件,3D 打印 + 亚克力 / PC 切割
- 🎬 B 站 ·《我造了一台钢铁侠的机械臂》作者的官方项目演示与讲解视频
- 🎬 YouTube · I made a DUMMY ROBOTIC ARM from scratch英文版项目视频
❓ 常见问题
Dummy 和前两个项目(SmallRobotArm / AR4)该怎么选?
按目的选:想真的做出一台、预算有限 → 项目 02(步进 + Mega + 打印件,资料最齐、成本最低);想理解工业级结构与运动学 → 项目 03(AR4 有完整 BOM、URDF 与官方控制软件,站内还有实时 3D 实验室可玩);想学全栈架构、PCB 与嵌入式 → 项目 04(Dummy,读的价值远大于复刻)。
能不能用这套固件驱动我自己的六轴机械臂?
理论上可以:DummyRobot 类初始化时填入电机驱动信息(CAN ID、反向、减速比、限位)与你自己机构的 DH 参数即可。但有硬前提——机构必须满足 Pieper 判据才能解解析解;另外驱动器是配套的 CAN 闭环步进方案,换成别的驱动得自己适配协议层。
为什么整机只要 4 根线?
因为每个关节用的是一体化闭环步进驱动器,位置环就在关节本地跑,主控只通过 CAN 总线发目标值——电源正负 + CAN_H / CAN_L 四根线就能串完所有关节。对比传统「主控拉六组 step/dir 脉冲线」的方案,走线量与固件耦合都小得多。
官方上位机没开源,那还能怎么仿真?
README 说明 DummyStudio 上位机「功能仍在添加」所以暂未开源。当前可用路径:用 4.Model 的 3D 模型导入 RoboDK / Unity 等工具自行搭建可视化;或参考本站项目 03 的做法,把 URDF 丢进 Drake 跑真实动力学。
✅ 下一步
回到「做自己的机器人」栏目项目 04,那里有官方资料总入口、硬件与固件目录、3D 模型、以及低成本复刻路线的直达卡片;想动手前,建议先把本节五层过一遍,再决定走原版还是青春版。