
四足机器人这几年从实验室一路火到产业圈波士顿动力的Spot、宇树科技的Go系列、小米的CyberDog几乎每隔一段时间就有新东西冒出来。但真正动手做过整机的人都知道从一张构型草图到一台能稳稳走两步的实物样机中间隔着的不是一两个灵感而是几百个需要拍板的工程决策。我前后参与过三轮四足平台的开发从最初用舵机拼的玩具级验证机到后来用无框力矩电机做的准工业级样机踩过的坑足够写一本小册子。这篇内容就把整条链路拆开讲——仿生构型怎么定、自由度怎么分配、运动学怎么建模、关节怎么选型、样机怎么装配调试每一步为什么这么做、不这么做会出什么问题都尽量说透。适合正在做机器人课程设计的学生、准备搭第一台四足平台的工程师以及想搞清楚四足机器人到底难在哪的技术爱好者。1. 仿生构型设计从动物骨骼到机构简图1.1 为什么四足构型不是照着狗画四条腿很多人第一次做四足机器人直觉就是找一张狗的骨骼图按比例把腿画出来。这个思路方向没错但直接照搬会掉进一个大坑生物的骨骼是连续变刚度、肌肉是分布式驱动的而我们的样机只能用有限的刚性连杆加旋转关节去逼近。所以仿生构型设计的本质是把生物的运动特征抽象成一组机构简图而不是做外形复刻。我在第一轮开发时就吃过这个亏。当时按杜宾犬的比例做了腿长分配大腿小腿比接近1:1结果样机站起来之后重心偏高静态站立时稍微受点侧向扰动就翻。后来才明白生物靠的是肌肉实时调节刚度和平衡我们的关节只能输出力矩没有那个柔性缓冲能力所以构型上必须留出更大的稳定裕度。正确的做法是分三步走先确定腿的拓扑结构几条连杆、几个关节、关节轴向怎么排再确定尺度比例大腿小腿长度比、髋关节偏置量、机身长宽比最后才是外形包络。拓扑决定运动能力上限尺度决定稳定性和能耗外形只是壳子。1.2 三种主流腿型拓扑的取舍目前四足机器人常见的腿型拓扑有三类我按实际使用体验做个对比拓扑类型关节配置优点缺点适用场景全肘式髋外摆髋俯仰膝俯仰结构简单、控制直观工作空间小、越障弱教学验证、平地行走全膝式髋外摆髋俯仰膝俯仰膝反向越障能力强、仿生度高逆解复杂、能耗偏高复杂地形、科研平台肘膝混合前腿肘式后腿膝式兼顾稳定与越障控制策略需分前后中高端样机我个人的经验是第一台样机优先选全肘式。原因很直接全肘式的运动学逆解有解析形式调试时你能快速验证是机械问题还是算法问题。全膝式虽然越障好看但逆解要处理多解和奇异位形新手很容易在到底是腿装歪了还是解算错了之间反复横跳。等第一台跑通了第二台再上全膝式心里就有底了。1.3 自由度分配12个还是8个自由度数量是构型设计里最需要克制的决策。常见配置是每条腿3个自由度髋外摆、髋俯仰、膝俯仰整机12自由度也有做8自由度的去掉髋外摆甚至更激进的做16自由度以上。去掉髋外摆能省4个电机重量和成本都降一大截但代价是侧向移动能力基本丧失。四足机器人靠髋外摆实现横移和转向时的足端侧向调整没有这个自由度转弯只能靠左右腿差速蹭过去在松软地面上会打滑。我实测过8自由度和12自由度两台样机在草地上的转向表现8自由度那台转90度要挪三四步12自由度那台两步到位差距非常明显。所以我的建议是只要预算和重量允许髋外摆一定要保留。如果实在要砍砍膝俯仰的行程范围都比砍髋外摆划算——膝俯仰行程小一点大不了抬腿矮一点但侧向能力没了是真的补不回来。1.4 尺度比例的工程约束尺度比例这块有几个经验值可以直接参考。大腿与小腿长度比建议在1:0.9到1:1.1之间太接近1:1会让腿在折叠时干涉差太多则站立时力矩分配不均。髋关节的侧向偏置量髋外摆轴线到机身中线的距离建议取机身宽度的0.3到0.4倍这个值影响侧向稳定性偏小容易侧翻偏大则横移时力矩需求飙升。机身长宽比控制在1.5:1到2:1比较合适。我见过有人做成接近正方形的机身结果前后腿容易打架步态规划时足端轨迹互相侵占。长一点虽然转弯半径大但步态空间干净调试省心。还有一点容易被忽略足端到髋关节的垂直距离站立高度。这个值直接决定关节力矩需求站立高度每增加10%髋俯仰关节的峰值力矩大约增加10%到15%。所以别一上来就追求高个子先按力矩预算反推一个合理的站立高度再微调。2. 运动学建模别急着上ROS先把纸上的账算清2.1 单腿正运动学D-H参数怎么填运动学建模是四足机器人开发的分水岭。我见过太多人一上来就装ROS、跑Gazebo结果模型和实物对不上查了三天发现是D-H参数填错了一个符号。所以我的习惯是先在纸上把单腿的正逆运动学推一遍用MATLAB或Python验证数值再进仿真。单腿的D-H参数建立关键是坐标系原点的选取。以全肘式腿为例我通常把基坐标系建在髋外摆关节轴线上Z轴沿外摆轴线方向。然后依次是髋俯仰、膝俯仰。每个关节的连杆长度、扭角、偏置量都要和机械图纸严格对应。这里有个实操细节D-H参数的符号约定一定要和你的电机正方向定义一致。我吃过这个亏机械上电机正转是抬腿但D-H里定义成负角度结果仿真里腿往上抬实物往下踩查了半天才发现是符号反了。后来我的做法是在机械装配完成后先手动给每个关节一个已知正方向的小角度记录编码器读数变化把这个实测符号写进运动学模型从源头杜绝符号错误。2.2 逆运动学解析解与数值解的实战选择单腿逆运动学给定足端位置求三个关节角。全肘式构型有解析解推导过程不复杂先用几何关系解出髋外摆角再把问题降到平面内解髋俯仰和膝俯仰。解析解的好处是快、准、无迭代实时控制里首选。但解析解有个前提目标点必须在工作空间内。实际步态规划时足端轨迹偶尔会飘出工作空间边界这时候解析解会算出复数或者无解。我的处理方式是加一层保护先判断目标点是否在工作空间内不在的话就投影到最近的边界点上同时给上层规划发一个警告标志。这个保护逻辑在调试初期救过我好几次避免了关节角突变导致的机械冲击。数值解比如雅可比迭代适合更复杂的构型但实时性差一般只在离线轨迹优化时用。如果你做的是12自由度全肘式老老实实用解析解别给自己找麻烦。2.3 整机运动学机身位姿与足端的关系单腿算清楚了整机运动学就是把四条腿统一到一个机身坐标系下。这里的关键是机身位姿的表示。我习惯用机身质心作为原点X轴向前Y轴向左Z轴向上。每条腿的基坐标系相对机身坐标系有一个固定的平移和旋转这个由机械装配决定。整机正运动学是给定关节角求足端在机身坐标系下的位置。整机逆运动学是给定机身位姿和足端落点求各关节角。后者在步态控制里用得最多——你先规划机身怎么走、脚往哪落再反解关节角。这里有个容易混淆的点足端落点是在世界坐标系还是机身坐标系下给的。我的建议是步态规划层用世界坐标系到了逆解层再转换到机身坐标系。这样机身姿态变化时落点在世界里是固定的脚不会跟着机身晃走起来才稳。2.4 用Python快速验证运动学模型在进仿真之前我强烈建议用Python把运动学模型跑一遍。不需要多复杂matplotlib画个3D散点图看看足端工作空间长什么样再随机采样一些目标点做逆解验证。import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 全肘式单腿逆运动学示例 def leg_ik(target, L1, L2, L3): x, y, z target # 髋外摆角 theta1 np.arctan2(y, z) # 投影到平面 r np.sqrt(y**2 z**2) # 髋俯仰和膝俯仰的几何解 D (r**2 x**2 - L1**2 - L2**2) / (2 * L1 * L2) if abs(D) 1: return None # 超出工作空间 theta3 np.arccos(np.clip(D, -1, 1)) theta2 np.arctan2(x, r) - np.arctan2(L2*np.sin(theta3), L1L2*np.cos(theta3)) return theta1, theta2, theta3 # 采样工作空间 points [] for t1 in np.linspace(-0.5, 0.5, 20): for t2 in np.linspace(-1.2, 1.2, 20): for t3 in np.linspace(0.2, 2.5, 20): # 正运动学算足端 pass # 此处省略正解展开这段代码的重点不是完整实现而是建立先验证再上机的习惯。我见过太多团队跳过这一步直接上实物调结果一个符号错误能耗掉一周。3. 关节驱动选型力矩账要算在买电机之前3.1 静力学估算站立时每个关节扛多少选电机之前必须先算清楚每个关节的力矩需求。最基础的是静态站立工况机器人静止站立时髋俯仰和膝俯仰关节要承受机身重量产生的力矩。估算方法很简单以单腿支撑相为例假设整机重量m由两条腿支撑对角步态每条腿承担m/2。足端到髋俯仰轴线的水平距离为d则髋俯仰关节的静态力矩约为(m/2)·g·d。膝俯仰关节的力矩要根据连杆角度分解。我一般会留2到3倍的安全系数。因为动态行走时冲击载荷可能是静态的1.5到2倍再加上加速度产生的惯性力矩安全系数不够很容易烧电机或者触发过流保护。3.2 动态力矩步态周期里的峰值在哪静态算完只是及格线真正决定电机选型的是动态峰值力矩。四足行走时力矩峰值通常出现在触地瞬间和蹬地瞬间。触地时地面反作用力有冲击蹬地时要克服机身惯性。我的做法是用一个简化的动力学模型跑一遍步态周期提取每个关节的力矩曲线取峰值再乘1.5倍作为选型依据。如果不想建动力学模型也可以用经验公式粗估动态峰值约为静态值的2到2.5倍。这里有个坑减速器的额定力矩和峰值力矩是两回事。很多行星减速器标称额定力矩但峰值只能短时承受。如果你的步态里峰值持续时间较长要按峰值选减速器或者加散热。3.3 电机类型对比舵机、无刷、无框力矩电机类型力矩密度控制精度成本适用阶段舵机低中低概念验证、教学无刷行星减速中高高中中小型样机无框力矩电机谐波高高高高性能样机我的建议是分阶段选第一台验证机用舵机或带减速的无刷电机先把运动学和步态跑通别在驱动上烧太多钱。等构型和算法稳定了第二台再上无框力矩电机加谐波减速器追求力矩密度和背隙指标。舵机的坑在于背隙大、响应慢做出来的步态会软绵绵但用来验证逆解和基本步态足够了。无刷电机加行星减速是性价比最高的中间方案背隙比舵机小一个量级力矩也够用。3.4 编码器与力控为什么位置控制不够只做位置控制的四足机器人走起来像僵尸步——每条腿硬邦邦地按轨迹走遇到地面起伏就要么悬空要么猛砸。要走出自然的步态关节力控或阻抗控制几乎是必须的。实现力控的前提是能测力矩。常见方案有两种一是电机电流环估算力矩成本低精度一般二是关节处加力矩传感器精度高成本高、结构复杂。我第一台样机用的是电流估算第二台加了关节力矩传感器对比下来传感器方案在触地检测和柔顺控制上优势明显但如果你只是做步态验证电流估算够用了。编码器的分辨率也值得说一句。关节位置编码器建议至少14位以上约0.02度分辨率低于这个值低速运动时会有明显的量化抖动。我见过用12位编码器的样机站立时腿会轻微哆嗦就是分辨率不够导致的。4. 样机装配与调试从零件到能走的第一步4.1 机械装配的顺序与公差控制装配顺序直接影响装配质量和效率。我的经验顺序是先装单腿再装机身最后整机联调。单腿装配时先把髋外摆关节装到机身连接座上再依次装大腿、膝关节、小腿、足端。每装完一个关节手动转动确认无卡涩再装下一个。公差控制是装配里最容易被低估的环节。四足机器人的关节同轴度要求很高如果两个轴承座不同心电机负载会急剧上升严重时直接卡死。我的做法是关键连接件用定位销加螺栓的双重定位而不是只靠螺栓。定位销能保证重复装配的同轴度拆装几次也不会偏。还有一个细节线缆走线。关节处的线缆要留足够的弯曲余量但也不能太松导致缠绕。我一般用螺旋缠绕管把线束固定在连杆内侧关节处留一个自然的U型弯这样关节全行程运动时线缆不会受拉。4.2 上电前的检查清单第一次上电是最容易出事的环节。我整理了一份检查清单每次新样机都照着过一遍所有关节手动转动顺畅无异响、无卡点电机相线、编码器线连接正确用万用表确认无短路电源电压与电机额定电压匹配限流值设置合理急停开关可用且放在手边机器人固定在支架上足端悬空上位机通信正常能读到所有关节编码器数据这份清单看着简单但每一条我都见过有人栽在上面。特别是限流值第一次上电一定要设小比如额定电流的30%确认方向正确后再逐步放开。我见过有人第一次上电就满电流结果一个关节方向反了直接把小腿连杆拧变形。4.3 单关节标定零位、方向、限位上电后的第一件事是单关节标定。三个内容零位标定、方向确认、限位设置。零位标定是让关节角在机械中位时编码器读数归零。我的做法是手动把关节转到机械设计的零位通常是腿垂直向下或水平然后软件置零。方向确认是给一个正角度指令看关节是否按预期方向转。限位设置是根据机械行程在软件里设软限位防止撞机械硬限位。这三步做完再逐个关节做小幅度正弦运动观察电流曲线是否平滑。如果某个关节电流有明显尖峰说明有卡涩或干涉要停下来查。4.4 站立调试从悬空到落地单关节没问题后进入站立调试。第一步是悬空站立机器人固定在支架上足端悬空给一个站立姿态的关节角指令看四条腿是否协调、机身是否水平。这一步主要验证逆运动学整机解算是否正确。第二步是落地站立把机器人放到地面上给站立指令观察是否稳定。这时候最容易出现的问题是足端打滑或机身倾斜。打滑通常是足端材料摩擦不够换橡胶垫或加纹理。倾斜则可能是四条腿的零位不一致或者机身重心偏了。我的经验是落地站立时先用手扶着机身感受一下机器人的脾气——它是往哪边偏、哪个腿发力大。这个手感对后续调步态很有帮助。4.5 步态调试对角步态的相位与占空比站立稳了就可以调步态。四足最基础的是对角步态trot对角两条腿同相另外两条反相。关键参数是占空比支撑相占整个周期的比例和相位差。占空比大于0.5时任意时刻至少两条腿着地稳定性好但速度慢。占空比小于0.5会有腾空相速度快但对平衡控制要求高。我建议从0.6开始调稳定后再逐步降到0.5甚至0.45。相位差就是对角腿之间的时间偏移trot步态是0.5个周期。调试时先慢速走观察足端轨迹是否平滑、机身是否有明显起伏。如果机身上下颠簸厉害通常是站立高度和步幅不匹配调整步幅或抬高量。这里分享一个实用技巧在足端贴反光标记用手机慢动作拍摄。回放时能清楚看到每条腿的着地时刻和轨迹比盯着数据曲线直观得多。我调第一台样机时就是靠慢动作视频发现前腿着地比后腿早了约0.1秒导致机身总是前倾。5. 常见问题排查那些让你怀疑人生的瞬间5.1 机器人走起来画龙左右不对称的排查链路画龙是指机器人走直线时左右摇摆。这个问题我遇到过三次每次原因都不一样。排查链路建议按这个顺序先查机械对称性四条腿的连杆长度是否一致、关节零位是否对齐。用卡尺量别靠眼睛看。我第二次遇到画龙就是右前腿的小腿连杆比左前腿长了2毫米肉眼根本看不出来。再查运动学参数左右腿的D-H参数是否用了同一套。有时候代码里复制粘贴改了一边忘了另一边。最后查步态参数左右腿的步幅、占空比是否一致。如果机械和运动学都没问题那大概率是步态规划里左右不对称。5.2 关节发热严重是电机选小了还是控制有问题关节发热是另一个高频问题。先区分是持续发热还是峰值发热。持续发热通常是电机选型偏小长期工作在额定电流以上。峰值发热则是控制参数太激进电流环带宽过高或位置环增益太大。我的排查方法是让机器人做标准步态记录每个关节的电流均方根值。如果超过电机额定电流的70%就是选型问题要么换电机要么减重。如果在70%以下还热就是控制参数问题降低位置环增益或加电流滤波。还有一个容易被忽略的原因减速器效率。行星减速器效率通常85%到95%谐波减速器只有70%到85%。如果用了谐波减速器发热会比预期高选型时要把这个损耗算进去。5.3 足端打滑与地面适应性足端打滑在光滑地面瓷砖、钢板上特别明显。解决方案分两层材料和控制。材料上足端用邵氏硬度40到60的橡胶比较合适太硬抓地力不够太软容易磨损变形。我试过用聚氨酯耐磨但偏硬在瓷砖上还是滑后来换成带纹路的丁腈橡胶改善明显。控制上可以加触地检测足端接触地面时关节电流会有一个突变检测到这个突变就调整步态相位。更高级的做法是加足端力传感器做阻抗控制让腿软着落地减少冲击和打滑。5.4 通信延迟与实时性控制周期怎么定四足机器人的控制周期直接影响步态质量。我的经验是关节级控制周期至少1kHz整机步态规划周期200Hz到500Hz。低于这个值步态会明显发飘。通信总线的选择也关键。CAN总线在1Mbps下一帧约130微秒12个关节轮询一遍约1.6毫秒够用。EtherCAT更快但成本高。我第一台样机用串口延迟大且不稳定后来换CAN步态质量立竿见影地提升。如果控制周期上不去先查通信瓶颈再查上位机算力。有时候是算法太复杂单次解算超过周期这时候要优化代码或降级算法。6. 从样机到平台下一步可以怎么走第一台样机能稳定走起来之后接下来的路其实更宽。我自己的路径是先在样机上把状态估计补上——加IMU做机身姿态估计加足端接触估计这样步态可以从盲走升级到感知走。然后尝试模型预测控制或虚拟模型控制让机器人在不平地面上的适应性更强。硬件上第二台可以考虑轻量化用碳纤维连杆替代铝合金用一体化关节模组替代分体式电机加减速器。我第二台样机比第一台轻了约35%同样的电机走起来轻松很多续航也长了。还有一个方向是感知加决策加深度相机或激光雷达做地形感知和落足点规划。这块我还在摸索目前的体会是感知数据噪声大直接用来规划落足点容易抖需要加滤波和置信度评估。最后分享一个我踩过的最大的坑别在样机还没走稳的时候就去追花哨的功能。我第一台样机刚能走两步就急着加跳跃结果把膝关节减速器打坏了修了两周。后来老老实实把基础步态调扎实再逐步加功能反而进展更快。四足机器人这行基础功就是一切构型、运动学、驱动、控制每一环都扎实了上层功能才立得住。