基于Arduino与弯曲传感器的仿生机械手制作全攻略
1. 项目概述与核心思路想自己动手做一个能听你指挥的机器人手吗这听起来像是科幻电影里的情节但其实用一些常见的材料和一块Arduino开发板你完全可以在家里实现它。这个项目不仅仅是一个有趣的玩具更是一个绝佳的工程实践入门课。它能让你亲手触摸到机械结构、电子电路和程序代码是如何协同工作最终让一堆“死物”动起来的全过程。我做的这个机器人手本质上是一个“仿生”或“遥操作”系统。它的核心逻辑是通过安装在手套或某个参考物上的弯曲传感器Flex Sensor来捕捉你手指的动作Arduino读取这些传感器的模拟信号经过处理后驱动对应的伺服电机舵机转动。舵机通过拉动钓鱼线进而牵动机器人手的各个手指关节弯曲从而模仿你的手部动作。简单来说就是你动哪根手指机器手就跟着动哪根手指。这个项目非常适合对机器人、自动化或创客感兴趣的朋友无论你是学生、爱好者还是想给孩子做一个科普项目的家长。它不需要你具备高深的机械加工能力我们主要用泡沫板和手工工具也不需要复杂的电路知识连线都是基础操作编程部分也有现成的库和清晰的逻辑。整个过程你会学到如何将一个问题分解为结构、电路、代码三个部分并让它们完美对接。接下来我就把从材料准备到最终调试的完整过程以及我踩过的坑和总结的经验毫无保留地分享给你。2. 材料与工具清单解析工欲善其事必先利其器。一份清晰完整的物料清单是项目成功的第一步。下面这个清单是我在多次制作后优化过的版本分为核心电子部件、机械结构材料和必备工具三类。我会详细解释每样东西的作用和选购要点避免你走弯路。2.1 核心电子部件这是机器手的“大脑”和“肌肉”决定了项目的智能程度和动作能力。Arduino开发板1块项目的大脑。推荐使用Arduino Uno因为它接口丰富、资料最多、兼容性最好非常适合初学者。其他如Nano、Leonardo也可用但引脚布局可能不同需要调整代码。微型伺服电机5个机器手的“肌肉”负责提供拉力。你需要5个分别控制拇指、食指、中指、无名指和小指。选型要点推荐使用SG90或MG90S这类9克微型舵机。它们扭矩适中约1.8kg/cm价格便宜且工作电压4.8V-6V与Arduino的5V输出兼容。务必确认是180度标准舵机。数量5个。如果想简化可以只做3个手指拇指、食指、中指但完整的手更有趣。弯曲传感器5个机器手的“眼睛”用于感知你的手指弯曲程度。选型要点常见的是2.2英寸或4.5英寸的模拟弯曲传感器。长度越长电阻变化范围越大读数越灵敏。建议购买5个相同规格的。替代方案如果预算有限或想挑战自己可以用柔性电阻FSR或甚至自制用铅笔在柔性材料上画石墨线但稳定性和线性度会差很多不推荐首次尝试使用。电阻5个与弯曲传感器组成分压电路。弯曲传感器本质上是一个可变电阻需要串联一个固定电阻来将电阻变化转换为电压变化。推荐使用10kΩ的电阻这是一个通用值与大多数弯曲传感器匹配良好。面包板1块和杜邦线若干用于搭建和测试电路避免焊接方便修改。建议准备一块400孔以上的面包板以及数十根公对公、公对母的杜邦线。外部电源1个这是关键且容易被忽略的部分Arduino的USB口或板载稳压器无法同时驱动5个舵机会导致供电不足、舵机抖动甚至Arduino重启。你必须准备一个独立的5V/2A以上的直流电源并通过一个舵机控制板或电源分配板为舵机供电。常见方案是使用一个LM2596降压模块将7-12V的电源适配器降至6V然后接入面包板或舵机扩展板。2.2 机械结构材料这是机器手的“骨骼”和“肌腱”决定了它的外观和运动方式。高密度泡沫板如XPS挤塑板或轻木片用于制作手指关节和手掌。强烈推荐使用XPS挤塑板建筑保温用的那种它密度均匀、易于切割、有一定强度且表面光滑摩擦力小。厚度建议在5-10mm。钓鱼线尼龙线作为“肌腱”连接舵机摇臂和手指指尖。选择韧性好、直径细如0.3-0.5mm、不易打结的透明钓鱼线。橡皮筋若干作为“拮抗肌”提供手指伸直的回弹力。选择小型、拉力适中的橡皮筋。细铁丝或回形针用于制作连接关节的“轴”。将回形针拉直后使用即可。热熔胶枪和胶棒主要的连接和固定工具。泡沫板之间、线缆的固定都离不开它。准备一把功率适中的胶枪和足量的胶棒。手掌基座材料可以用更厚的泡沫板、小木块甚至3D打印一个结构用于固定舵机和Arduino。2.3 必备工具美工刀/笔刀切割泡沫板的主要工具要求刀片锋利以便切出平整的切口。尺子、铅笔/记号笔用于测量和划线。手锯或线锯如果使用轻木可能需要锯子来切割。砂纸不同目数用于打磨泡沫板边缘使其光滑圆润更接近手指形状。尖嘴钳、剪刀用于弯折铁丝、剪断钓鱼线等。电烙铁和焊锡可选但推荐在电路最终定型后将传感器、电阻的引线焊接起来并用热缩管绝缘比面包板连接可靠得多。万用表可选但推荐用于调试电路检查传感器电阻值、电压是否正常。3. 机械结构设计与制作详解机器手的机械结构是其物理基础设计的好坏直接影响到动作的流畅度和可靠性。我们的目标是制作一个轻量化、低摩擦力、能够模拟人类手指三关节远指间关节、近指间关节、掌指关节运动的结构。3.1 手指关节的设计与切割人类手指的关节并非简单的铰链其运动轨迹和范围有特定限制。为了简化我们采用“分段式铰链”结构。测量与规划首先测量你自己手指各指节的长度从指尖到第一个关节第一个关节到第二个关节以此类推。可以按比例缩小例如取实际长度的80%来制作机器手指这样整体更协调。用铅笔在泡沫板上清晰地标记出每一段指节的形状。建议画成略带上宽下窄的梯形模拟真实手指。切割与打磨使用锋利的笔刀沿着画好的线仔细切割。一定要垂直下刀多次轻划而不是试图一刀切透这样断面才会平整。切割好后用粗砂纸如180目大致打磨边缘去除毛刺。然后用细砂纸如400目精细打磨特别是关节接触面要打磨得尽可能光滑并做出轻微的圆角这能显著减少运动时的摩擦和卡顿。钻孔在每个指节段的两端将来连接关节的位置用细钻头或者烧热的缝衣针/图钉垂直钻出小孔。这个孔是穿“轴”铁丝用的孔径要略大于铁丝的直径确保能自由转动但又没有太大旷量。关键点所有孔的中心必须在同一条直线上否则手指弯曲时会别住。组装单根手指将三段或两段根据你的设计指节按顺序排列好。截取一小段拉直的回形针穿过所有指节的孔形成转轴。在转轴两端用尖嘴钳弯出一个小钩或贴上一点胶带防止其脱落。在指节背面将来安装“肌腱”钓鱼线的一面跨过每个关节用热熔胶粘上一个小线扣可以用对折的卡纸片或剪一小段吸管制成用于引导和固定钓鱼线。注意胶不要粘到关节活动区域。在指节正面与背面相对的一面跨过每个关节套上一个小橡皮筋。橡皮筋的作用是提供回弹力当舵机放松钓鱼线时它能将手指拉回伸直状态。橡皮筋的松紧需要调试太紧舵机拉不动太松手指回位无力。3.2 手掌基座与舵机安装手掌需要为手指和舵机提供稳固的支撑。制作手掌板切割一块大小合适的厚泡沫板或木板作为手掌。在上面规划好五根手指的安装位置。用笔刀在安装位置切出略窄于手指根部长度的缝隙深度约为指节厚度的一半。将手指根部涂胶后插入缝隙再用热熔胶从背面加强固定。确保所有手指的“掌心面”朝同一方向。制作舵机安装架这是整个机械部分的难点。你需要制作一个结构将5个舵机可靠地固定并且让每个舵机的摇臂舵盘旋转平面与对应手指的钓鱼线牵引方向对齐。方案一层叠式用泡沫板切割出多个“L”形或“U”形支架像楼梯一样一层层粘起来每层安装一个舵机。这种方案节省空间但调试麻烦。方案二并列式用一块长条形的厚泡沫板作为底座将5个舵机并排粘在或绑在底座上。这是最简单可靠的方法推荐初学者使用。可以用扎带或强力双面胶固定舵机。关键固定前先用Arduino程序将每个舵机转到90度位置中间位置然后安装舵盘确保舵盘处于水平或垂直的初始状态。3.3 “肌腱”系统穿线与调试这个步骤将动力舵机与执行端手指连接起来。穿线取一根钓鱼线一端系在手指最末节指节的顶端可以打个结并用一滴胶水加固。然后将钓鱼线依次穿过之前粘在指节背面的各个线扣确保线路顺滑。最后将钓鱼线的另一端系在对应舵机的舵盘最外侧的孔上。调整初始长度与张力这是最需要耐心的环节。首先让舵机保持在初始位置如90度。然后调整钓鱼线的长度使得当舵机在90度时手指处于完全伸直的状态并且钓鱼线是略微绷紧但不受力的。如果线太松手指会无力下垂如果线太紧舵机还没转动就已经在用力导致耗电增加甚至卡死。调整方法可以松开舵盘上的固定螺丝手动旋转舵盘来收放线找到合适位置后再拧紧。或者在钓鱼线上打一个可调节的活结。测试单指运动在Arduino上编写一个简单的测试程序让一个舵机在0到180度之间缓慢往复运动。观察对应的手指弯曲范围是否足够舵机转到极限时手指是否能握拳运动是否顺滑有无卡顿、异响关节摩擦是否过大回弹是否有力舵机回转时橡皮筋能否将手指快速拉直根据测试结果反复调整钓鱼线的固定点、长度以及橡皮筋的松紧和位置。一个经验是钓鱼线在舵盘上的固定点离圆心越远舵机旋转同样角度时收放线的长度就越大手指弯曲动作就越“猛”但需要的扭矩也越大。你需要找到一个平衡点。4. 电路系统连接与原理电路部分负责信号采集和动力输出。理解其原理能让你在出错时快速定位问题。4.1 传感器信号采集电路弯曲传感器是一个可变电阻其阻值随着弯曲程度增大而增大通常从伸直时的约10kΩ变到弯曲90度时的30-50kΩ。Arduino不能直接读取电阻但可以读取电压。我们采用最经典的分压电路。将弯曲传感器和一个10kΩ的固定电阻串联连接在Arduino的5V和GND之间。传感器和电阻的连接点即中间点引出信号线连接到Arduino的模拟输入引脚如A0。这样当传感器阻值变化时中间点的电压也会随之变化V_out 5V * (R_fixed / (R_flex R_fixed))。Arduino的ADC模数转换器将这个0-5V的电压转换为0-1023的整数值供程序读取。接线步骤将5个弯曲传感器的一端通常是一根引线分别连接到Arduino的5V引脚。将每个传感器的另一端另一根引线分别连接到Arduino的一个模拟引脚A0, A1, A2, A3, A4。将5个10kΩ电阻的一端分别连接到上一步中传感器连接模拟引脚的那根线上。将这5个电阻的另一端全部连接到Arduino的GND引脚。注意有些弯曲传感器有方向性哪边弯曲阻值增大接线时需统一方向或在代码中做反向处理。4.2 舵机驱动电路舵机有三根线电源红5V/6V、地线棕/黑GND和信号线橙/黄Signal。重要警告切勿将所有舵机的电源都接到Arduino板上Arduino板载的稳压芯片最大只能提供约500mA电流而一个微型舵机堵转时电流可能超过500mA五个一起工作极易导致Arduino重启或损坏。正确的供电方案独立电源准备一个5V/2A以上的直流电源如手机充电器改接或电池组如18650电池盒。电源分配将独立电源的正极和负极-接到面包板的电源轨上。舵机接线将所有5个舵机的红色电源线接到面包板的正极电源轨上将所有棕色地线接到面包板的负极电源轨上。同时务必用一根杜邦线将面包板的负极GND与Arduino的GND相连这叫“共地”是保证信号正常的基础。信号线连接将5个舵机的信号线分别连接到Arduino的数字PWM引脚。PWM引脚通常带有“~”标记如3, 5, 6, 9, 10, 11。你可以依次连接。4.3 电路检查与上电测试在连接电源前务必进行目视检查检查是否有短路特别是电源正负极是否被导线意外碰在一起。检查所有连接是否牢固。确保舵机电源来自外部电源而非Arduino的5V引脚。首次上电建议分步进行先只给Arduino通过USB线上电打开串口监视器运行一个简单的传感器读数程序检查每个弯曲传感器在伸直和弯曲时模拟引脚读数的变化是否正常通常在200-800之间变化。这可以排除传感器电路的问题。关闭Arduino电源连接好外部舵机电源。同时给Arduino和外部电源上电。此时应能听到舵机归位的轻微响声。运行一个简单的舵机扫掠程序观察每个舵机是否正常转动有无异常发热或抖动。5. 程序代码编写与逻辑剖析代码是项目的灵魂它定义了机器手如何“思考”和“反应”。我们将使用Arduino IDE进行开发并依赖强大的Servo库。5.1 基础框架与库引入首先我们需要引入舵机库并定义所有要用到的引脚和变量。#include Servo.h // 引入舵机控制库 // 定义5个弯曲传感器连接的模拟引脚 const int flexPinPinky A0; // 小指 const int flexPinRing A1; // 无名指 const int flexPinMiddle A2; // 中指 const int flexPinIndex A3; // 食指 const int flexPinThumb A4; // 拇指 // 定义5个舵机连接的数字PWM引脚 const int servoPinPinky 3; const int servoPinRing 5; const int servoPinMiddle 6; const int servoPinIndex 9; const int servoPinThumb 10; // 创建5个舵机对象 Servo servoPinky; Servo servoRing; Servo servoMiddle; Servo servoIndex; Servo servoThumb; // 用于存储传感器读数的变量 int flexValuePinky, flexValueRing, flexValueMiddle, flexValueIndex, flexValueThumb; // 用于存储映射后舵机角度的变量 int servoAnglePinky, servoAngleRing, servoAngleMiddle, servoAngleIndex, servoAngleThumb;5.2 传感器读数校准与映射这是代码的核心逻辑之一。传感器的原始读数0-1023需要被映射到舵机的有效角度范围0-180度。但直接线性映射往往效果不好因为传感器电阻变化不是完全线性的且每个人的佩戴松紧、手指弯曲习惯不同。最佳实践是进行“两点校准”在setup()函数中初始化舵机并打开串口用于调试。void setup() { Serial.begin(9600); // 启动串口通信波特率9600 // 将舵机对象关联到对应的引脚 servoPinky.attach(servoPinPinky); servoRing.attach(servoPinRing); servoMiddle.attach(servoPinMiddle); servoIndex.attach(servoPinIndex); servoThumb.attach(servoPinThumb); // 初始位置例如让所有手指伸直对应舵机某个角度需要根据你的机械结构调试 servoPinky.write(90); delay(500); // 给舵机时间运动到位置 // ... 初始化其他舵机 }在loop()函数之前定义两个关键的校准值。你需要通过实验获取flexMin: 当传感器完全伸直时读取到的模拟值。flexMax: 当传感器弯曲到最大程度时读取到的模拟值。// 示例校准值你必须根据实际测量修改 const int flexMin 350; // 伸直时的读数 const int flexMax 750; // 最大弯曲时的读数在loop()函数中实现带约束的映射。void loop() { // 1. 读取所有传感器的原始值 flexValuePinky analogRead(flexPinPinky); // ... 读取其他四个传感器 // 2. 将传感器读数映射到舵机角度并约束在0-180之间 // map(value, fromLow, fromHigh, toLow, toHigh) // constrain(x, a, b) 将x限制在a和b之间 servoAnglePinky constrain(map(flexValuePinky, flexMin, flexMax, 0, 180), 0, 180); // ... 映射其他四个角度 // 注意你可能需要将映射方向反过来即伸直对应180度弯曲对应0度这取决于你的机械安装方向。如果是反的将map的最后两个参数对调即可map(... , 180, 0) // 3. 将角度值发送给舵机 servoPinky.write(servoAnglePinky); // ... 控制其他四个舵机 // 4. 调试用将数据打印到串口监视器 Serial.print(Pinky: ); Serial.print(flexValuePinky); Serial.print( - ); Serial.println(servoAnglePinky); // ... 打印其他手指信息 delay(15); // 短暂延迟稳定读数也避免串口数据过快 }5.3 高级优化与滤波处理基础的映射程序可以工作但动作可能不平滑、有抖动。我们可以引入一些软件技巧来优化软件消抖传感器读数可能有微小波动。我们可以采用“移动平均滤波”即存储最近几次的读数然后取平均值。const int numReadings 5; // 平均采样次数 int readings[5]; // 存储历史读数的数组 int readIndex 0; int total 0; int average 0; // 在loop中更新平均值的示例 total total - readings[readIndex]; // 减去最旧的读数 readings[readIndex] analogRead(flexPinPinky); // 读取新值 total total readings[readIndex]; // 加上最新读数 readIndex (readIndex 1) % numReadings; // 循环索引 average total / numReadings; // 计算平均值 // 然后用这个average去进行映射死区设置当你的手保持静止时传感器读数可能仍有轻微变化导致舵机轻微抖动。可以设置一个“死区”只有当读数变化超过某个阈值如5个数值时才更新舵机角度。非线性映射如果你希望手指在轻微弯曲时反应灵敏在大力弯曲时变化平缓或反之可以不用map函数而自己编写一个非线性转换函数例如使用查表法或简单的指数函数。5.4 完整代码示例与注释结合以上所有要点一个更健壮的代码框架如下。你可以将此作为起点填入你自己的引脚定义和校准值。#include Servo.h // 引脚定义 const int flexPins[5] {A0, A1, A2, A3, A4}; const int servoPins[5] {3, 5, 6, 9, 10}; Servo servos[5]; // 创建舵机对象数组 // 校准参数 const int flexMin[5] {350, 340, 360, 330, 320}; // 每个手指伸直时的值 const int flexMax[5] {750, 740, 760, 730, 720}; // 每个手指弯曲时的值 // 滤波参数 const int numReadings 5; int readings[5][numReadings]; // 二维数组为每个传感器存储历史数据 int readIndex 0; long totals[5] {0,0,0,0,0}; // 每个传感器的读数总和 int averages[5]; // 每个传感器的平均值 void setup() { Serial.begin(115200); // 使用更高的波特率以便快速调试 for (int i 0; i 5; i) { servos[i].attach(servoPins[i]); servos[i].write(90); // 初始化到中间位置 // 初始化滤波数组 for (int j 0; j numReadings; j) { readings[i][j] 0; } } delay(1000); // 等待舵机就位 } void loop() { // 更新所有传感器的滤波后平均值 for (int i 0; i 5; i) { totals[i] totals[i] - readings[i][readIndex]; // 减去旧值 readings[i][readIndex] analogRead(flexPins[i]); // 读取新值 totals[i] totals[i] readings[i][readIndex]; // 加上新值 averages[i] totals[i] / numReadings; // 计算平均值 } readIndex (readIndex 1) % numReadings; // 更新索引 // 映射并控制舵机 for (int i 0; i 5; i) { // 映射注意这里是从弯曲传感器值映射到舵机角度。 // 如果你的机械结构导致方向相反交换最后两个参数 (0, 180) - (180, 0) int angle map(averages[i], flexMin[i], flexMax[i], 0, 180); angle constrain(angle, 0, 180); // 确保角度在有效范围内 servos[i].write(angle); // 串口输出调试信息可注释掉以提升速度 Serial.print(F); Serial.print(i); Serial.print(:); Serial.print(averages[i]); Serial.print(-A); Serial.print(angle); Serial.print(\t); } Serial.println(); // 换行 delay(10); // 主循环延迟 }6. 系统集成、调试与问题排查当机械、电路、代码都准备就绪后将它们组装起来并进行整体调试是项目从“零件”变成“作品”的关键一步。6.1 集成与初步测试佩戴传感器将弯曲传感器固定在一个手套的每个手指背面或者固定在一块可以套在手上的柔性板上。确保传感器在手指弯曲时能随之自然弯曲且固定牢固不会滑动。使用电工胶布或热熔胶固定时注意不要覆盖传感器的敏感弯曲区域。上电顺序先连接好所有电路检查无误。然后先打开外部舵机电源再给Arduino上电或通过USB连接电脑。这个顺序可以避免舵机因初始信号紊乱而产生“抖舵”现象。观察初始状态上电后所有舵机应转动到初始位置代码中setup()函数里设定的角度如90度。此时机器手应处于张开状态。轻轻弯曲你的手指观察对应的机器手指是否跟随运动。6.2 常见问题与解决方案在调试中你几乎一定会遇到以下一些问题。别担心这都是学习过程的一部分。问题现象可能原因排查与解决方法某个手指完全不动1. 舵机电源或信号线接触不良。2. 对应传感器电路断路或短路。3. 代码中引脚定义错误。4. 钓鱼线脱落或卡死。1. 检查该舵机的三根线是否接牢特别是信号线。2. 用万用表测量传感器两端电阻弯曲时是否有变化测量分压点电压是否随弯曲变化3. 核对代码中该手指对应的舵机对象是否attach到了正确的引脚。4. 检查机械部分手动拉动钓鱼线看手指是否灵活。手指运动方向相反传感器映射方向或舵机安装方向反了。在map()函数中交换目标角度范围例如将map(..., 0, 180)改为map(..., 180, 0)。或者将舵机在安装座上旋转180度。手指运动范围不足1. 传感器校准值flexMin/flexMax设置不准确。2. 钓鱼线在舵盘上的固定点离圆心太近。3. 舵机角度限制0-180未用满。1. 打开串口监视器观察传感器在完全伸直和最大弯曲时的实际读数更新校准值。2. 将钓鱼线固定在舵盘最外侧的孔上。3. 在代码中尝试将映射范围扩大到map(..., flexMin, flexMax, 20, 160)等找到机械极限对应的软件角度。手指运动不跟手有延迟1. 主循环delay()时间过长。2. 移动平均滤波的采样次数numReadings设置过大。3. 舵机响应速度慢。1. 减少或移除不必要的delay()。2. 将numReadings从5减小到3或2牺牲平滑性换取速度。3. 标准舵机速度是固定的无法通过代码大幅提升。舵机抖动、发热或发出异响1.供电不足这是最常见原因。2. 机械阻力过大关节卡死、线被绊住。3. 舵机到达极限位置仍被持续驱动堵转。1.立即断电检查外部电源是否达到5V/2A以上所有接线是否牢固线径是否太细。2. 手动转动关节检查是否顺滑。理顺钓鱼线路径。3. 在代码中确保映射后的角度被constrain在安全范围内如10-170度给机械留出余量。某个手指动作时其他手指也微动1. 电源波动导致。当一个大电流舵机启动时导致整体电压瞬间下降影响其他舵机。2. 代码逻辑问题但较少见。1.加强电源使用更大容量的电池或更稳定的电源适配器。在舵机电源正负极之间并联一个大电容如470uF 16V电解电容可以吸收瞬间电流冲击效果立竿见影。2. 检查代码中控制各舵机的语句是否独立。串口监视器数据乱跳或不变化1. 波特率设置不匹配。2. 传感器接触不良。3. 分压电阻值不匹配。1. 确保代码中Serial.begin(9600)与串口监视器右下角的波特率一致。2. 重新插拔传感器接线或焊接连接点。3. 尝试更换不同阻值的固定电阻如22kΩ或4.7kΩ使传感器在常用弯曲范围内的电压变化落在ADC量程的中间区域~2.5V灵敏度最高。6.3 精细调试与优化心得逐一调试不要试图一次性调试所有五个手指。先断开其他四个集中精力调好一个手指记录下它的最佳校准值、映射范围和机械调整点。然后再以此为基础调试下一个。每个手指的传感器特性、机械阻力都有微小差异需要单独微调。利用串口绘图仪Arduino IDE内置的“串口绘图仪”工具 - 串口绘图仪是调试传感器和映射关系的利器。它能实时图形化显示多个模拟引脚的数据。你可以一边弯曲手指一边观察曲线是否平滑、范围是否合适直观地调整代码。机械润滑在关节转轴处铁丝与泡沫孔之间涂抹一点点凡士林或润滑脂能极大减少摩擦让运动更顺滑、更安静同时降低舵机负载。“肌腱”路径优化确保钓鱼线在所有线扣中穿行顺畅没有急弯或摩擦点。线扣内壁也可以涂抹少许润滑剂。有时使用更光滑的编织线如风筝线比单丝钓鱼线效果更好。外观美化可选功能完成后你可以用轻质粘土、纱布和颜料装饰泡沫手指让它看起来更逼真。或者用3D打印更精致的关节零件替换泡沫提升整体质感和可靠性。完成以上所有步骤你的机器人手就应该能够流畅地跟随你的手势动作了。从一堆散乱的零件到最终一个协同工作的仿生系统这个过程充满挑战但最终的成就感是无与伦比的。这个项目所涉及的机械设计、模拟电路、信号处理、闭环控制虽然这里是开环跟随等概念是通往更复杂机器人世界的一块坚实基石。