ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

DIY机械臂末端执行器:舵机+3D打印低成本夹爪制作全攻略

DIY机械臂末端执行器:舵机+3D打印低成本夹爪制作全攻略 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.2mm3层壁线对于小尺寸结构件足够了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.mdREADME.md里有组装顺序图和BOM清单照着做就行。如果你改了尺寸记得把源文件里的配合公差重新检查一遍。我的经验是3D打印件之间的间隙留0.3到0.5mm最舒服太紧装不进去太松容易晃动。6.2 扩展方向从机械夹爪到多形态末端这套夹爪结构稳定之后我又做了一个简单的扩展——把手指头换成了两个杯状吸盘座配合一个小气泵做真空吸附抓取用来抓取表面平整的物体。这种做法其实提示了一个思路末端执行器和机械臂本体可以解耦设计切换不同的末端结构就能应对不同的任务需求而接口保持不变。另一个值得尝试的方向是自适应欠驱动夹爪。传统的两指夹爪遇到异形物体容易夹不住欠驱动夹爪通过弹簧和连杆机构可以让手指根据物体外形自动贴合抓取兼容性更好。成本也不会高出太多核心思路是每根手指增加一到两个关节和弹簧复位装置用一个舵机驱动所有手指。网上有不少开源设计配合这套舵机驱动方案也很容易迁移。6.3 给不同基础读者的建议如果你是完全的新手建议先花一天时间把舵机、Arduino、3D打印三者单独跑通再开始做整合。先让舵机单独转起来然后打印一个最小测试件验证打印参数最后才做整机装配。如果你是有一定基础的朋友可以直接跳过测试阶段重点放在末端执行器和机械臂的联动调参上。特别是轨迹规划和夹爪动作的时序配合——大部分抓取失败其实不是夹爪的问题而是机械臂还没稳定到位夹爪就提前闭合了。我建议在机械臂的控制脚本里加入一个“到位检测”的逻辑等机械臂关节停止运动后再触发夹爪动作成功率提升非常明显。我自己在实际使用中还有一个小习惯每次更换手指或者调整结构后都会先写一个简单的开合循环程序跑几十次确认没有异响、没有卡顿再装到机械臂上。这个习惯帮我排除了好几次因为齿轮装配不正导致的舵机过载。对于这个项目来说结构简单反而意味着每个细节都值得较真多花十分钟做自检比之后拆机重装省太多时间。
返回列表