尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
双足机器人踝关节的2-RSS-1U并联机构与雅可比力矩控制
做双足机器人这些年踝关节一直是我最不愿碰又不得不啃的部分。它结构上不像髋关节和膝关节那样能砸大扭矩电机却要在单腿支撑时扛住整个机体的重量还要在摆动相里快速完成姿态调整。更麻烦的是它的工作空间小、负载变化剧烈用传统的位置式串联结构做末端抖动和关节间隙能让你怀疑人生。这也是我后来把目光放到并联结构上的原因具体来说就是标题里的 2-RSS-1U。这个机构配合雅可比矩阵做力矩控制是把双足机器人从“能站住”推向“能走起来”的关键一步。如果你的项目也卡在踝关节刚度不足、走起来发飘、或者单腿支撑时电机过流报错这篇文章里的建模仿真、控制器搭建和调试顺序应该能帮你少走不少弯路。我会按实际项目的推进顺序把从机构原理、雅可比推导到力矩控制跑通的每个环节包括中间踩过的一些坑都尽量讲透。1. 为什么是2-RSS-1U从机构选型说起1.1 踝关节的本质需求踝关节在双足机器人里承担的任务非常纯粹在支撑相调节身体姿态在摆动相把脚掌调整到期望落点。这个任务看似只有俯仰背屈/跖屈和滚转内翻/外翻两个方向但对刚度和冲击耐受性的要求极高。单腿支撑时地面反力会以足底为支点产生很大的力矩串联驱动踝关节通常把电机放在小腿上再通过连杆或滚珠丝杠传递到脚掌这套方案最大的问题是关节耦合误差会在行走冲击下被放大走起来容易有一种“脚踝发软”的感觉。并联机构的特点恰好反过来多个驱动支链同时约束动平台刚度大、惯量小、动态响应快而且中心区域可以掏空方便走线或者安装力传感器。对比过几轮后我选择的是2-RSS-1U构型也就是两条RSS驱动支链加一个中心U副的2自由度并联机构。1.2 构型拆解R、S、U到底是什么很多做控制的同学一看到机构缩写就头皮发麻。简单拆一下RRevolute是转动副只允许一个方向的旋转。SSpherical是球副允许三个方向的旋转。UUniversal是虎克铰允许两个正交方向的旋转。2-RSS-1U的含义是静平台和动平台之间用一个中心U副连接限制掉三个平动自由度在U副两侧各布置一条RSS支链支链一端由电机驱动的R副提供动力另一端通过连杆和两个球副连接动平台。两条支链的驱动输入合起来正好控制动平台绕U副两个正交轴转动也就是踝关节的俯仰和滚转。这个构型相比常见的3-RSS或者6自由度并联平台自由度更精简、控制模型更友好。尤其是中心U副承担了主要的力传递路径RSS支链只需要负责驱动和辅助支撑整机的承载能力有了明确的主次之分设计校核时思路非常清晰。1.3 样机参数与关键部件我做实验用的样机大致参数如下动平台半径60 mm静平台半径90 mmU副中心到球副连接点的距离35 mmRSS连杆长度85 mm驱动方式两个无框力矩电机 行星减速器减速比约 6:1关节角度工作空间俯仰 ±25°滚转 ±20°足底安装六维力/力矩传感器这个尺寸不是拍脑袋定的。并联机构的工作空间、奇异分布和力传递性能和三组关键尺寸直接相关。我当时用简单的几何约束在MATLAB里扫了一遍参数目标是让踝关节在正常行走的典型角度范围内力传递性能尽量均匀。行走到落地冲击时踝关节峰值力矩很容易冲到 30 N·m 以上按这个反推电机连续力矩、减速比和安全系数基本就定下上面这些参数了。2. 运动学建模从几何关系到速度关系2.1 坐标系与姿态描述要写运动学第一步是建立坐标系。我在静平台中心固定基坐标系 {B}在动平台中心固定平台坐标系 {P}。因为中心U副有两个转动自由度我用两个欧拉角来描述动平台姿态α 表示绕x轴的内翻/外翻角β 表示绕y轴的背屈/跖屈角。这里有一个细节值得注意U副的两个转动轴在结构上完全正交但在控制模型里动平台的转动顺序会影响旋转矩阵的写法。如果不统一约定后面算雅可比时很容易差一个耦合项。我最终采用的是先绕x轴转α、再绕新y轴转β的方式所有代码和矩阵推导都沿用这个约定。2.2 逆运动学求解逆运动学用于已知 α、β 求解两个电机转角。这是后续求数值雅可比的基础。图中的几何回路可以写成对于支链 ii1,2从静平台的电机转轴点 A_i 出发经过连杆矢量 L_i到达动平台上的球副连接点 B_i。B_i 在基坐标下的位置可以直接通过动平台姿态和平台半径算出来而 A_i 是固定的电机转轴位置所以连杆矢量可以写成L_i B_i - A_i连杆长度是固定值记为 l_i。那么约束方程就是|L_i|^2 l_i^2其中 B_i 中已经包含了电机转角 θ_i 对球副安装点位置的影响。实际建模时需要把每个支链的 R 副转动中心到球副中心的偏置量也写进去不然在较大角度下会有可以测量到的误差。求解时用牛顿迭代或直接几何法都可以两条支链的解析几何求解并不难我甚至先在CAD里建了模型用SolidWorks的草图尺寸驱动验证了一组关键角度下的几何关系才把方程固化进代码。2.3 正运动学与数值雅可比正运动学已知两电机转角求 α、β在并联机构里没有显式解通常用数值迭代法。但对于控制而言真正重要的是雅可比矩阵。所谓雅可比矩阵本质上是“关节速度 → 动平台角速度”的线性映射[ω_α, ω_β]^T J · [θ̇_1, θ̇_2]^T这里 J 是 2×2 矩阵。理论推导可以用螺旋理论或者对约束方程求全微分但我更推荐工程上直接做数值雅可比在每个控制周期里在当前的 α、β 邻域内加一个微小扰动比如 0.001 rad用逆运动学算出对应的电机转角变化量差分之后就得到雅可比矩阵的每一列。这个方法的好处是几乎不需要额外推导任意并联构型都能套用缺点是会增加一些计算量。实际上在嵌入式平台上计算这个2×2矩阵每个周期消耗的时间不到微秒级完全没有性能压力。代码框架大致是void computeJacobian(double alpha, double beta, double J[2][2]) { double delta 0.001; double th1_0, th2_0, th1_da, th2_da, th1_db, th2_db; inverseKinematics(alpha, beta, th1_0, th2_0); inverseKinematics(alpha delta, beta, th1_da, th2_da); inverseKinematics(alpha, beta delta, th1_db, th2_db); J[0][0] (th1_da - th1_0) / delta; J[1][0] (th2_da - th2_0) / delta; J[0][1] (th1_db - th1_0) / delta; J[1][1] (th2_db - th2_0) / delta; }注意这里雅可比矩阵的定义方向我统一用“动平台速度 J × 关节速度”所以后续力的映射要用 J 的转置。3. 力矩控制核心为什么是J的转置而不是逆3.1 静力映射的物理含义雅可比矩阵在速度层面的含义大家都熟但在力矩控制里真正起作用的是它的转置。原理一句话利用虚功原理。在不考虑损失的情况下驱动电机输入的虚功率必须等于动平台输出端踝关节处产生的虚功率。设在电机端施加的力矩矢量为 τ[τ_1, τ_2]^T动平台端的广义力矩为 T[T_α, T_β]^T对应 α 和 β 两个方向的力矩速度满足 ω J·θ̇那么τ^T · θ̇ T^T · ω T^T · (J · θ̇)由于 θ̇ 任意所以τ J^T · T这就是力矩控制里最关键的一行公式。它说明如果我希望在踝关节处产生一个绕某轴的净力矩可以通过雅可比矩阵的转置直接算出两个电机各自需要输出多少力矩完全不需要去解复杂的逆动力学。3.2 一个实际算例假设机器人单腿站立时质心相对于踝关节在前方偏移了 20 mm整机质量 40 kg那么为了维持平衡踝关节至少要提供大约T_α m · g · d 40 × 9.8 × 0.02 7.84 N·m的俯仰方向力矩。如果这时算出来的雅可比矩阵是J [ [0.31, 0.12], [0.09, 0.28] ]那么电机端力矩就是τ J^T · [7.84, 0]^T [7.84×0.31, 7.84×0.09]^T ≈ [2.43, 0.71] N·m再除以减速比和传动效率就能得到电机的电流指令。这个计算在每个控制周期都要做而且雅可比矩阵会随 α、β 实时变化所以不能离线算一次就完事。3.3 奇异位形力矩控制的炸雷区雅可比矩阵是转置关系但它的数值特性直接决定力矩控制的质量。当雅可比矩阵的行列式接近0时机构处于奇异位形意味着在某些方向上无论给多大电机力矩动平台都产生不了期望的力矩输出。双足机器人踝关节的奇异位形一般出现在大幅内翻或外翻的边缘位置。我吃过亏第一次让机器人做较大幅度的横向重心转移时踝关节角度接近边界雅可比矩阵病态力矩指令在代码里看起来正常但实际作用到平台上的力方向严重偏离预期机器人一下子就跪了。后来我在每个控制周期里同时计算雅可比矩阵的行列式绝对值和条件数一旦接近预设阈值就限制该方向的控制增益同时给上层步态控制器发送报警信号不再盲目加大力矩。4. 力矩控制系统的完整搭建与调试4.1 系统架构与通信带宽我用的控制架构分为三层最上层步态规划与状态机在PC或NUC上运行250 Hz中间层实时运动控制器STM32H7系列500 Hz 运行运动学和控制律底层两个电机驱动器力矩模式1 kHz 电流环刷新这里要对“力矩模式”做个解释。力矩模式本质上是电流环闭环控制驱动器的目标是让电机相电流跟踪指令值从而输出期望力矩。要输出7.84 N·m的踝关节力矩除以减速比6和传动效率0.85后电机轴端需要大概1.54 N·m再除以电机力矩常数 K_t就得到电流指令。整个链路是踝关节期望力矩 → 雅可比转置 → 电机期望力矩 → 电流指令 → 驱动器输出。通信用的是EtherCAT总线和驱动板通信。实测下来从运动控制器发出指令到驱动器真正执行延时大约在1~2 ms之间。这个延迟在静态支撑时无感但在摆动相末端会明显增加脚掌落地时的冲击所以行走速度往上提之后我把中间层的控制频率提升到了1 kHz并把力矩指令做了一级低通滤波截止频率设在30 Hz左右滤掉机械谐振。4.2 重力补偿与摩擦前馈纯力矩控制不能只算雅可比转置。踝关节在支撑相还要克服小腿和脚掌自身的重力以及并联机构内部的摩擦。这些不补偿掉即使给出期望力矩指令实际作用在平台上的净力矩也是不准的。重力补偿项的做法是把小腿质心位置建模计算在当前姿态 α、β 下小腿和脚掌自身的重力在踝关节处产生的力矩 G(α,β)然后给它加到前馈项里。注意方向要和期望力矩做矢量叠加。摩擦补偿我采用的是库仑黏滞摩擦模型τ_friction f_c · sign(θ̇) f_v · θ̇其中 f_c 和 f_v 是两个电机端常数通过让电机在力矩模式下缓慢往复扫动记录实际转角曲线再用最小二乘拟合出来的。摩擦参数不用做太准能补偿掉70%到80%就不错了剩下的交给反馈环节处理补偿过头反而会引起极限环振荡。完整的控制律可以写成τ_cmd J^T · (T_des G(α,β)) τ_friction在这之后我还叠加了一个小增益的PD反馈用于纠正实际踝关节角度与期望角度的偏差。纯力矩控制的稳态精度其实一般尤其在摩擦非线性和负载变化的情况下如果没有角度反馈做修正踝关节的实际姿态会慢慢漂移。4.3 调试顺序从空载到整机我强烈建议按以下顺序调试不要一上来就整机行走第一步空载调试把踝关节模块单独放在桌上不给任何期望力矩在力矩模式下手动转动平台观察两个电机是否被动跟随同时验证雅可比矩阵的实时计算是否正确。具体验证办法是给定一个固定 T_des观察平台是否产生对应方向的力矩。第二步加载砝码在动平台上挂已知重量的负载给定重力补偿检查踝关节在不同角度下能否稳定悬停。这一步能暴露重力模型和摩擦参数的最大误差。第三步单腿站立让机器人单腿站立另一条腿蜷起用踝关节做姿态调节。先只做静态平衡再逐渐加入横向重心转移扰动。第四步带步态行走先在地面上拖着走再把摆动腿抬起完成小步幅行走。第一次做第三步的时候我的机器人能站住但会以大概1 Hz的频率前后晃动原因是踝关节力矩反馈增益太高与机器人质心的倒立摆模态耦合。降到0.6倍后明显稳了。这种调参经验没法通过理论精确推算只能靠现场看曲线。5. 从踝关节到双足动态行走实际集成中的关键问题5.1 支撑相和摆动相的力矩需求差异双足行走并不是每时每刻都需要踝关节输出大力矩。我把步态周期拆成两个阶段来看支撑相踝关节承受整机重量主要任务是产生姿态纠正力矩和推进力矩。此时应以力矩控制为主导力矩参考来自上层步态规划给出的质心误差反馈和足底力传感器反馈。摆动相腿部几乎不受力踝关节需要快速完成轨迹跟踪让脚掌以合适的姿态落地。此时应采用位置控制或阻抗控制降低踝关节柔顺度避免落地瞬间产生刚性冲击。切换逻辑我用的是足底力传感器判断当支撑腿的垂直反力超过体重阈值比如30%该腿踝关节切到力矩模式低于这个阈值则切到位置模式。切换瞬间会出现力矩跳变需要加斜坡过渡斜坡时间大约200 ms才能平滑。5.2 足底力反馈与雅可比矩阵的闭环六维力传感器安装在脚掌和踝关节动平台之间它能直接测量地面反力在踝关节处产生的等效力和力矩。这个值非常有用它一方面可以用来做ZMP估计另一方面也可以作为力矩控制的反馈量。实际控制时我并不是直接开环输出期望力矩而是把足底力传感器测到的实际踝关节力矩 T_feedback 和期望力矩 T_des 做差生成修正项T_ref T_des K_p · (T_des - T_feedback) K_d · (Ṫ_des - Ṫ_feedback)然后再经过雅可比转置映射到电机端。这样即使模型里的重力补偿和摩擦补偿有误差反馈项也能把它压回去。5.3 实测效果和关键参数把上述链路全部打通后机器人可以以0.3 m/s的速度稳定行走大约几分钟步幅约10 cm横向扰动容忍度大约能到5度左右。对整个系统影响最大的参数一个是雅可比矩阵更新的频率我最后固定在1 kHz如果降到500 Hz以下能明显感觉到踝关节力矩输出有滞后感另一个就是力矩斜坡时间。我把几个关键调节参数记录在下面参数数值说明控制频率中间层1 kHz太低会明显抖动力矩指令低通截止频率30 Hz滤除机械谐振支撑相切换阈值30%体重力传感器判断切换斜坡时间200 ms力/位切换平滑PD角度反馈增益P8, D0.3附加修正不宜过大奇异阈值行列式0.05 降增益防止力矩失控这个过程并不是一次性跑通的。第一次整机行走时机器人只迈了两步就摔倒原因不是力矩控制本身而是切换斜坡太短导致脚掌落地瞬间踝关节从位置模式硬切到力矩模式产生了一个大约 8 N·m 的力矩冲击直接把重心顶偏了。把斜坡拉长到200 ms后这个问题才消失。6. 常见问题与排查技巧实录6.1 力矩模式下电机发出尖锐噪声并抖动这是并联机构力矩控制最常见的现象通常是电流环和机械谐振耦合了。排查思路先在驱动器端把电流环带宽降到默认值的50%再在力矩指令前端加低通滤波。如果依然抖动检查雅可比矩阵是否在当前位置接近奇异奇异位形下很小的力矩指令会让个别电机电流出现剧烈波动。还有一个容易被忽略的点两根RSS支链的机械间隙。并联机构对间隙非常敏感球副如果磨损间隙就会造成力传递的方向偏差表现为低频频段发出类似“咯噔”的响声。需要定期检查关节轴承的预紧状态。6.2 雅可比矩阵算出的力矩方向反了我遇到过几次“越控越偏”的情况。排查后确认是旋转矩阵的约定不一致建模时用的旋转顺序和控制程序里的不一致导致雅可比矩阵的符号出现了反号。这个问题在关节角度接近0时不容易暴露但在较大角度下会非常明显。建议调试时在软件里加一个“验证模式”给定某一方向力矩观察踝关节实际运动方向若相反则说明矩阵或姿态约定有问题。6.3 行走过程中踝关节突然失力动态行走时踝关节指令力矩原本正常但某个时刻突然掉到接近0。排查发现是电机驱动器触发了过流保护原因是大冲击下瞬时电流超过驱动器额定值。解决方法是先在软件层限制最大力矩指令不高于驱动器持续电流的80%同时利用重力补偿把静载提前扛住减少动态电流冲击。另外我也遇到过雅可比矩阵更新突然出现NaN导致指令清零的情况。原因是奇异位形下数值差分的除数为0。解决办法是在逆运动学求解时加入角度边界保护同时在雅可比计算前检查关节角是否在安全工作区间内。6.4 零位漂移与关节标定并联机构的零位标定比串联机构麻烦因为没有明显的“垂直关节”可以参考。我自己的做法是在上电时让机器人踝关节回正通过限位开关确保动平台停在机械零位然后利用编码器记录此时两个电机转角作为零位基准。运行一段时间后如果发现静止状态电机力矩指令缓慢漂移大概率是机械零位发生了偏移需要重新标定。6.5 足底力传感器数据噪声大足底六维力传感器在行走冲击下噪声很大尤其是横向剪切力。处理办法是做了两级滤波硬件上在传感器和脚掌之间加了一层聚氨酯垫片软件上用截止频率50 Hz的二阶巴特沃斯低通。注意不能把截止频率设得太低否则足底力反馈就失去了实时性会影响ZMP计算。写在最后的小技巧如果只让我分享一条经验那就是并联踝关节的力矩控制效果七八成取决于雅可比矩阵的实时性和准确性剩下的两成才轮到控制算法本身。建议你第一次做的时候一定先在离线仿真里验证雅可比矩阵在完整工作空间内的数值特性再把奇异区域标注出来写进控制器的保护逻辑里。这个工作看起来不起眼却能省下大量整机调试时间。另外调试时别忘了在程序里把雅可比矩阵的行列式值实时打印出来。踩过几次坑之后你会发现这个标量比任何状态估计器都更能反映机构当前的健康状态。准备好这个再启动你的行走测试能稳得多。
RELATED

相关推荐

SiC MOSFET仿真精度瓶颈:沟道效应与BCA建模实战指南

SiC MOSFET仿真精度瓶颈:沟道效应与BCA建模实战指南

1. 为什么SiC MOSFET仿真总“差一口气”?——沟道效应不是bug,是物理现实的硬约束 你有没有遇到过这种情况:明明器件结构参数、材料参数都按文献和工艺厂数据填进Silvaco TCAD里了,仿真出来的阈值电压Vth比实测高0.3V,…

📅 2026/10/7 19:03:35
基于Web的出租车拼车系统设计与实现:从架构到并发控制全解析

基于Web的出租车拼车系统设计与实现:从架构到并发控制全解析

每年一到毕业季,后台都会收到一堆关于“Java毕设怎么选”、“源码跑不起来怎么办”的私信。我自己的习惯是,不管学生还是刚转行的朋友来问,如果手里正好没什么好题目,我一般都推荐一类系统:业务完整度够、技术栈主流、…

📅 2026/10/7 19:03:35
LeetCode 3296 移山所需最少秒数:二分答案与判定函数详解

LeetCode 3296 移山所需最少秒数:二分答案与判定函数详解

LeetCode 3296 题,“移山所需的最少秒数”,是第 430 场周赛的一道中等题。我第一次看到标题就隐约感觉到,这道题想考的不是“搬山”,而是二分答案。题干写得挺有迷惑性:一座山、好多个工人、每人按自己速度干活&#x…

📅 2026/10/7 19:03:35
MORE NEWS

更多资讯

📰

从连接到安全落地:KES MCP Server 工程化实践的全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

ESP32-P4上跑LLM:从0.61到4.31 tok/s的七步优化全解析

1. 项目概览:一块MCU上的本地大模型白日梦先交代一下背景。这个系列的第一篇文章,我想先说清楚一件事:在ESP32-P4上跑LLM,不是一场行为艺术,而是一条真实存在的、可以反复复现的技术路径。从半年前的0.61 tok/s到如今的…

📰

GLM-5 DSA 稀疏注意力技术详解:部署成本降 30%,202K 超长上下文推理性能无损,大模型优化必学

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Deepseek Agent Harness教程(七) | 用Cordis Bundle与Profile拆解Deepseek Harness的模块化设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

用 Vercel Eve 的 Subagent 和 Skill 搭建 Agent Team:把 endpoint 改到 TaoToken 的完整配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

整数乘法低于 n log n 拆解:OpenAI 722 篇论文砸向理论界,2^-182 削减与缺席的 Lean 证明

OpenAI 722 篇手稿砸场:打破半世纪整数乘法猜想?2026年10月6日,OpenAI 突然公开了多达722篇数学与理论计算机研究手稿。在官方开源的 openai/math 仓库中,这批论文几乎涵盖了现代数学的各大分支。但其中最引人瞩目且最具争议的&am…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬