☰
DIY机械臂末端执行器:舵机+3D打印低成本夹爪制作全攻略
2026/9/25 6:41:21 网站建设 项目流程

DIY机械臂必看:用舵机+3D打印自制低成本末端执行器(附STL文件)

玩机械臂的朋友应该都有同感:机臂本体折腾好了,运动学算明白了,到最后卡在末端执行器上——买成品夹爪动辄几百上千,选型还不一定匹配自己的臂型。我之前做5自由度机械臂的时候,就是在末端执行器上踩了不少坑,最后干脆自己用舵机加3D打印搓了一个夹爪式末端执行器,成本控制在50块钱以内,效果完全够用。

这篇文章就围绕这个项目展开,从设计思路、舵机选型、3D打印参数到Arduino控制,再到实际使用中的问题排查,把我踩过的坑和验证过的方案一次性说清楚。如果你正在做机械臂相关的毕业设计、ROS机器人项目,或者只是想给自己的桌面机械臂加个能抓东西的“手”,这篇内容可以直接拿来参考。STL文件我也整理好了,文末会说明文件结构和适配建议。

1. 整体设计与思路拆解

1.1 为什么是舵机+3D打印的组合

先说说方案选型背后的逻辑。末端执行器的实现路径其实不少,市面上主流的有气动夹爪、电动夹爪、吸盘、电磁铁,还有灵巧手。但放到DIY场景里,这些方案各有各的硬伤:气动夹爪需要气泵和电磁阀,噪音大还占地方;成品电动夹爪价格高,而且很多是串口或CAN总线控制,要额外写驱动;吸盘对被抓物表面要求太高,不平整或者带孔的都没法用。

舵机加3D打印的组合能成为DIY圈的标配,核心原因就三条。第一是成本低,一个SG90舵机几块钱,加上几十克PLA耗材,整套做下来不超过50块,坏了不心疼。第二是控制简单,舵机用PWM信号就能驱动,Arduino、STM32、树莓派Pico、ESP32都能轻松控制,不需要专门的驱动器。第三是结构灵活,3D打印可以随时改图纸调整夹爪形状、开口宽度、手指长度,适配不同抓取对象,这种柔性是成品夹爪给不了的。

我当时选这个方案还有一个现实考虑:我的机械臂是5自由度结构,末端负载能力本身就有限,舵机方案重量可以做到很轻。整套夹爪加舵机控制在60克左右,对臂的末端负载压力很小,不会因为加了末端执行器导致前面几个关节力矩不足。

1.2 末端执行器需要满足哪些核心需求

在设计之前,我给自己列了一份需求清单,这些需求决定了后续所有的设计决策:

  • 重量控制:末端执行器越轻越好,控制在60克以内,否则影响机械臂的动态响应和有效负载。
  • 夹持力适中:能稳定夹起30到50克左右的轻量物体,比如乒乓球、小木块、3D打印的小零件。
  • 开口范围:夹爪最大开口至少40mm,满足日常抓取小物件的基本需求。
  • 控制接口通用:标准3pin舵机接口(VCC、GND、信号),方便接入现有控制系统。
  • 结构可靠:打印件在反复开合和受力情况下不易断裂,关键受力位置要有足够的壁厚。
  • 拆装方便:能快速从机械臂末端拆下来,方便调试和维护。

这个需求清单看起来简单,但它直接决定了后面每一步的选择。比如夹持力要求,决定了舵机至少要用SG90级别;开口范围要求,决定了手指的长度和安装方式;重量要求,决定了手指不能设计得太厚实,要镂空减重。这些约束条件之间还会互相打架——手指长一点开口就大,但杠杆力矩也大,舵机压力就大。所以在设计时一定要先把需求想清楚,不然做出来不是太重就是夹不住东西。

1.3 方案对比与选型依据

我调研的时候把几种常见DIY末端执行器方案放在一起做了个对比,方便大家理解为什么最终选了舵机加3D打印:

方案成本区间控制难度适用场景主要缺点
舵机+3D打印夹爪20~80元低,PWM即可轻量抓取、教育演示夹持力有限,精度一般
成品电动夹爪300~2000元中高,串口/CAN工业级应用、科研价格高,适配麻烦
气动夹爪500元以上(含气泵)中,需电磁阀控制高速抓取、食品级需要气源,噪音大
电磁铁20~100元低,继电即可抓取铁磁性物体只能吸铁,无法抓非磁性物
真空吸盘200~1000元中,需真空泵平面物体搬运对表面要求高

从表格能看出来,舵机方案在成本和控制难度上有绝对优势,缺点也明显——夹持力和精度有限。但对我们DIY机械臂场景来说,抓个轻量物体做演示、跑视觉抓取实验完全够用。如果你的项目有更重的抓取需求,可以在这个基础上换用MG996R级别的金属齿轮舵机,结构件稍微加强一下就行,设计思路是通用的。

2. 舵机选型与驱动的关键参数解析

2.1 常见舵机分类与参数对比

末端执行器的核心驱动部件就是舵机,选型直接决定夹爪的性能上限。DIY圈子里常用的舵机主要是SG90、MG90S、MG996R这几款,它们的参数差异很大,不能随便选。

SG90是入门必备,重量9克左右,堵转扭矩约1.8kg/cm(不同厂家标称值有差异),工作电压4.8V到6V,塑料齿轮。MG90S是SG90的金属齿轮版本,同样9克,扭矩略高,大概2.2kg/cm,贵几块钱。MG996R就是“大力士”了,重量55克,堵转扭矩9.4kg/cm到11kg/cm,金属齿轮,适合需要较大夹持力的场景。

这里要重点说一个新手常踩的坑:扭矩和体积成正比,不代表越大的舵机越好。MG996R虽然力大,但它本身就有55克重,加上3D打印结构件,整套末端执行器可能超过150克。如果你的机械臂末端负载能力只有200克左右,光末端执行器就占了四分之三,那就没余量抓东西了。所以选舵机之前,先搞清楚你的机械臂末端额定负载是多少。我的5自由度臂末端负载大约300克,所以我选了SG90,整套执行器60克左右,留出足够的抓取裕量。

2.2 舵机PWM控制原理与重要参数

舵机的控制原理不算复杂,但理解了才能真正用好。舵机内部有一个电位器反馈当前角度,通过PWM信号控制目标角度,内部比较器会驱动电机转动到目标位置。标准舵机使用50Hz(周期20ms)的PWM信号,高电平脉宽在0.5ms到2.5ms之间,对应0°到180°的转动范围。

具体来说,脉宽1.0ms对应0°,1.5ms对应90°(中位),2.0ms对应180°。不过要注意,这个对应关系不是绝对精确的,不同品牌的舵机存在差异,有的舵机0.5ms到2.5ms只能覆盖0°到180°,有的只需要0.5ms到2.5ms就能超范围转动。所以实际使用前,最好先手动发几个测试脉宽,确认舵机的实际行程范围,避免拧到极限位置堵转。

还有一个关键参数是舵机响应速度。SG90的转速大约是0.1秒/60°,这意味着从完全张开到完全闭合大约需要0.2秒。在机械臂抓取任务中,这个速度够用,但如果做视觉引导抓取,要预留舵机动作时间,在轨迹规划时把这个时间算进去。

关于脉宽和角度的关系,我整理了一个速查表:

脉宽(ms)角度(°)适用场景
0.5~1.00°~45°夹爪完全闭合
1.0~1.545°~90°半开状态
1.5~2.090°~135°半开到大开
2.0~2.5135°~180°完全张开

夹爪常用的工作区间可以设定在0°到135°之间,留出一些余量,避免在极限位置长期受力,这样能有效延长舵机寿命。

2.3 夹持力与舵机扭矩的关系

很多人不明白夹持力和舵机扭矩之间的换算关系,导致设计出来的夹爪要么夹不住,要么舵机过载。这里我给出一个简化模型:手指相当于一个杠杆,舵机输出轴是支点,舵机通过连杆机构带动手指绕支点旋转。夹持力取决于舵机输出扭矩和力臂的比值。

假设舵机输出扭矩为T(单位kg/cm),手指长度即力臂为L(单位cm),则理论上手指尖端的力F = T / L。以SG90为例,扭矩约1.8kg/cm,如果手指长度做到4cm,尖端理论力就是0.45kg,也就是450克。听起来挺大?不对,这是理想情况,实际还要考虑连杆机构的角度效率、打印件之间的摩擦力、舵机实际输出打折等因素。我实测下来,SG90配合4cm手指,实际夹持力大概在100到150克之间。这个数值对轻量抓取足够了,但如果你想夹更重的物体,两个方向优化:一是换MG996R大扭矩舵机,二是缩短手指长度减小力臂,但缩短手指意味着开口范围变小,这个取舍要看具体需求。

3. 3D打印设计与打印参数详解

3.1 夹爪结构设计与力学分析

末端执行器的机械结构我采用了两指平行开合方案。对比V型爪和杠杆式,平行夹爪的优点是夹持时手指面始终平行,对物体施加的压力更均匀,适合抓取矩形小木块、电池、3D打印件等规则物体。劣势是结构相对复杂,需要额外的连杆或滑轨。

设计上我用了“舵机+齿轮齿条”的传动方式:舵机输出轴上固定一个小齿轮,齿轮驱动两个齿条做反向直线运动,两个齿条分别连接两只手指。这种方式的好处是结构紧凑、传动比稳定、两指运动同步性好。另一种常见方案是舵机直接驱动四连杆机构,结构更简单,但两指不一定完全同步。

在建模的时候,我用的FreeCAD和Fusion 360两个工具。FreeCAD免费开源,适合Linux用户;Fusion 360功能更全,个人版免费但需要联网。设计时要注意几个关键尺寸:

  • 舵机安装舱:比舵机外形尺寸大0.3到0.5mm的余量,既方便安装又不会太晃。
  • 齿轮齿条模数:我用的模数0.8,齿数14的小齿轮,齿条长度根据所需行程计算,确保开口能到40mm以上。
  • 手指厚度:6mm比较合适,太薄容易断,太厚增加重量。末端可以做一个内圆弧形的凹槽,增加与抓取物的接触面积。
  • 减重设计:手指和主体结构上尽量做镂空,用三角形或六边形填充图案,强度影响不大但能减重20%左右。

3.2 打印材料选择与推荐

打印材料方面,PLA绝对是最适合新手的选择,打印温度190到220°C,不需要加热床也能打得比较平整。缺点是强度一般,受热容易变形,60°C左右就开始软化,所以不能放在车里暴晒。PETG比PLA强度高很多,耐热到80°C左右,韧性更好,打印温度240到260°C,需要加热床,对打印环境有一定要求,适合做长期使用的结构件。

我最终的打印件用的是PLA+,这个材料算是PLA的增强版本,强度比普通PLA提高不少,打印温度和PLA一样,新手友好。选择PLA+还有一个原因——打印件之间、打印件和舵机之间的公差比较好控制。如果你手上只有普通PLA,也可以用,注意不要用太高的填充密度,结构件也不需要100%填充。

3.3 打印参数设置与切片优化

切片参数我用的是Cura和PrusaSlicer,两个都免费。关键参数建议如下:

  • 层高:0.2mm,兼顾质量和速度。如果追求更细腻的表面,可以用0.12mm,但打印时间会增加60%以上。
  • 壁厚:1.2mm(3层壁线),对于小尺寸结构件足够了,2mm以上反而增加重量。
  • 填充密度:20%到30%,填充图案选网格或三角形。齿轮齿条这些受力件建议40%。注意,并非越高越好,填充越高重量越大,收缩应力可能导致翘边。
  • 支撑:舵机安装舱的舵机耳朵位置、齿条轨道这些悬空结构需要支撑。推荐使用树状支撑,容易拆除,表面质量好,但切片速度慢一些。
  • 打印方向:手指最好竖直打印(指尖朝上),这样层纹方向和受力方向垂直,强度最好。主体结构可以横放,保证舵机安装面光滑。
  • 热床:PLA建议热床50°C,粘附更稳。如果没有加热床,至少用美纹纸胶带或固体胶做辅助粘附。

打印之前一定要检查STL文件有没有破面、裂缝这些问题。我一般用Windows自带的3D查看器打开看一遍,或者直接在切片软件里检查。切片预览模式要逐层看一遍,特别是舵机安装舱的支撑区域,防止因为支撑无法拆除导致整个打印报废。

3.4 STL文件的适配与修改建议

我整理的STL文件包里包含以下文件:

  • finger_left.stl:左手指
  • finger_right.stl:右手指
  • main_body_top.stl:夹爪主体(上半部分),安装舵机和齿轮
  • main_body_bottom.stl:夹爪主体(下半部分),覆盖齿条轨道
  • gear_14t.stl:舵机输出轴齿轮,14齿
  • rack_left.stl/rack_right.stl:左右齿条,各带手指安装孔
  • mount_plate.stl:机械臂末端安装板

如果你的机械臂法兰盘尺寸和我用的不一样,只需要改mount_plate.stl的螺丝孔位置和孔径就行。Fusion 360和FreeCAD的源文件我也一并放在包里,直接改参数重新导出即可。这里建议大家给自己机械臂做适配时,把STL和源文件一起下载,改起来效率高很多。

4. 装配接线与Arduino控制实现

4.1 所需材料清单与工具准备

这套末端执行器用到的物料非常少:

  • SG90或MG90S舵机一个(建议备两个,一个备用)
  • 3D打印结构件一套(PLA+材质)
  • M2、M3螺丝若干(M2x8用于舵机耳朵固定,M3x10用于主体组装)
  • 杜邦线3根(母对母)
  • 舵机延长线一根(如果机械臂末端离主控板较远)

工具方面需要内六角螺丝刀一套、尖嘴钳、美工刀,有条件的话准备一个电烙铁自己焊一下接线端子会更稳固。

4.2 装配步骤与注意事项

装配过程分五步:

第一步,检查打印件。先比划一下齿轮和齿条能不能啮合顺畅,舵机能不能顺利放入安装舱。如果太紧,用美工刀刮一下接触面;如果太松,直接螺丝拧紧也能矯正。

第二步,安装舵机。先把舵机放入主体上半部分的安装舱中,舵机输出轴朝向齿轮位。用M2x8螺丝穿过舵机自带的安装耳朵,固定到打印件上。注意舵机耳朵比较脆弱,拧的时候不要用蛮力,感觉阻力变大就停,滑丝就麻烦了。

第三步,安装齿轮和齿条。舵机输出轴顶部一般有个单臂(十字或一字臂),需要先把舵机臂装上,再用M5自攻螺丝固定到齿轮的孔位上。这里有个技巧:先把舵机转到中位(脉宽1.5ms),再把齿轮装成对称位置,这样左右齿条行程范围一致。

第四步,安装手指和主体下半部分。把齿条滑入滑轨槽,装上手指后用M3螺丝固定好,再把下半部分盖上,螺丝固定。

第五步,接线。舵机三根线分别是红(VCC)、棕或黑(GND)、橙或黄(信号PWM),接到Arduino的对应引脚。红色线接5V,棕色线接GND,橙色线接数字引脚(我用的是D9)。

4.3 Arduino控制代码与PWM调优

控制部分我用Arduino Uno来做演示,代码逻辑很简单,有基础的朋友直接抄就行:

#include <Servo.h> Servo gripper; // 定义舵机对象 const int gripperPin = 9; // 信号线接D9 const int closeAngle = 10; // 夹持角度(完全闭合) const int openAngle = 100; // 张开角度(完全张开) void setup() { gripper.attach(gripperPin); pinMode(gripperPin, OUTPUT); gripper.write(openAngle); // 上电先完全张开 delay(500); } void loop() { // 演示动作:张开 -> 延时 -> 闭合 -> 延时 gripper.write(openAngle); delay(1000); gripper.write(closeAngle); delay(1000); } // 封装一个抓取函数,方便后续和其他模块联动 void grab(int holdAngle) { gripper.write(holdAngle); delay(300); // 预留机械动作时间 }

这里面有个值得注意的点:直接用write()写入角度后,舵机转动需要时间,所以最好在每条write()指令后加延时。实际抓取时,我推荐先写一个setGripper(int angle, int speed)的平滑控制函数,用分段小步距转动来模拟速度控制,这样夹持动作更稳,不容易把物体弹飞。

另外,Servo库内部使用的是定时器,在Arduino Uno上只能驱动最多12路舵机。如果你用的开发板是ESP32,情况就完全不同——ESP32的LEDC控制器可以支持16路独立PWM输出,频率和分辨率都可以单独设置,代码写法也有些差异。ESP32的驱动代码大致如下:

#include <ESP32Servo.h> Servo gripper; static const int servoPin = 13; void setup() { gripper.attach(servoPin, 500, 2500); // 自定义脉宽范围 gripper.write(90); } void loop() { gripper.write(30); delay(1000); gripper.write(120); delay(1000); }

需要注意ESP32的GPIO输出能力有限,舵机供电别直接走开发板的5V引脚,最好外接5V电源模块,共地就行。单独一个SG90用Arduino的5V引脚勉强可以,但如果是六轴机械臂六个舵机,一定要独立供电,否则电压跌落会导致舵机抖动。这也是很多机械臂“一上电就疯狂抖”的根本原因。

5. 常见问题与排查技巧实录

5.1 舵机抖动与复位电流问题

这是我做机械臂以来遇到最多的问题,没有之一。症状是舵机上电后不停抖动、发出嗡嗡声,或者动作不流畅一顿一顿的。

排查思路按优先级排列:

第一,供电电压不足。用万用表测舵机电源引脚,空载5V很正常,但舵机一转就掉到4V以下,基本可以确定是电源输出电流不够。SG90堵转电流能到700mA左右,普通Arduino板载稳压模块根本扛不住,要用单独的5V 2A以上的电源模块或者锂电池供电。

第二,控制信号不稳定。这种情况经常发生在用ESP32或树莓派驱动舵机时。树莓派的GPIO是3.3V电平,虽然舵机多数也能响应,但信号边沿不够陡峭,偶尔就会抖动。解决办法是加一个电平转换模块,或者干脆用PCA9685舵机驱动板,直接I2C控制,省心很多。

第三,接地问题。舵机电源地和开发板地之间必须共地,如果两者各自供电没有连地线,PWM信号的参考电位就不一致,舵机会完全不受控。接线时一定检查地线是否连通。

顺带说一个“复位电流”的概念。舵机启动瞬间会因为反向电动势产生一个很大的瞬时电流,虽然持续时间极短,但如果在调试时频繁快速切换舵机角度,这个电流累积下来可能导致电源保护或复位。这也是为什么电源功率阈值要留足余量,以及不建议在满载情况下快速连续转舵的原因。

5.2 夹持不稳与夹爪打滑

夹持物体时常见两个问题:一是物体被夹飞或位移,二是夹不住原地打滑。

被夹飞的原因通常是手指出力不均匀,或者闭合速度太快产生冲击。解决办法:控制端改成平滑分段运动,就是前面说的setGripper()函数;同时在手指内侧贴一层硅胶垫或者热缩管,增大摩擦系数。

打滑则说明夹持力小于物体重力,宏观表现就是物体慢慢往下滑。解决办法从几个方向考虑:是不是手指长度太长导致力臂过大?是不是舵机扭矩标称虚标(部分廉价SG90实际扭矩只有标称的一半)?是不是手指和物体接触面积太小?逐项排查,一般都能找到原因。

5.3 打印件断裂与螺丝滑丝

结构件断裂多发在手指根部、齿条薄壁处。第一版设计时我就断过两根手指,原因是手指根部的壁厚只有3mm,而且打印方向是水平打印,受力方向和层纹平行,强度天然就差。后来改成竖向打印,壁厚加到6mm,内部加了两条三角形加强筋,再也没断过。

螺丝滑丝的预防方案更简单:所有螺丝孔位预留1.5到2mm的套管位,拧螺杆之前先用攻丝锥打一遍,或者直接埋铜螺母。铜螺母埋在打印件里效果是最好的,长期拆装也不会滑丝。

5.4 常见问题速查

问题现象可能原因解决方案
舵机通电后抖动供电不足/共地不好换大电流电源,检查接地
舵机转动角度不对脉宽范围不匹配用代码调整脉宽范围
夹爪闭合不到位齿轮打滑/齿条卡顿检查啮合,润滑齿条
舵机发烫长期堵转/过载减小夹持目标重量,检查是否卡死
打印件断了壁厚不够/打印方向不对增加壁厚,改竖向打印
夹不住重物摩擦力不足/夹持力不足贴硅胶垫,换大舵机

6. 开源文件结构与扩展思路

6.1 文件包结构说明

STL文件包里我按功能分了目录:

gripper_STL/ ├── STL/ │ ├── finger_left.stl │ ├── finger_right.stl │ ├── main_body_top.stl │ ├── main_body_bottom.stl │ ├── gear_14t.stl │ ├── rack_left.stl │ ├── rack_right.stl │ └── mount_plate.stl ├── source/ │ ├── gripper_v1.f3d (Fusion 360源文件) │ ├── gripper_v1.FCStd (FreeCAD源文件) │ └── dimension_drawing.pdf ├── firmware/ │ ├── arduino_gripper_test.ino │ ├── esp32_gripper_test.ino │ └── pca9685_gripper.ino └── README.md

README.md里有组装顺序图和BOM清单,照着做就行。如果你改了尺寸,记得把源文件里的配合公差重新检查一遍。我的经验是3D打印件之间的间隙留0.3到0.5mm最舒服,太紧装不进去,太松容易晃动。

6.2 扩展方向:从机械夹爪到多形态末端

这套夹爪结构稳定之后,我又做了一个简单的扩展——把手指头换成了两个杯状吸盘座,配合一个小气泵做真空吸附抓取,用来抓取表面平整的物体。这种做法其实提示了一个思路:末端执行器和机械臂本体可以解耦设计,切换不同的末端结构就能应对不同的任务需求,而接口保持不变。

另一个值得尝试的方向是自适应欠驱动夹爪。传统的两指夹爪遇到异形物体容易夹不住,欠驱动夹爪通过弹簧和连杆机构,可以让手指根据物体外形自动贴合,抓取兼容性更好。成本也不会高出太多,核心思路是每根手指增加一到两个关节和弹簧复位装置,用一个舵机驱动所有手指。网上有不少开源设计,配合这套舵机驱动方案也很容易迁移。

6.3 给不同基础读者的建议

如果你是完全的新手,建议先花一天时间把舵机、Arduino、3D打印三者单独跑通,再开始做整合。先让舵机单独转起来,然后打印一个最小测试件验证打印参数,最后才做整机装配。

如果你是有一定基础的朋友,可以直接跳过测试阶段,重点放在末端执行器和机械臂的联动调参上。特别是轨迹规划和夹爪动作的时序配合——大部分抓取失败其实不是夹爪的问题,而是机械臂还没稳定到位夹爪就提前闭合了。我建议在机械臂的控制脚本里,加入一个“到位检测”的逻辑,等机械臂关节停止运动后再触发夹爪动作,成功率提升非常明显。

我自己在实际使用中还有一个小习惯:每次更换手指或者调整结构后,都会先写一个简单的开合循环程序跑几十次,确认没有异响、没有卡顿再装到机械臂上。这个习惯帮我排除了好几次因为齿轮装配不正导致的舵机过载。对于这个项目来说,结构简单反而意味着每个细节都值得较真,多花十分钟做自检,比之后拆机重装省太多时间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询