做低成本类人机器人这事,我前后折腾了小半年,踩了无数的坑,最终把这套机械结构和电子系统的方案跑通了。类人机器人听起来很高大上,但落到实际的机械结构、电子系统这两个核心板块上,其实很多工作是在做取舍。本文就把我这套"中配"方案的完整思路、关键选型依据和实操过程分享出来,给同样想从零动手做一台有头有手、能走能动的类人机器人的朋友做个参考。
这套方案适合谁?适合刚入坑机器人、预算有限但动手能力还行的大学生创客、硬件爱好者,也适合想给科创项目打底子的团队。它的核心价值是:用相对低的成本,验证双足/多足运动控制、舵机伺服驱动、传感器闭环等类人机器人关键技术,同时留出充足的升级空间。我默认你有基本的焊接、3D打印和编程基础,如果你纯小白,文中的基础概念我也会尽量讲透。
1. 整体设计思路与方案选型
1.1 先从"你想让它做什么"反推需求
类人机器人这个词太宽泛,从手指头能动的仿生手到整机双足行走人形机器人,全都可以套这个壳子。如果一开始不看清楚自己的需求,你会发现预算像个无底洞,结构改来改去,最后连站立都费劲。
我给自己定下的目标是:整机高度40cm左右,四肢具备基本自由度,能完成缓慢行走、抬手、转头、简单抓取动作,主控端能够实时读取关节角度和姿态数据。基于这个目标,我把需求拆成三个功能等级:
- 基础功能优先级最高:稳定站立、重心调整、基础行走。
- 第二优先级是手臂动作:肩、肘两个关节自由度的控制。
- 第三优先级是头部和腰部的动作,增强机器人的"类人"观感。
这样排优先级,直接决定了后面的机械结构复杂度、舵机数量、供电功率和主控计算量。如果你想要的是一台能陪你散步的机器人,那整套方案就得推翻重来,底盘得换成轮式或更大型的双足结构,驱动也得升级成伺服电机加减速箱的方案。
1.2 选型逻辑:中配到底配在哪
"中配"在我这套方案里指的是:不用工业级的伺服电机,不用碳纤维结构件,不搞IPC(工业控制计算机)级别的算力;但同时也不能用玩具级别的舵机、亚克力板加扎带的组合,那样做出来的东西根本走不稳。
中配的核心思路是三个字:够用就行。具体拆解为:
- 运动控制芯片选择ESP32系列,兼顾Wi-Fi通信和IO口数量,算力能跑轻量级姿态解算。
- 舵机选择MG996R级别的大扭矩舵机,兼顾成本和力矩需求,关键关节(髋、膝)用金属齿轮舵机,手臂末端可用塑料齿轮舵机减重。
- 结构件主体采用PLA 3D打印配合少量铝合金型材和标准五金件,兼顾成型速度和结构强度。
- 传感器以MPU6050惯性测量单元为主,辅以接触式限位开关和简单的电位器角度反馈。
这套配置单看每个部件都很普通,但组合起来能实现的功能已经远超玩具,而且每换一个部件都有明确的性能驱动。我见过不少新手上来就买最贵的舵机,结果主控端根本没那么多PWM通道来独立控制,还得多花几百块买驱动板。这种多余开销在预算有限的场景下就是纯粹的浪费。
1.3 为什么不自研关节电机方案
类人机器人最核心的部件其实是关节执行器。工业界用的谐波减速器、行星减速器加高精度编码器方案性能很好,但成本动辄几千块一个关节,已经完全超出了入门体验的范畴。自研关节电机意味着你需要搞定FOC驱动、磁编码器校准、减速箱装配精度等一系列问题,没有个三五年经验根本做不出稳定的成品。
我最终选的是舵机方案:舵机内置减速齿轮箱和反馈电位器,位置闭环由内部电路完成,外部主控只需要发送PWM脉宽信号即可定位。这个方案的缺陷是精度较低、响应速度偏慢,但胜在结构简单、驱动方便,特别适合第一代原型机验证运动学和动力学模型。等算法跑通了,再换带CAN总线的高端串行总线舵机,整个运动控制层的代码基本可以无缝迁移。
1.4 仿真先行,结构后调
这里要提醒所有从零开始做机器人的朋友:千万别画完3D模型就急着打印装配。我强烈建议先建一个简单的运动学肌膜模型。所谓肌膜模型,就是不用SolidWorks或Fusion 360做严格的三维建模,而是把每个运动关节看作一个节点,用简单的杆件长度和角度范围搭一个可视化草图,去推演它动起来会不会自干涉、重心摆动范围能有多大。
这个阶段用到的工具很轻量,我用的是一份开源的2D运动学分析脚本,配合Python的numpy库做简单的坐标变换计算,就能算出双腿在不同姿态下重心的投影位置。这个方法能帮你尽早发现结构尺寸不合理的地方,比打印出来再返工要省得多。我自己就是在这个阶段发现初始设计的髋关节间距太窄,导致横向稳定性极差,在草图阶段改起来非常轻松。
2. 机械结构:低成本下的骨架搭建
2.1 材料选型:3D打印与切割件怎么搭
类人机器人的每个零件都处在"减重"和"加强"的矛盾之中。全用3D打印件,优点是加工方便、复杂结构随意做,缺点是强度有限、受热易变形;全用金属件,结实但加工难度大、成本高。中配方案的最佳实践是混合使用。
我的具体做法是:
- 承受弯矩大且频繁受力的结构件(大腿、小腿、胯部连接件),使用3D打印PLA材质,但提高填充率到70%,并在受力方向增加加强筋。
- 结构简单但需要精度的连接板、支架,采用3mm铝合金板线切割或手工锯裁,辅以角码和标准M3螺丝固定。
- 手臂、头部这类对强度要求相对较低的部件,用20%到30%填充率的PLA件即可,能显著降低整机重量。
PLA材料在受力时会有蠕变特性,长期静置在受力状态下会产生形变。这点在实际中会表现为机器人放一段时间后站姿慢慢变歪。解决办法是尽量避免让3D打印件长期承受拉应力,改用金属件承担主要的预紧力,打印件只做定位和随动。
2.2 自由度分配:关节数越多越好吗
类人机器人给人的直觉是关节越多越灵活,但每个自由度都意味着一路PWM信号、一组供电和一份结构重量。在一台40cm级的小型机器人上,盲目堆自由度只会带来灾难级别的调试复杂度。
我最终确定的自由度分配方案是:
- 每条腿5个自由度:髋部2个(前后摆、外展内收)、膝盖1个(前后摆)、脚踝2个(侧向摆动、前后摆动)。
- 每条手臂4个自由度:肩部2个、肘部1个、腕部1个(可简化)。
- 头部2个自由度:水平转和俯仰。
- 腰部暂不做独立自由度,通过髋部动作模拟腰部的转动效果。
共计20个自由度,MG996R舵机的响应速度来看已经是比合理不算低的配置。再多加自由度,舵机数量和重量会快速增长,主控处理周期变长,供电需求也会翻倍,性价比急转直下。
2.3 传动细节:舵盘、连杆和轴承
舵机本身自带减速齿轮箱,所以外部传动不需要再做减速比计算,但有几个细节直接决定最终运动质量。
- 舵机舵盘和结构件之间的连接,务必使用高强度舵盘,并在顶丝之外点一滴螺丝胶。否则运转几分钟后舵盘就会松脱,导致关节出现间隙。
- 多关节联动部位(如膝关节),在舵机转轴的另一侧增加一个滚动轴承作为支撑点,避免巨大的弯矩全部施加在舵机输出轴上。这个工艺非常关键,不加轴承的话舵机输出轴根部容易断裂或产生旷量。
- 连杆机构尽量使用对称的双连杆结构,减少结构在运动过程中的扭转。单边悬臂的连接件在受力时会产生明显的弹性变形,体现在动作上就是抖动和跑位。
2.4 重心控制与配重设计
双足机器人的核心难点不在"会动",而在"不倒"。重心垂线必须时刻落在双脚支撑面内,否则机器人就会向前或向侧倾倒。所谓稳定行走,本质上就是不断通过调整姿态,把重心投影控制在一个很小的区域内。
我在做完腿部结构后专门做了一个配重叠方案:在机器人胸口位置预留一个电池仓,电池本身1.2kg的重量可以作为活动配重块。通过调整电池安装位置,可以改变整机重心的高低和前后位置。实测下来,重心越低的机器人姿态收敛越快,运动中越稳。所以电池仓安装在胸口偏下的位置,而不是头部或背包位置。
另外一个常被忽略的要点是线束的布置。机器人在行走过程中线束会来回弯折,如果线束质量不均匀或者缠绕在某一边,相当于动态地改变了重心。我后来把所有线束都顺着结构件的走线孔理好,用螺旋管保护套固定,尽量避免左右不对称的悬挂重量。
3. 电子系统:机器人的神经与大脑
3.1 主控选型:ESP32为什么够用
类人机器人的主控端要完成的任务包括:接收上位机指令、读取姿态传感器数据、执行逆运动学计算、输出20路PWM波、处理异常状态。这些任务对算力的要求并不算高,但要求IO资源丰富、实时性可控。
我选择ESP32-WROOM-32作为主控芯片,原因是:
- 价格便宜,单颗模组10块钱出头,整个核心板采购不过三四十元。
- 拥有双核240MHz主频,一个核跑通信和逻辑,一个核跑PWM生成和传感器采集,互不干扰。
- 自带Wi-Fi和蓝牙,方便后续做手机或电脑的无线控制。
- 内置16通道LEDC(PWM控制器),配合软件扩展,可以输出20路以上的PWM信号。
如果你对实时性有更高要求,或者准备上视觉识别,那么需要再加一块协处理器,比如树莓派Zero 2W或者Luckfox Pico,专门跑图像算法,通过串口和ESP32通信。体积和算力之间需要再平衡,得看实际需求。我这个阶段没上视觉,纯靠传感器就够用了。
3.2 舵机供电设计:最容易翻车的一环
先说结论:不要用Arduino的5V引脚给多个舵机供电,甚至不要用小型USB充电宝引出的5V给舵机阵列供电。
舵机启动和堵转时瞬间电流非常大,MG996R在8V供电下堵转电流接近2.5A,20个舵机同时动作时瞬时总电流可以达到十几安培。如果供电能力跟不上,表现就是舵机无力、抖动、系统复位重启,让人头大。
我的供电方案是分级供电:
- 控制逻辑部分(ESP32、传感器)使用一路稳定的5V/2A DC-DC降压模块单独供电。
- 舵机部分使用独立的2S锂聚合物电池(7.4V,推荐2200mAh以上),通过一个UBEC或者大功率DC-DC模块降压到6V,输出电流能力需要大于10A(持续)和20A(瞬时)。
- 每个舵机的电源线和地线,都汇总到一个铜制接线排或大电流PCB转接板上,在物理上形成"星型供电",而不是串联手拉手接线。
大电流回路还需要考虑线径问题。舵机供电主线至少使用18AWG硅胶线,分线可以用22AWG或更粗。细线在大电流下会发热,电阻变大会进一步压降,形成恶性循环。
3.3 传感器方案:实现"感知-反馈-修正"
类人机器人必须能感知自身的姿态和关节位置,否则你只能做开环动作,即"动一下就不管了"。开环的后果是走几步就累积偏差,最后跌倒。
我在机器人上装了以下几类传感装置:
- 主姿态传感器:MPU6050六轴惯性测量单元(三轴陀螺仪+三轴加速度计),安装在机器人胸部的几何中心,通过I2C总线连接到ESP32。这是实现双足平衡的关键传感器。
- 关节角度反馈:每个舵机本身有电位器反馈,但读取它的模拟量比较麻烦。我的做法是在关键关节(髋、膝、踝)额外并联一个10kΩ旋转电位器,直接连接到ESP32的ADC引脚。这样能在控制层面实现关节角度闭环,而不只依赖舵机内部的位置环。
- 接触式地面感知:在每个脚底安装微动开关或薄膜压力传感器,用于判断脚掌是否完全着地。这个信号对行走步态中的支撑相和摆动相切换非常有帮助。
MPU6050的数据要经过一阶互补滤波或卡尔曼滤波才能获得稳定的角度值。直接读原始值会看到明显的噪声,特别是加速度计的振动噪声和陀螺仪的积分漂移。我在代码里用的是一阶互补滤波,权重系数需要实测调参,不同的安装位置、不同的机体刚度,最优权重都不一样。
3.4 通信与调试链路
调试阶段我一直用USB串口连接ESP32,通过串口监视器打印实时角度和状态信息。但无线调试能大大提升效率,尤其是机器人站着走动作时,拖着线缆会绊住脚。
我利用ESP32的Wi-Fi功能实现了一个轻量级的Web控制台:手机浏览器打开IP地址,就能控制机器人前进、后退、转头、抬手,还能实时看到每个关节的角度数值曲线。这个Web控制台用Arduino WebSocket库实现,大概几百行代码,但带来的调试便利性是无价的。
蓝牙手柄也是一个很好的控制方案,ESP32自带BLE功能,可以直接配对市面上的蓝牙手柄。游戏手柄的左右摇杆映射到左右腿的运动参数上,控制逻辑非常直观。
4. 实操过程:从零开始装配与调试
4.1 第一步:打印零件与装配骨架
具体打印零件之前,先把STL文件切片。PLA材料打印参数建议:
- 层高0.2mm,壁厚1.2mm,填充率在结构件上用70%,非承力件30%。
- 支撑要根据实际悬空面添加,关节孔位处务必检查支撑料是否能顺利去除。
- 打印底板保持平整,以防翘边引起装配精度问题。
装配顺序上,我建议先装腿部再装上身。具体流程是:先完成两条腿的髋、膝、踝关节装配,然后临时用一根横杆把两条腿串起来,手动转动各个关节,检查运动范围和干涉情况。确认没卡顿后,再安装胸部和臂部。
装配时一个很重要的习惯:每个舵机通电回中后,再安装舵盘和结构件。这样做才能保证软件上的中位和机械上的中位对齐。如果舵机在非中位状态装紧舵盘,后面写控制代码时会发现左右腿角度不对称,调整起来异常痛苦。
4.2 第二步:整机接线与供电测试
接线按电源线和信号线分区走。信号线(PWM、I2C、串口)尽量远离舵机电源线,以免舵机大电流时产生的电磁干扰耦合进信号线,导致舵机抽风抖动。
我踩过一次很深的坑:早期把PWM信号线跟6V舵机电源线捆在一起走,结果舵机一启动扭矩大时,ESP32的ADC读数就开始跳变,姿态解算完全不可用。后来把信号线全部换成带屏蔽层的双绞线并单独走线槽,问题才消失。
供电测试严格按"先控制后动力"的顺序进行:
- 先只给主控电路供电,烧录测试程序,串口确认ESP32和MPU6050通信正常。
- 再逐步给舵机供电,先不接负载,空载转动测试每个舵机的声音和温度。
- 最后整机通电,把机器人悬空吊起来做无负重Full-range运动测试,确认所有关节都能到达设计角度且没有异响。
4.3 第三步:站立姿态与重心调试
开机前先把机器人摆成设计的初始站姿,然后逐渐给各关节发送中位PWM值。观察机器人是否能在无外力扶持下保持直立。如果不能,需要从三个方向排查:
- 角度映射错误:某个关节的PWM角度方向反了,机器人会反着扭。处理办法是在代码中取反或交换PWM范围映射。
- 重心偏移:机体向某个方向歪斜,调整电池位置或加配重平衡。
- 机械限位:关节结构在运动到某个角度时被打印件卡住。用手掰一掰,找到干涉点后打磨。
站立稳定后,再测试姿态闭环。具体做法是:读取MPU6050的倾角,如果机体向前倾斜,则控制脚踝舵机向后摆动,形成一个虚拟的"不倒翁"机制。这个闭环的比例增益(P参数)从零开始慢慢加,加大到出现抖动就回退百分之二十,留出稳定裕度。
4.4 第四步:步态规划与行走调试
行走是最难的环节。我没有从零写复杂的ZMP(零力矩点)算法,而是采用了一种相对简单但实用的"静态步态"方案:
- 每次只移动一只脚,另一只脚始终在地面,保证机器人重心一直处于支撑面内。
- 步幅很小,每步约3cm,步态周期设为2秒以上。
- 每条腿按"抬起-前移-放下-站稳-再动另一条腿"的顺序执行。
步态序列在代码里写成一个状态机。初版代码直接用时间触发,后来改为用脚底压力传感器触发:只有当支撑腿完全踩实、重心稳定后,才允许下一动作开始。这大大提高了行走的成功率。
具体步态参数参考(以我的机体重心高约22cm为例):
- 抬脚高度:1.5cm(太高会重心不稳,太低会拖地)。
- 单步时长:1.2s左右。
- 髋关节前摆角度:15度。
- 膝关节对应弯曲角度:约10度(需要配合髋关节角度做运动学计算)。
实际调试时,先让机器人手扶着栏杆(比如贴墙)走路,确认步态时序没问题后再撤掉外部支撑。这个过程肯定摔很多次,建议给机器人加上一个小背包作为保护罩,至少能减少打印件的摔裂概率。
5. 成本清单与升级空间
5.1 中配方案成本详单
我这里把主要花费列一个参考清单,以2024年中市场价为准,单位是人民币:
| 项目 | 型号/规格 | 数量 | 单价 | 小计 |
|---|---|---|---|---|
| 主控板 | ESP32-DevKitC V4 | 1 | 35 | 35 |
| 舵机 | MG996R(金属齿轮) | 14 | 25 | 350 |
| 舵机 | SG90(小扭矩,手臂末端) | 6 | 8 | 48 |
| 姿态传感器 | MPU6050模块 | 1 | 12 | 12 |
| 电位器 | 10k旋转电位器 | 10 | 3 | 30 |
| 结构件 | PLA 3D打印耗材约1.2kg | 1卷 | 65 | 65 |
| 结构件 | 3mm铝合金板(含线切割) | 若干 | 60 | 60 |
| 电池 | 7.4V 2200mAh 2S锂电池 | 1 | 75 | 75 |
| 降压模块 | UBEC 5V/6V可调输出 | 2 | 18 | 36 |
| 线材五金 | 硅胶线、螺丝、铜柱、轴承、舵盘等 | 若干 | 80 | 80 |
总成本大约790元,加上备用件和运费,900元左右可以打住。如果家里已有3D打印机和基础工具,实际支出的现金还会更少。对比市面上动辄数千上万的成品双足机器人套件,这个方案的成本优势是很明显的。
5.2 钱花在哪最值得
预算有限时,把钱花在"会直接影响稳定性的部件"上最重要。
- 腿部关节的舵机绝对不能省,用MG996R档次是底线,再低一级的MG90S扭矩太小,带不动腿部结构,走路一定会抖。
- 电源模块不能省,一个虚标的"10A UBEC"会让你排查半天都找不到抖动根源。我建议买品牌厂家的正品,或者直接上两块并联,分担电流。
- 轴承非常便宜,但对关节寿命的影响非常大。所有受力关节都尽可能加装。
- 相比之下,外壳、装饰件、灯光这些完全可以用最低成本的方案搞定,甚至第一版直接不装外壳裸奔也行,省下的预算花在传感器上,获得的体验会好很多。
5.3 后续可升级的三个方向
这套架构留了充分的升级空间,后续想往哪个方向深入都有路径:
- 运动控制方向:把静态步态升级为使用ZMP理论的动态步态,引入PID控制器整定参数,但也需要更强的腿部执行器(串行总线舵机或直流无刷电机),成本会翻倍。
- 感知方向:加装激光雷达或深度摄像头模块,配合树莓派做SLAM建图和避障,这样机器人就有了环境感知能力,不再是盲人走路。
- 交互方向:加装一个带麦克风和喇叭的语音模块(比如离线语音识别模块),让机器人能听懂简单的语音指令,并做出回应。这块的成本很低,但体验提升特别明显。
6. 常见问题与排查实录
6.1 常见问题速查表
我这几个月遇到的问题少说也有几十个,把最典型的整理成一个速查表,碰到类似情况可以直接对照排查:
| 现象 | 可能原因 | 排查方法 | 最终解决方案 |
|---|---|---|---|
| 舵机抖动、定位不准 | 供电不足或PWM信号被干扰 | 万用表测舵机供电电压,示波器或逻辑分析仪看PWM信号 | 独立供电、信号线屏蔽与分槽走线 |
| 机器人总是向前倾倒 | 重心偏前或脚踝舵机力矩不足 | 检查电池位置,用手托住观察前倒趋势 | 重心后移配重,增大脚踝舵机行程范围 |
| 走路时一条腿拖地 | 抬脚高度不足或步态时序不对 | 观察拖地瞬间哪只脚着地 | 增加抬髋角度,优化状态机转换条件 |
| 舵机发热严重 | 负载过大或长时间堵转 | 手摸舵机温度,听声音判断是否堵转 | 减小运动加速度,优化机械间隙减少卡阻 |
| ESP32反复重启 | 舵机大电流导致主控供电跌落 | 测试舵机动作瞬间ESP32电源电压 | 控制电源与舵机电源完全隔离 |
| 姿态角度数值漂移 | 陀螺仪零点偏移或滤波参数不合适 | 静止时查看MPU6050原始输出 | 重新校准零点,调整互补滤波权重 |
6.2 独家避坑的经验之谈
除了上面能写成表格的参数问题,我再补充几个不能写成一行字的小经验:
第一,舵机中立位置的校准,一定要做成一键校准程序。我的做法是开机时自动遍历所有通道发中位PWM,并在串口打印每路通道的编号,逐一核对舵盘朝向。亲眼确认每个关节都在设计的初始角度,比什么调试技巧都重要。
第二,姿态闭环和步态逻辑分开调试,别一上来就合在一起。我最开始把MPU6050的倾角矫正直接耦合进步态状态机里,结果站立时踉踉跄跄,走路时疯狂抽搐。后来把姿态闭环单独做成一个独立模块,先纯站立测试,稳定后再在步态周期里叠加补偿量,逻辑清晰了很多。
第三,结构件务必做一轮"疲劳测试"。新装配好的机器人不要直接跑完整行走流程,先让它原地做前倾后仰动作100次,抬头抬臂交替动作100次,观察有没有螺丝松脱、打印件开裂、舵机异响。及时在上路前解决问题,否则很容易在一次意外的跌倒中损坏多块零件。
第四,注意电池电压变化对舵机扭矩的影响。锂电池从满电4.2V/节放到3.7V/节时,舵机实际获得的扭矩会明显下降,导致同一套参数在不同电量阶段的表现差异很大。稳妥的做法是在主控程序里实时监测电池电压,电压低于一定阈值时自动降低步态速度或增加站姿支撑时间。
6.3 一个值得投入的调试工具:上位机状态面板
如果你经常调试,只靠串口打印文字效率太低了。我后来花了一晚上时间写了简单的Python上位机,通过串口从ESP32接收JSON格式的状态数据,然后用matplotlib实时绘制各关节角度、机体重心和电池电压的曲线。
这个面板极大提高了排查效率。比如发现膝关节角度曲线在某个位置上有个小平台,就知道那个位置可能发生了机械卡滞。看到重心曲线带有周期性波动,就能推算出步态周期的动力学特征是否合理。
如果你的编程基础好,甚至可以把这个状态面板做成一个局域网页面,在浏览器里显示3D骨骼模型,实时映射机器人的姿态数据。这是我下一步打算做的功能。
最后换个话题,说说我个人的体会
做类人机器人这件事,最有趣的地方在于它是"机械结构、电子系统、控制算法、甚至心理学"的交汇点。每一次机器人的成功站立,背后都是多重学科知识被硬生生拧在一起后的结果。前期80%的时间都花在解决"结构装好了但舵机抖得跟筛子似的"这种琐碎问题上,但真正看到它迈出第一步的时候,那种成就感确实值得。
我的建议是:千万别等到所有材料都备齐了再动手。先把最基础的一条腿做出来,让它实现前后摆、侧摆和屈膝的动作,通电让它动起来,你就能感知到不少之前看图纸根本发现不了的问题。整条腿跑通了再复刻第二条,两条腿都稳定了再谈上身和交互。这种"先让局部动起来"的思路,会让你少走很多弯路。
如果你也准备下单材料动手做一台,我的忠告是:准备好足够的耐心和一把好用的尖嘴钳。前者用来应对调试,后者用来修剪打印件上的毛刺,这两样东西在整段旅程里都是必不可少的。