
做类人机器人这件事我前前后后折腾了大半年。第一版花了小两千块钱买舵机和打印件结果站都站不住第二版才勉强能走但走起来像根随时会断的面条。越做到后面越清楚所谓“机械结构和电子系统”看起来是两个方向实际上是一本账重心没算清电子系统再漂亮也白搭供电没做好机械结构再结实也只会抖成筛子。这篇文章想聊的是一台我做得比较顺手的“中配”低成本类人机器人。整高52cm左右16个自由度全重约3.5kg总成本控制在三千元以内。它的定位不是玩具也不是实验室级研究平台而是适合创客、学生和刚入坑的爱好者一步步搭起来、能跑基础步态、能挥手互动、能二次开发的实打实项目。全文会围绕机械结构设计里的材料、关节、重心与扭矩计算以及电子系统里的主控、电源树、总线通信这些容易翻车的点来讲尽量把普通教程不会写的细节都摊开。1. 把“中配”定义清楚目标、自由度和成本边界1.1 先回答一个关键问题花多少钱做到什么程度“低成本”这三个字在不同圈子里的含义差别很大。工业级双足机器人单是一条腿的谐波减速器就顶一台电脑那种成本没有参考意义。反过来如果用那种几十块钱的普通塑料舵机随便拼个架子那叫遥控玩具不叫类人机器人。在我看来创客圈说的“中配”类人机器人至少要满足三件事有足够多少自由度能完成基本的双腿站立和行走动作控制系统能读姿态传感器能根据反馈做修正而不是纯靠提前编好的固定动作通信链路和电源系统有扩展余地以后加传感器、加视觉模块不至于推翻重来。低配方案通常是MG996RPCA9685的经典组合舵机位置和动作全靠预设没有反馈负载能力也很差。高配方案则涉及无框电机、谐波减速器、动态步态控制和力传感器成本和工作量直接上一个数量级。中配的意义就在于用能在某宝买到的零件配合合理的机械和电子设计做出一台真正能走的类人机器人同时保留足够的二次开发空间。1.2 自由度分配16个关节是怎么定的自由度数目的选择直接决定了成本、结构和复杂度。我见过有人上来就做28个自由度结果光是调试关节零点就调了一个月。对于一台50cm级的机器人16个自由度是比较务实的配置。部位自由度布局说明头部2左右转头、上下点头左臂3肩部横滚、肩部俯仰、肘部俯仰右臂3同上左腿4髋部横滚、髋部俯仰、膝部俯仰、踝部俯仰右腿4同上没有给手臂加腕部自由度是因为这阶段的机器人不需要精细操作加多了反而让走线更麻烦、重心更难控制。腿部每条腿4个自由度是比较关键的髋部横滚用于侧向重心转移髋部俯仰用于抬腿迈步膝部负责整体抬升踝部俯仰则用来调节躯干前后倾斜。如果砍掉髋部横滚机器人只能做很僵硬的“原地抬脚”很难实现真正的交替行走。1.3 成本拆解钱到底花在了哪里这是我第二版机器人的实际物料成本价格取中位数浮动完全正常。项目选型数量单价元小计元下肢舵机35kg.cm级高压总线舵机81501200上肢舵机20kg.cm级高压总线舵机680480头部舵机9g小舵机22040结构件3D打印耗材、3mm铝板、轴承螺丝1套300300主控ESP32开发板13030姿态传感器MPU6050模块12525电源2S 2200mAh锂电池、分电极、开关1套150150通信模块TTL转单总线、线材、接插件1套8080工具杂项充电器、螺丝刀套装、万用表等1套200200合计约2500元。如果手头已经有工具和常用耗材实际新增购入可能只需要2000元左右。需要说明的是这个成本没有把个人工时算进去。机械零件打印可能要打十多个小时装配调试更是一遍又一遍地返工这些都是彻头彻尾的时间成本。2. 机械结构设计材料、关节和那笔必须算的扭矩账2.1 骨架材料3D打印加铝板是最省心的组合第一版机器人我用了纯3D打印PLA材质壁厚2mm填充率20%结果就是到处断。打印件在静置时看着挺硬一旦机器人摔倒或者关节受力很容易在层与层之间开裂。后来把主承力件换成3mm铝板打印件只负责外观覆盖和非承力连接整体强度才真正及格。我的建议是外壳和轻载结构用PETG或者ABS打印壁厚3-4mm填充率至少40%髋关节、膝关节这些主要承力位置用铝板切割成L形支架或工字形支架再用M3螺丝固定在打印件上。关节转轴处最好嵌入轴承不要直接让舵机轴去磨打印件否则磨损很快。大腿和小腿部分如果条件允许可以用碳纤维管或者铝合金方管做骨架打印件只做连接头。这样不仅减重明显而且能显著提高腿部刚性减少步态中的形变误差。对走路机器人来说结构上每1mm的弹性形变最终在脚底可能就变成好几度的姿态偏差这是非常致命的。2.2 关节执行器为什么选串行总线舵机做类人机器人可以选几种执行器普通PWM舵机、串行总线舵机、步进电机、直流减速电机。中配优先级最高的就是串行总线舵机原因很简单——它把位置反馈和通信协议做进了舵机内部主控只需一根信号线就能控制一整条总线上的所有舵机。普通PWM舵机的便宜但控制线一根关节一条16个自由度就要16条线走线已经够乱而且没有位置反馈主控完全不知道舵机实际有没有转到位。步进电机和直流减速电机扭矩大但需要额外的驱动器、编码器和减速箱成本和调试难度都上去了。用在中配人形机器人上属于杀鸡用了牛刀还给自己挖坑。总线舵机的缺点是速度和连续运转能力不如伺服系统但对于行走、挥手这种关节速度不快、占空比不高的场景它反而是最省心的选择。整机上一共14个总线舵机通过一根串行总线串联头部两个小舵机单独用PWM头部方向的线材和走线压力就小了很多。2.3 下肢扭矩估算一个不能跳过的数学小账选舵机时最常犯的错误是“差不多就行”然后机器人第一次站起来就把腿上的舵机憋得嗡嗡响。这里需要做一个很粗略但足够指导选型的计算。整机重量按3.5kg算髋关节到脚底的垂直高度约0.25m。机器人单腿支撑时如果重心偏离支撑脚中心5cm髋关节处需要的力矩为[ T m \times g \times L_{偏移} 3.5 \times 9.8 \times 0.05 \approx 1.715,\text{N·m} ]换算成舵机常用的单位约等于17.5kg.cm。但是这是静态值。实际行走过程中机器人身体会有前后摆动和冲击动态载荷能达到静态的2到2.5倍某些突然急停或者跌倒瞬间还会更高。所以下肢舵机的额定扭矩至少要留到35-44kg.cm这个量级我最终选择了额定扭矩35kg.cm、峰值扭矩45kg.cm左右的型号。上肢舵机的计算压力就小得多。手臂重量轻、转动速度要求低20kg.cm的舵机已经非常富裕。头部负载更小普通9g舵机就够了。这里也顺便提醒一句舵机标称扭矩通常是指在一定电压下的值电池电压降低后扭矩会明显缩水所以预留余量很有必要。2.4 重心和刚性站不稳的根源往往在结构不在算法很多人把机器人站不稳的锅甩给算法其实结构上的重心位置不合理算法再好也白搭。双足机器人稳定的核心就是让重心投影始终落在双脚组成的支撑多边形内部单脚支撑时要落在支撑脚脚掌范围内。实际设计中最重的电池和主控不要放头顶尽量放在胸腔偏下或者髋部附近。我的做法是专门做了一个髋部支架把电池和主控都装在髋部上方一点这样重心整体降低走路时的惯性力矩也小。第一版我把电池背在背后结果机器人每走一步都像要后仰摔倒后来把电池挪到髋部后立竿见影。结构刚性方面站立状态下腿部的允许变形量最好控制在2-3mm以内。如果打印件太软或者关节虚位太大舵机明明给了目标位置末端却因为结构变形没有到位整个步态就乱套了。解决方案是增加截面惯量、用肋板加强、减少关节处的层叠件数量同时给舵机轴和支架之间留足公差既不能太紧卡死也不能太松晃动。3. 电子系统主控、电源树与总线通信3.1 主控选择为什么ESP32就够用中配机器人不需要跑复杂视觉算法也不需要实时操作系统来保证微秒级的响应所以一颗ESP32开发板就够了。ESP32有双核、蓝牙、Wi-Fi还有多路UART和I2C价格只要三十块左右。手机通过蓝牙连上来遥控机器人非常方便后续如果想在机器人上做视觉再串一块树莓派或带摄像头的小板子也容易。如果以后要做复杂的步态规划和控制周期很高的算法可以考虑STM32F405或者F407作为底层运动控制核心上层再接Linux板卡。但那是高配路线。对当前这台16自由度的机器人来说ESP32在单个控制周期内完成状态机判断、IMU读取、舵机指令发送是完全没有压力的。3.2 舵机供电高压舵机加2S电池省掉一个大型降压模块电源系统是整个电子系统里最容易翻车的环节没有之一。第一版我选的是6V舵机用2S锂电7.4V供电必须加降压模块但普通降压模块根本扛不住多个舵机同时启动时的瞬态电流最后要么降压模块过热保护要么电压跌落直接把主控复位。第二版我直接全部换成支持6-7.4V的高压舵机用2S锂电直供省掉中间的大功率降压环节。这套方案的好处是舵机电源路径上少一个瓶颈电池放电能力直接决定整机性能。主控和传感器单独用一个小的DC-DC降压模块降到5V和3.3V不要从舵机电源线上取电。舵机动作瞬间电流可达好几安培逻辑电路和舵机共用电源非常容易被干扰。电源节点电压负载说明2S锂电池7.4V所有高压舵机直供XT30接口DC-DC降压5V主控板逻辑与舵机电源隔离线性稳压3.3VIMU、传感器从5V取电电源线和信号线必须分开走而且电源线尽量用20AWG以上粗线接头用XT30或XT60。多个舵机并联时建议用分电极或者自己焊一块分线板不要用杜邦线叠着插接触电阻很坑人。3.3 通信链路串行总线舵机的拓扑与避坑串行总线舵机的连接方式非常像LED灯串——主控的TTL串口经过一个半双工转换模块接入舵机总线然后所有舵机像菊花链一样并在一起。每个舵机有独立ID主控按照ID逐条发指令。这样16个舵机只需要一组电源线和一根信号线走到躯干再到腿部和手臂走线压力比PWM方案小一个数量级。我第一次接总线舵机时直接拿ESP32的TX/RX去连结果通信时好时坏舵机乱跳。原因在于串行总线舵机通常是半双工协议主机发送和接收共用一根线需要一个方向控制逻辑来切换普通MCU的UART是全双工直接硬接当然不行。后来加了一个几块钱的TTL转单总线模块才稳定。还有一个必须注意的细节所有舵机电源地要和主控逻辑地共地。如果地线没接好信号线上的压差会让通信乱码严重时甚至烧毁舵机控制板。每个舵机的ID必须唯一重复ID会导致总线上冲突所有舵机都不响应排查起来很麻烦。3.4 姿态传感器和控制分层为了让机器人能感知自己是站直还是倾斜我在躯干几何中心附近装了一个MPU6050六轴传感器通过I2C接到主控。原始加速度和角速度数据直接用的话噪声很大需要用姿态融合滤波算法比如Madgwick滤波或互补滤波输出稳定的欧拉角。控制软件我分成三层来写。最底层是舵机控制驱动发位置指令中间层是步态数据表按相位查表输出关节角度上层是状态机负责站在哪、迈左脚还是迈右脚、要不要挥手。这样做的好处是调试时可以先单独验证每一层不用每改一个数值就全家桶重来。下面是一段步态表的关键结构每个数组元素对应一个关节目标角度typedef struct { float hipRollL, hipPitchL, kneeL, ankleL; float hipRollR, hipPitchR, kneeR, ankleR; } LegPose; LegPose gait[4] { { 0, 10, -20, 10, 0, 0, 0, 0 }, // 双足站立 { 0, 15, -25, 10, -5, -8, 12, -6 }, // 右腿迈出 { 0, 0, 0, 0, 0, 15, -25, 10 }, // 右腿支撑 { 0, -8, 12, -6, 0, 10, -20, 10 } // 左腿迈出 };实际上不能把这个数组直接发给舵机相邻状态之间要做插值平滑否则舵机会以最大速度猛抽产生很大的惯性冲击。最简单的做法是每20ms更新一次目标角度每步只增加很小一个增量让关节平滑过渡。4. 装配与调试真正的细节全在这4.1 装配顺序和走线技巧装配顺序强烈建议自下往上先装腿再装躯干再装手臂和头部。理由是腿部是所有结构中最复杂、最容易返工的部分先把它调通了再往上装其他部分后面出问题的时候不用把整个机器人拆开。走线也是个大坑。舵机线如果不做固定机器人一动就容易被关节夹住轻则断线重则直接短路。我后来用螺旋管把所有线束套起来沿着舵机支架内侧走在关节活动范围的侧面留出足够的弯曲余量。每到一个舵机把线束用扎带固定在结构件上避免线材被反复拉扯。装舵机舵盘是个很讲究的环节。先把舵机通电让它回到零点位置然后再装舵盘和连接杆保证机械零点尽量接近电气零点。如果这一步没有对齐后面标定的偏移量差异太大会导致某些动作刚到极限位置。4.2 通电前的检查清单第一次上电之前我把机器人倒挂在支架上所有舵机臂先不装只给舵机总线供电和通信。这时要确认两件事第一每个舵机ID都能被扫描到且没有重复第二逐个发送指令确认舵机转动方向和控制方向一致。很多舵机可以反向安装如果不先验证方向装好后动作全反排查起来非常痛苦。确认完舵机方向和范围再装上舵机臂让机器人悬空测试各关节全行程运动。悬空状态下没有地面摩擦力一旦某个关节卡住很容易发现舵机异响或发热。最后才让机器人落地站立并且先用手扶着等它稳定下来再松手。整个过程中一定要有一个物理急停开关直接切断舵机电源遇到异常立刻按掉不要指望程序里那套保护。4.3 零点标定和步态调试所谓零点标定就是让机器人摆出一个标准站姿然后记录每个舵机当前角度相对于目标零点的偏差把这些偏差存入一个偏移数组。每次发送位置指令时实际值等于目标值加上这个偏移。没有这一步机器人一站起来可能就是歪的甚至单腿悬空。步态调试从原地踏步开始频率要低每一步给足两秒钟让机器人有时间稳定。先不要急着让它前进。观察每一步落地时躯干有没有明显倾斜如果倾斜通过IMU数据看是往哪个方向偏然后去调整对应髋关节或踝关节的补偿量。PID参数调试是这阶段最痛苦的环节。P太大会持续振荡P太小则站不稳I能消除持续漂移但调太大会导致过冲D可以抑制振荡但会对噪声特别敏感导致舵机高频抖动。我的经验是先全部置零只加P一点点加到机器人勉强能站稳然后加D抑制回摆最后再加一点点I消除漂移让站立姿态在几秒钟内趋于平稳。4.4 踩坑记录总线冲突、供电跌落和舵机振荡先说总线冲突。有次我组装完发现整条总线上所有舵机都不响应排查了半小时最后发现是两个腿部舵机在标定时用了同一个ID。解决方法是把这两个舵机单独接到转换模块上重新分配ID写到EEPROM里。之后我每次装新舵机都会先单独扫描ID确认唯一再并联到总线上。再说供电跌落。机器人在平地走了不到两步ESP32突然重启但机械结构没有卡滞。排查后发现是舵机瞬间电流把7.4V的电压拉低太多虽然经过DC-DC降压给主控供电但DC-DC本身需要足够压差输入电压掉到它的最低工作电压以下输出就失稳了。后来我在舵机电源端并联了两个1000uF的电解电容同时把给主控供电的DC-DC输入端直接从电池端取不和舵机走同一段分电极问题就解决了。这里也推荐看一下南京邮电大学电子系统相关课程和课设资料里面关于电源完整性、地线处理的讲解对理解这种供电跌落和共地干扰的问题很有帮助。最后是舵机振荡。行走一段时间后有些舵机会莫名其妙地高频抖动不是算法上的震荡而是信号受干扰导致的误指令。处理方法是把信号线换成双绞线电源线和信号线尽可能分离必要时在舵机信号线上装一个小磁环。如果舵机总线上传输距离过长还需要在半双工模块的输出端加匹配电阻否则反射信号会让通信误码率明显升高。5. 实测效果和下一步升级方向5.1 目前能做到什么程度调试完成之后这台机器人在平整地面上能连续走大概5到8米步速很慢大约0.1m/s但胜在稳定。它能完成原地踏步、前进、后退、转向还能按指令挥手和点头。通过手机蓝牙连接后可以用一个很简单的上位机发送动作指令头部也能追踪遥控器的方向做偏转。续航方面2S 2200mAh电池能支撑大约二十分钟的断续运行如果是连续行走会短一点。这个水平离“人形机器人”这四个字还差得很远但作为从零开始亲手搭出来的项目验证机械结构、电子系统和控制链路的核心目标已经达到了。5.2 接下来往哪升级如果继续做下去我下一步首先会加足底压力传感器。有了足底压力分布就能实时估算重心位置配合IMU做ZMP控制比单纯靠姿态角反馈要稳定得多。其次在每条腿上加踝部横滚自由度让机器人具备侧向调节能力这样在不平整地面上也能主动纠正姿态。更高一层的升级是控制算法从查表步态切换到基于运动学或者简化倒立摆模型的动态步态。再往后可以接一个树莓派在上层跑视觉识别或者语音大模型让机器人不仅会走还能看、能听、能对话。这些都离不开一套稳定的机械结构和电子系统底盘而这篇文章想表达的核心就是在中配的预算和复杂度范围内把底盘做扎实比追求高级算法更重要。如果让我把这台机器人重新做一遍我想到的第一件事不是选更好的舵机而是先花两天时间把重心位置和关节扭矩清单算清楚再动手画图。这个项目最大的收获并不是机器人最后能走那几步而是让我真正理解了机械结构、电子系统和控制算法之间的关联。机器人这东西永远有下一个坑在等着你也正因为这样才让人持续想往里跳。