ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

五连杆轮足机器人建模与仿真:从运动学逆解到Simulink实战

五连杆轮足机器人建模与仿真:从运动学逆解到Simulink实战 简介RM2024赛季五连杆轮足式机器人建模与仿真代码包聚焦竞赛中常见的轮足复合运动控制问题适合RM参赛队、机器人方向学生及相关工程师用于方案验证与二次开发。资源内含完整的Simulink/Matlab模型与C语言控制程序覆盖五连杆机构运动学建模、倒立摆平衡控制、虚拟腿与直腿切换等关键环节同时提供演示录屏和README说明帮助使用者快速了解代码结构并完成环境搭建。压缩包共114个文件以模型文件m、C/C源码c/h、可执行程序、仿真结果图表xlsx/jpg和视频mp4为主整体大小约103.3MB目录划分清晰便于按需检索。目前已有200人学习下载内容具有一定代表性建议具备基础控制理论或机器人学知识后使用可作为课设、毕设或参赛初期的技术参考。1. RM2024 轮足式机器人建模与仿真先搞懂五连杆这条腿RM2024 赛季里轮足式底盘几乎是每个战队都要评估一遍的方案直线奔跑用轮子、越障和爬台阶时切换成足式切换的可靠性全在那条腿上。五连杆结构能在两个电机驱动下让足端在一个平面内自由移动驱动电机全部装在机架上腿部转动惯量比串联腿小一截响应快这让它成为轮足腿部机构的热门选择。建模与仿真代码要做的事情就是把这条腿的几何约束、运动学正逆解、动力学特性和控制策略先用数学建模的方式验证清楚而不是上真机后靠反复试错改结构。这篇文从运动学模型讲起一路写到 Simulink 仿真参数怎么设、发散怎么查最后给一套验证逆解代码的扫描方法适合要复现类似工程或者从零搭轮足仿真环境的人。2. 五连杆机构的运动学建模从几何约束到正逆解代码2.1 先看自由度为什么两个电机能控制足端两个方向五连杆机构包含机架在内共 5 个杆件、5 个转动副平面机构自由度用格里布勒公式计算得到 2意味只需要两个主动输入就能唯一确定机构的形状。这个特性决定了轮足机器人腿部方案的基本架构两个电机安装在机架上分别驱动两根主动杆主动杆通过中间连杆把运动传给足端轮子固定在足端末端。相比串联二连杆腿五连杆的两个电机都放在躯干上腿末端只有连杆和轮子旋转惯量小高速摆动时对车身的反冲也更小。代价是结构上是闭环正解和逆解的推导都比串联腿麻烦尤其是逆解没有解析闭式解一般要靠数值迭代。RM 赛季里大部分代码也是这个套路把目标足端位置喂给逆解器解出两个电机角度再交给位置环或力矩环执行。2.1.1 建模前的坐标系约定先定义符号后面所有代码沿用同一套约定。机架上两个电机转轴中心分别为 A 和 BAB 距离为 d左主动杆 AC 长 l1右主动杆 BD 长 l2中间连杆 CE 长 l3、DE 长 l4E 为足端。A 点为原点B 点在 x 轴正方向。两个主动角 θ1、θ2 从各自转轴的水平方向起算。单位统一用毫米配弧度制仿真阶段再统一换算成米。建议所有源码里长度量纲保持一致混用米和毫米是这类项目里最常见的低级错误。2.2 正解由两个电机角求足端位置正解是给定 θ1、θ2求 E 点坐标。C 点在以 A 为圆心、l1 为半径的圆上D 点位置同理由 θ2 直接写出。E 点是以 C 为圆心、l3 为半径和以 D 为圆心、l4 为半径两圆的交点几何关系明确解析可解。2.2.1 一个可复用的 MATLAB 正解函数function [xE, yE] fk_five_bar(l1, l2, l3, l4, d, th1, th2) % 五连杆正运动学: 由两个主动角求足端坐标 % 输入为杆长(mm)和角度(rad), 输出足端E坐标(mm) x0 0; y0 0; % A点 x1 l1*cos(th1); y1 l1*sin(th1); % C点 x2 d l2*cos(th2); y2 l2*sin(th2); % D点 L sqrt((x2-x1)^2 (y2-y1)^2); % 弦CD长度 if L (l3l4) || L abs(l3-l4) error(给定角度无法构成闭环, 检查杆长和角度范围); end % 两圆交点公式: 以C为圆心l3为半径, D为圆心l4为半径 a (l3^2 - l4^2 L^2) / (2*L); h sqrt(l3^2 - a^2); % 两圆交点在CD连线两侧的两个解 xE1 x1 a*(x2-x1)/L - h*(y2-y1)/L; yE1 y1 a*(y2-y1)/L h*(x2-x1)/L; xE2 x1 a*(x2-x1)/L h*(y2-y1)/L; yE2 y1 a*(y2-y1)/L - h*(x2-x1)/L; % 装配时足端位于CD连线上方, 取y较大的交点 if yE1 yE2 xE xE1; yE yE1; else xE xE2; yE yE2; end end这个函数的关键在于两圆求交的几何构造先算弦 CD 的长度 L再算交点相对 C 点沿弦方向的偏移 a 和垂直方向的偏移 h最后组合出两个候选点。选解分支由实际装配姿态决定足端朝上就选 y 大的点倒挂安装则反过来。这个选哪个解的判断必须和后面逆解代码保持同一套逻辑否则正逆解对不上。2.3 逆解由足端轨迹反解电机角逆解的目的是给定目标足端位置 E(xE, yE)求 θ1、θ2。由于五连杆是闭环机构直接消元非常繁琐业界普遍用数值迭代法。常见做法是把逆解看成求解非线性方程组 FK(θ1,θ2) - P_target 0用牛顿法或最小二乘求解。2.3.1 用 scipy 做高频逆解时的正确姿势import numpy as np from scipy.optimize import least_squares def fk_np(q, l1, l2, l3, l4, d): numpy版正解, 供迭代器反复调用 t1, t2 q[0], q[1] xC, yC l1*np.cos(t1), l1*np.sin(t1) xD, yD d l2*np.cos(t2), l2*np.sin(t2) L np.hypot(xD-xC, yD-yC) if L (l3l4) or L abs(l3-l4): return np.array([np.nan, np.nan]) a (l3**2 - l4**2 L**2) / (2*L) h np.sqrt(max(l3**2 - a**2, 0.0)) xE xC a*(xD-xC)/L - h*(yD-yC)/L yE yC a*(yD-yC)/L h*(xD-xC)/L return np.array([xE, yE]) def ik_residual(q, target, l1, l2, l3, l4, d): E fk_np(q, l1, l2, l3, l4, d) return E - target def five_bar_ik(target, q0, l1, l2, l3, l4, d): 数值逆解, q0为迭代初值, 推荐传入上一时刻的解 res least_squares(ik_residual, q0, args(target, l1, l2, l3, l4, d), xtol1e-10, ftol1e-10, max_nfev100) return res.x用法是按轨迹逐点调用 five_bar_ik每一帧把上一帧的解作为 q0 传入。这样迭代收敛快、解连续不会因为初值乱跳而突然切到另一个装配分支。整个轨迹解算完成后再对角度序列做平滑否则直接给关节位置环会造成速度冲击。提示least_squares 的 xtol、ftol 不要设到 1e-12 以下机械误差和浮点误差会限制实际精度设太低只会白白增加迭代次数对轮足这种应用 1e-8 量级就足够。3. 在 MATLAB/Simulink 里把五连杆轮足跑起来动力学仿真与参数设计3.1 为什么用 Simscape 做动力学而不是自己推拉格朗日方程运动学代码验证完下一步是动力学仿真。自己写拉格朗日方程对二连杆是可行的对五连杆这种闭环机构来说约束力建模非常繁琐关节摩擦、碰撞这些现象更难从数学表达式里体现。行业里更常见的做法是直接在 Simscape Multibody 里搭装配体让求解器处理闭环约束自己只关心驱动力矩、材料参数和控制器。Simscape 的另一好处是轮地接触可以后置。第一步先关闭所有碰撞只验证关节力矩是否正常第二步再打开轮地接触观察稳定性和滑移。这样逐层加复杂度出问题时能清晰定位是机构问题还是控制问题。3.2 从 URDF 或 STEP 导入五连杆装配体搭建路径有两条。一条是从 SolidWorks 等 CAD 软件导出 STEP 文件用 simscape.multibody 的 smimport 命令自动生成模型另一条是直接用 Simscape 的 Body 模块手搭参数手填。手搭时每个连杆三件套Solid 模块设置质量和惯性、Revolute Joint 模块设置转动轴和限位、坐标变换确定相对位置。驱动放在两个主动杆与机架连接的关节上驱动信号类型选 Motion 表示位置模式选 Torque 表示力矩模式。初期一定用 Motion 模式先把运动学轨迹在动力学模型里复现出来再切换到 Torque 模式做控制。3.3 求解器与物理参数必须按这个表设仿真发散和结果不可信九成出在求解器选择与步长上。闭环约束的机械系统是典型的刚性系统默认的 ode45 很容易卡在约束迭代上表现为仿真速度极慢或干脆发散。参数项建议值说明求解器类型ode15s 或 ode23t带闭环约束推荐刚性求解器最大步长1e-3 到 1e-4 s轮足摆动频率高时取 1e-4相对容差1e-4过高会导致约束求解不收敛关节驱动模式Motion → Torque 分阶段先验运动学再验控制轮地接触先关闭再开启减少变量逐个排查连杆质量0.1 ~ 0.8 kg 按材料碳纤取小值、铝件取大值动力学参数方面五连杆每个杆件要填写质量、质心位置和惯性张量。手搭模型时最容易遗漏惯性张量而惯性张量缺失或填错会直接导致仿真里出现奇怪的震动和异常力矩。如果只有 CAD 模型就用 CAD 自带的质量属性导出若前期只有几何尺寸先按均匀密度估算后续再修正。提示Motion 驱动的关节如果给定角度序列中带有毛刺关节加速度会非常大Simscape 的求解器会用极小步长去追踪这个信号仿真速度骤降。进入仿真前先对角度序列做平滑看到仿真推不动先检查这里。4. 仿真阶段最容易翻车的 4 个参数与现象排查4.1 仿真发散先看是不是步长太大或信号有毛刺仿真发散是论坛和赛事群里出现频次最高的词实际问题多数不是模型发散而是数值问题。现象是仿真跑到某一时刻突然 NaN或者速度、力矩冲到几百上千。排查顺序不要乱。第一步把最大步长降到 1e-4看发散时刻是否后移第二步检查输入的角度序列用 diff 看有没有连续两帧之间的角度跳变跳变幅度大于 0.1 rad 就先把数据平滑掉第三步看发散瞬间是哪个关节的速度爆炸对照机构姿态十有八九经过了奇异位形。4.2 连杆穿模约束方向反了或初始姿态冲突轮足机器人建模时最常见的穿模情况是两个中间连杆在运动过程中互相穿过或者主动杆和中间连杆的初始装配姿态矛盾。Simscape 的关节不直接检测连杆间碰撞穿模只说明杆件几何尺寸与旋转轴方向定义有冲突。验证方法是把机构调到对称位形两个主动角都设 0 度观察初始姿态在模型里是否和实际 CAD 一致。不一致时优先检查 Revolute Joint 的坐标轴方向是否沿 z 轴且方向统一。两根连杆互相穿过的另一个原因是杆长比例设计不良仿真里看清是哪两根杆干涉回到 CAD 看是否有结构干涉建模与结构设计在这里交叉验证。4.3 逆解跳分支足端轨迹运行到一半突然反折数值逆解在接近奇异位形和工作空间边界时会突然跳到五连杆机构的另一个装配解足端轨迹因此出现明显折返。判定方法是把两个主动角画出来看轨迹执行过程中是否有一个角发生跳变。这个现象在编码器输出角度、电机位置环里表现为突然反向转动严重时直接触发限位。解决方案有三步。其一轨迹规划时对足端工作空间做边界约束目标点距离边界留 5 到 10 毫米余量其二给逆解器增加帧间角度变化约束当相邻两拍的解差超过设定阈值时强制以上一拍解为初值重新求解其三在正解函数里固定选解分支保证 FK 和 IK 对同一个机构姿态描述一致。4.4 末端执行器速度不足五连杆电机选型不匹配动力学仿真里电机力矩输出正常但足端速度上不去多数不是仿真问题而是电机选型问题。轮足切换瞬间需要腿部在短时间内完成从轮式姿态到足式姿态的变形主动杆角速度需要满足足端速度快于轮子线速度的需求。仿真里看两个主动关节的角速度曲线如果长时间接近电机空载转速上限说明减速比选择不合理。常见做法是提高减速比换取力矩代价是足端速度下降改小减速比能提高速度但力矩不足。相比直接改结构先用扭矩模式仿真扫一组减速比看哪组能同时满足最大速度和峰值力矩。5. 逆解代码出厂前必做的一轮验证残差扫描与雅可比检验逆解代码写完后不能只看一两个点对得上要做一轮全工作空间扫描。常见做法是用随机数在工作空间内均匀采样 N 个目标点每个点调用逆解再用正解把逆解结果映射回去统计目标点到正向重算点之间的距离残差。残差超过 1 毫米的点标注出来并检查是否落在工作空间边界附近。% 残差扫描: 随机在工作空间内部采样并验证正逆解闭合 rng(42); n 500; l160; l260; l3100; l4100; d70; max_res 0; for i 1:n target [rand*60-30, -rand*60-50]; % 足端工作区间采样 q0 [0.8, 2.5]; q ik_five_bar(target, q0, l1, l2, l3, l4, d); E fk_five_bar(l1, l2, l3, l4, d, q(1), q(2)); res norm(E - target); max_res max(max_res, res); end fprintf(最大残差: %.4f mm\n, max_res);这段扫描代码里ik_five_bar 是前面逆解逻辑的封装第 4 行采样范围按实际工作空间填写。残差普遍在 1e-6 量级代表模型自洽出现毫米级以上残差优先怀疑正解和逆解选解的装配分支不一致其次检查迭代初值是否跨过奇异点。雅可比验证用来检验速度层面的一致性。给一个关节角速度向量用数值雅可比乘角速度得到足端速度再与有限差分得到的足端速度对比。两者偏差大于 5% 时检查杆长参数是否在正逆解函数中传反。这一步虽然简单却能把运动学代码里最深层的参数错误滤掉是源码交付前最值得花时间的一分钟。后面的控制层再接进来时把正逆解封装成独立函数接口、角度的单位统一为弧度即可直接复用。把这份代码与文档、参数表放在一起下次换杆长或者改装配姿态时只改参数不动机器人模型的努力就不会白费。本文还有配套的精品资源点击获取
返回列表