English
🤖 LateAI
首页做自己的机器人 › Dummy-Robot 全栈技术拆解(详细分册)
🦾

稚晖君 Dummy-Robot 全栈技术拆解(详细分册)

Peng Zhihui's Dummy-Robot — Structure / Hardware / Firmware / Host Software, Explained
📶 高难 · 全栈 ⏱ 读懂 1~2 晚 💰 资料免费 🦾 DIY · 站内原创

📌 本分册目标

Dummy-Robot 是稚晖君(彭志辉)开源的超迷你六轴机械臂,也是国内开源机器人里完成度最高的项目之一:3D 模型、PCB 硬件、STM32 固件、闭环步进驱动器、无线示教器、上位机,六层一次性全给。它和前两个项目的定位完全不同——前两个是「能照着做出来」的复刻项目,Dummy 是「拿来读架构」的教科书

所以本分册不写「第几步拧哪颗螺丝」,而是把官方资料按 结构 → 电子 → 固件 → 算法 → 上位机 五层拆开讲:每层官方开源了什么、关键设计点在哪、为什么这么设计、你想动手时该从哪一层切进去。读完你应该能回答三个问题:这台机械臂凭什么只用 4 根线就能驱动 6 个关节?没有限位开关它怎么归零?解析逆解为什么必须满足 Pieper 判据?

💡 本站分册是基于官方公开资料的原创中文技术整理,不转载原仓库图文与源码。Dummy-Robot 仓库内没有 LICENSE 文件,动手复刻前请务必先联系原作者确认授权范围(详见文末「复刻前必须知道的三件事」)。

🗂️ 官方仓库资料总览

仓库地址 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.Model3D 模型设计源文件:整机模型、夹爪,以及便携手提箱模型。
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 打印 + 摆线针轮减速器」是唯一现实可行的入口。原版谐波方案更适合当作结构设计的参考范本来读,而不是第一台真机。

💡 第二层 · 电子架构:四块板 + 一根 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。相对上游的主要改进:

驱动器怎么用:按键逻辑

操作作用
按住两键上电自动编码器校准(首次上电必做,失败可重新校准)
短按按键 1使能 / 失能闭环(开环与闭环模式切换)
长按按键 1重启驱动器
短按按键 2清除堵转保护
长按按键 2目标值归零

官方已提供编译好的二进制固件可直接烧录:刷进去、校准编码器、按一下按键进入闭环,就能通过 CAN 或串口发指令控制。

💾 第三层 · 固件架构:FreeRTOS + Robot 核心库

主控固件从 LiteOS 移植到了 FreeRTOS,模块划分得相当规整,基本就是一个「可以当毕设模板用」的嵌入式工程结构:

模块职责
CoreST 官方 HAL 库(芯片外设抽象)
DriverARM CMSIS 驱动
MidwaresFreeRTOS 支持包
BSP板级驱动:OLED、IMU、LED、蜂鸣器、非易失存储等
3rdParty第三方库:U8G2 图形库、Fibre 序列化 / 反序列化库
Robot核心机器人库:运动学算法与电机驱动封装
UserApp上层应用,可基于提供的 API 自行开发

一个很说明问题的工程细节:板载 OLED 由 Arduino 的 U8G2 库移植而来,因为 STM32 的硬件 I2C 存在 BUG,作者改用软件 I2C,实测帧率反而更高。这种「官方外设有坑、绕过去更快」的判断,只有真做过项目的人才会给出。

DummyRobot 类:一台机械臂的全部定义

固件里 DummyRobot 这个类就是整机的完整抽象。初始化它需要两类信息:

关键约束在这里:机械臂构型必须满足 Pieper 判据(三个相邻关节轴交于一点,或三条轴线平行),才能解出解析解。换句话说,想用这套固件驱动你自制的六轴臂,机构设计阶段就得按 Pieper 判据来搭,否则逆解只能退回数值迭代。移植时只需替换 DH 参数——但前提是你的结构本身撑得住。

🎯 第四层 · 运动控制算法

正逆解:DH 参数 + 多解择优

正解与逆解都用传统 DH 参数计算。逆解一般会得到 8 组解(对应「左/右手 × 肘上/下 × 腕翻转」的构型组合),Dummy 的选解策略是:取「上一姿态与目标姿态之间、六个关节变化最大角中最小」的那一组作为 config。翻译成人话就是——不走回头路,永远挑关节动得最少的解,保证姿态切换时机械臂不会突然甩一下。

MoveJ 同步:梯形加减速让六轴同时到位

拿到目标角度后,关节角要通过梯形加减速曲线做速度与位置规划。MoveJ 的同步逻辑非常经典,值得直接抄:

  1. 差分计算出六个关节各自要转过的角度,取其中最大的那个角 θ
  2. 按设定的 JointSpeed 算出转过 θ 所需的时间(含加速段与减速段)
  3. 其余五个电机按这个统一时间反算各自的加减速度与最高速度
  4. 结果:角度小的关节自动跑得慢一些,六轴同时启动、同时停止
💡 这就是「联动」与「各转各的」的区别。少了这一步,机械臂动起来会像六个人各自拽着一个关节。

CAN 广播同步:命令同时到达,动作同时开始

六个电机挂在同一根 CAN 总线上,每个驱动器既接收自己的 ID,也接收 0 号 ID 的广播。控制器的发令流程是:先给各关节发带自身 ID 的位置指令(驱动器收到后只存进影子寄存器,先不动),最后再发一帧 0 号广播同步信号——所有电机在同一时刻开始运动。这是分布式系统里最经典的「栅栏(barrier)」思路,用在这里刚刚好。

⚠️ 官方 README 明确说明:动力学部分仍在开发中,尚未完全实现。所以别指望这套固件自带重力补偿——它做的是运动学 + 轨迹规划 + 电机闭环。

🧭 零点校准:没有限位开关,怎么知道自己在哪

这是 Dummy 最值得单独拎出来讲的设计。背景问题:绝对值编码器的位置只在单圈内有效,而关节经过减速器后要转很多圈才能走完全行程。工业上的常规解法有两种——做 输出端编码(精度直接降 k 倍,k 为减速比),或者用 双编码器 / 低功耗编码器 + 电池(成本与体积都上去了)。

Dummy 结构太紧凑,两条路都不好走,于是用了第三种办法:

  1. 上电后利用电流环做低力矩的「无零点定向运动」——轻轻把关节推向机械限位,靠碰撞确定粗零点,不装任何限位开关
  2. 再根据单圈绝对值编码器在限位附近精调零点。

为什么能保证精度?因为机械限位被设计在 12°(= 360° / 30)的范围内,而这个范围正好落在单圈绝对值编码器的有效精度区间内。于是零点「无误差,且几乎不受加工精度影响」——CNC 件公差大一点也不会毁掉归零精度。用一个巧妙的机械约束,绕开了昂贵的传感方案。

🕹️ 第五层 · 指令模式与上位机

三种指令模式

模式发送频率执行方式可打断典型场景
SEQ随机 · 低(<5 Hz)FIFO 队列依次执行视觉抓取、码垛等「一条条排队做」的任务
INT随机 · 不限指令覆盖,立即执行动作同步等实时控制
TRJ固定 · 高(200 Hz)自动插值,固定周期执行3D 打印、雕刻、绘画等连续轨迹(官方标注 ToDo)

指令可通过 USB、串口、CAN 三种通道接收。这套 SEQ / INT / TRJ 的划分,与工业控制器里的「队列指令 / 实时指令 / 轨迹流」基本同构——读懂了它,再翻工业机器人手册会轻松很多。

上位机与仿真

🪜 复刻路线怎么选

维度原版 Dummy低成本路线(青春版方向)
机体铝 CNC 加工3D 打印
减速器谐波减速模组(二手约 600 元 / 个)自研摆线针轮减速器(CycloidAcuratorNano)
成本高(数千元级)目标 2000 元以内
精度高(谐波零背隙)略降,功能一致
软件固件——与原版完全通用,换的只是机械与走线
适合谁有机加工资源,想做高精度样机个人创客、3D 打印玩家、预算有限的学生
💡 建议路径:先把本分册五层读完 → 从 4.Model 下载模型,在电脑里量尺寸、看结构 → 读 2.Firmware 的 Robot 库搞懂 DH 与解析逆解 → 决定走哪条路线 → 再动手。跳过前两步直接买件,大概率会卡在「装完了动不了、又不知道算法哪出错」。

⚠️ 复刻前必须知道的三件事

  1. 仓库没有 LICENSE 文件:不包含任何许可证说明,也就没有默认的开源授权。自己研究学习没问题,但商用、二次分发、或把代码与模型用于公开产品之前,请先联系原作者确认授权——这一点与前两个项目(GPL-3.0 / 官方免费公开)有本质区别。
  2. 难度是全栈级的:会同时碰到机加工(或 3D 打印)、PCB 设计与打样、STM32 嵌入式开发、CAN 总线调试、运动学算法。它不是「照着 PDF 装一遍」的项目,而是「你得先会这些东西」的项目。
  3. 成本先算清再动手:原版谐波方案单是减速器就超出多数 DIY 预算;即便走低成本路线,也建议先按 CycloidAcuratorNano 的物料表算一遍,再决定采购规模。

💡 要点提示

🔗 官方资料直达

❓ 常见问题

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 模型、以及低成本复刻路线的直达卡片;想动手前,建议先把本节五层过一遍,再决定走原版还是青春版。