元器件 · 底盘
四自由度机械臂套件
四自由度机械臂套件是一副框架,能把四个模型舵机变成一台桌面机械臂——旋转底座、大臂、小臂和夹爪都可以摆位。
它是什么
四自由度机械臂套件是桌面操作臂的机械骨架:激光切割亚克力或铝支架一套、旋转底座、四个舵机安装位。单它什么都不干——是把舵机变成够得着、摆得准、夹得住的机器的框架。拧上舵机,PCA9685 驱动,就能指挥到空间一点。
四个关节
每个自由度是一个舵机干一活:
- 底座——整臂左右转(偏航),瞄准工作面。
- 大臂——抬上臂;定距离高度两关节之一。
- 小臂——弯前臂;和大臂一起把工具放到竖直面任意处。
- 夹爪——开合夹住东西。
大臂和小臂这一对关节,正是二连杆逆解要解的:给定工作平面内的一个目标点,算出能够到它的两个关节角。底座再把这个平面转到目标所在的方向,夹爪负责抓取。
什么时候用它
想学操作而不是移动时拿四自由度套件——抓取码放、叠积木、画画,或相机装可定位云台。它是操作臂领域的两轮底盘:一整类项目共用的基础结构。它本身就是轻载设计;当教学平台用,别当成干活的机器。
更重更准上金属齿舵机、刚性框架,或加腕的五六自由度臂。移动机器人要的是底盘。
接线与坑
- **每关节一舵机,每路一通道。**编号通道(0=底座,1=大臂……),映射写代码里,“动小臂”指令别打错舵机。
- **舵机独立供电。**四舵机齐动电流尖峰;喂 PCA9685 V+ 端子,绝不走 Arduino。
- **装配前先回零。**装舵盘前把每个舵机设到一个已知角度(如 90°),让机械臂的零位和代码里的零位对上。
- **尊重臂展。**工具只能到连杆长度定的环形带里;外面点关节角再对也到不了——见机械臂模拟器。
- **注意杠杆。**负载随臂展掉得快;轻拿轻放,不然舵机堵转尼龙齿崩。
写代码前要量的数
逆解是连杆长度的算术。量错臂自信地到错地方,代码背不了锅。
| 测量 | 量哪 | 典型 |
|---|---|---|
L1——上臂 |
大臂关节轴到小臂关节轴 | 90–105 mm |
L2——前臂 |
小臂关节轴到夹爪夹持点 | 80–95 mm |
| 底座高 | 桌面到大臂关节轴 | 50–70 mm |
| 底座偏置 | 底座转轴到大臂轴,水平 | 0–15 mm |
**量关节轴之间,不量支架边。**轴是舵机输出齿中心,常在可见支架里 5–10 mm。95 mm 连杆上 10 mm 误差超 10%——表现就是机械臂系统性地够不到目标,无论怎么调参都修不好。
两长度直接给出工作空间:
maximum reach = L1 + L2
minimum reach = |L1 - L2|
L1 = 100、L2 = 90,臂从大臂轴够 10 mm 到 190 mm——环带不是圆盘。中间有一块物理上到不了的区域,第一次碰到靠近底座的目标返回不可达时,确实会让人意外。两连杆等长洞消失,臂能折自己身上。
舵机扭矩:臂伸直为什么塌
大臂舵机要扛住外侧的一切,扭矩需求随质量离关节的距离增加。
全伸臂 L1 = L2 = 95 mm,30 g 负载,连杆各约 20 g:
Shoulder torque ~= (forearm+elbow mass x 0.095) + (payload x 0.190)
~= (0.05 kg x 9.5 cm) + (0.03 kg x 19 cm)
~= 0.48 + 0.57 = 1.05 kg.cm
SG90 4.8 V 堵转约 1.8 kg·cm。保持 1.05 kg·cm 是堵转 58% 持续,这已经远超玩具级舵机能保持精度的范围——它会掉到指令角以下、嗡嗡作响,并开始发热。
| 配置 | 大臂需求 | SG90(1.8 kg·cm) | MG90S(2.2 kg·cm) |
|---|---|---|---|
| 收拢,无负载 | 约 0.2 kg·cm | 舒服 | 舒服 |
| 伸直,无负载 | 约 0.5 kg·cm | 行 | 行 |
| 伸直,30 g 负载 | 约 1.05 kg·cm | 肉眼可见下垂 | 边缘 |
| 伸直,50 g 负载 | 约 1.4 kg·cm | 堵转 | 下垂 |
三条实践后果。臂精度全伸最差,奇异形也住那,路径规划边界内。大臂用金属齿 MG90S,就算别处都用 SG90 也值得换——先坏的就是这个关节,尼龙齿在持续负载下会崩。能配平就配平:一根橡皮筋从上臂拉回底座,能免费帮大臂舵机卸掉相当一部分静载。
装配到数学能对得上
顺序要紧,一步尤其不可逆。
**1. 装舵盘前每舵机居中。**舵机上电,指令 90°,再压舵盘。舵盘花键——约 20 或 24 齿——只能离散位置装,最细调节约 15–18°。先装臂后标定,可能某关节可用范围偏 40°,机械完全救不回。
**2. 想要的零位装舵盘。**大臂一般上臂竖直,小臂前臂水平。约定定好写下,照着装。
**3. 拧紧前每关节全行程查。**指令 0° 和 180° 确认不撞框架。一个在 160° 就撞到自己支架的关节,有效限位就是 160°,你的代码必须知道这一点。
**4. 每关节偏移符号记下。**连杆的布置方式会让某些关节的旋转方向与你的数学约定相反。把它记下来:
struct Joint {
uint8_t channel;
int offsetDeg; // servo angle when the joint is at its mathematical zero
int8_t sign; // +1 or -1
int minDeg, maxDeg; // mechanical limits, measured
};
const Joint BASE = {0, 90, +1, -85, 85};
const Joint SHOULDER = {1, 90, -1, -10, 120};
const Joint ELBOW = {2, 90, +1, -120, 10};
const Joint GRIPPER = {3, 20, +1, 0, 55};
int servoAngle(const Joint &j, float jointDeg) {
float clamped = constrain(jointDeg, j.minDeg, j.maxDeg);
return constrain((int)(j.offsetDeg + j.sign * clamped), 0, 180);
}
这个结构体就是运动学与硬件之间整座桥,显式写出来,才有一台能讲清楚的机械臂,而不是一台要靠试凑的机械臂。
四舵机供电
四微型舵机齐动远超单片机,臂失效模式更糟:撞自家框架或抓实东西整链舵机同时堵转。
| 情况 | 电流 |
|---|---|
| 空闲保持 | 合计约 40 mA |
| 转动,无负载 | 约 600 mA – 1 A |
| 四路全堵 | 约 2.6 A |
按堵转配电源。独立 5–6 V 进 PCA9685 V+ 端子,并 470–1000 µF 电容,地和控制器连。把这些接在 Arduino 的 5 V 引脚上会让板子欠压——而且它只在机械臂到达某个特定位置时才发作,看上去很像软件缺陷。
温柔点动
舵机新角度指令全速到。在移动机器人上这只是动作突兀;在机械臂上却是实实在在的问题:剧烈的运动、电流尖峰,以及尼龙齿轮承受的一次冲击,而机械臂自身的杠杆还会把这冲击放大。
// Interpolate every joint together so the tool moves in a straight-ish line
// and no single servo takes the whole load at once.
void moveTo(float base, float shoulder, float elbow, int steps, int stepMs) {
static float cur[3] = {0, 0, 0};
float target[3] = {base, shoulder, elbow};
for (int s = 1; s <= steps; s++) {
float t = (float)s / steps;
for (int j = 0; j < 3; j++) {
float a = cur[j] + (target[j] - cur[j]) * t;
pwm.setPWM(JOINTS[j].channel, 0, countsFor(JOINTS[j], a));
}
delay(stepMs);
}
memcpy(cur, target, sizeof(cur));
}
所有关节一起插值和做平滑同样重要。逐个关节依次运动,工具会在工作空间里走出一条奇怪的路径,既更慢,也更容易在半路撞上东西。
故障排查
| 现象 | 可能原因 | 解决 |
|---|---|---|
| 臂到完全错的地方 | 舵盘装在任意角度上 | 装舵盘前先把每个舵机归位到 90° |
| 某关节范围偏约 20° | 舵盘差一齿 | 拔了重装——软件修不了 |
| 臂一动板子复位 | 舵机电流走控制器 | 独立 V+ 供电,共地,大电容 |
| 全伸臂塌 | 大臂舵机过舒适扭矩 | 大臂 MG90S;配平;减负载 |
| 保持位姿嗡嗡 | 舵机极限顶负载 | 减负载,或不需要保持时就断开舵盘 |
| 底座附近到不了 | 目标进最小臂展环带 | 正常几何——|L1 − L2| 到不了 |
| IK 回 NaN | 目标超 L1 + L2 |
三角前先查可达 |
| 正反方向到得不一样 | 减速箱背隙,连杆放大 | 每次都从同一方向接近目标 |
| 新指令剧烈动 | 舵机全速 | 分步插值 |
| 夹爪压坏或掉东西 | 无力反馈 | 限合拢角;钳口加泡沫 |
什么时候升级这套件
四自由度亚克力套件是一个教学平台,它对此很坦白。它的局限,按你将会遇到的顺序排列如下。
**负载。**几十克。再重肩舵机拿不住。
**重复定位精度。**舵机减速箱的背隙加上亚克力连杆的形变,回到同一个指令位姿时会差几毫米。大臂上 4° 的空程放在 190 mm 臂展上,末端误差超过 13 mm。
**腕朝向。**四自由度工具到哪行,从哪角度到不行。五六自由度加腕,“从侧面拿起”才可能。
| 升级 | 买到 |
|---|---|
| 全 MG90S 舵机 | 金属齿——耐冲击,背隙小 |
| 铝连杆 | 形变更小,重复定位精度更好 |
| MG996R 舵机加大框架 | 真负载,几百克 |
| 六自由度臂 | 独立工具朝向 |
| 步进或无刷臂 | 零点几毫米重复精度 |
这些升级都不改变数学本身。你为这个套件写的二连杆运动学求解算法,和更好的机械臂用的是同一个,这也正是先在便宜框架上搭一遍值得做的原因。
探索关联图谱
用到它的搭建
包含 四自由度机械臂套件 的项目、学习路线和模拟器。
问题
四自由度机械臂套件 常见问题
什么是四自由度机械臂?
四自由度(4-DOF)机械臂有四个独立控制的关节——通常是旋转底座、大臂、小臂和夹爪。这四种运动让末端工具能够到达桌面上一定范围内的各个位置,并把东西抓起来。它是最小的一种机械臂:用起来像一台真正的操作臂,同时又便宜、容易控制。
机械臂需要几个舵机?
每个关节一个。四自由度机械臂用四个舵机,分别负责底座旋转、大臂、小臂和夹爪。更大的机械臂还会增加腕部俯仰和腕部旋转,做到五或六个自由度。由于每个舵机都需要自己的一路 PWM 通道,机械臂正是加装 PCA9685 驱动板、而不是把舵机直接接到单片机上的经典理由。
MeArm 是什么?
MeArm 是一款很受欢迎的开源四自由度机械臂套件,用激光切割亚克力制成,由四个微型舵机驱动。它是廉价桌面机械臂的原型——如今市售的许多套件都是 MeArm 的仿制品或近似变体。它们的接线和编程方式都一样,所以运动学和驱动方面的技能可以在它们之间通用。
业余机械臂能举起多重的东西?
不多——夹爪处只有几十克。极限由舵机扭矩乘以力臂决定。SG90 约 1.8 kg·cm 的堵转扭矩听起来不小,可一旦分摊到 15 cm 长的臂上,可用负载就降到几十克。换用金属齿舵机、缩短臂长会有帮助;真要举起重物,你需要一台更大的、带减速机构的机械臂。
机械臂一定要用 PCA9685 吗?
严格来说不是必须的,但它是合适的工具。只要给舵机单独供电,四个舵机也能靠 Arduino 的 PWM 引脚运行;但 PCA9685 能腾出单片机的定时器,只用两个 I²C 引脚就能驱动所有关节,还让舵机电流走它自己的电源——这正是多关节机械臂所需要的。
延伸阅读