
简介一份面向机器人运动控制与机械动力学仿真学习者的技术文档聚焦两轮机器人这一非线性不稳定系统的建模与仿真研究。文档先借助MATLAB完成运动参数和受力分析将两轮机器人简化为倒立摆模型并设计平衡控制方案再进行SIMULINK仿真验证随后转入ADAMS环境构建机器人模型、添加约束并模拟运动过程。全文完整呈现了从理论建模、控制设计到联合仿真的研究路径仿真结果表明该控制方案调节时间短、抗干扰能力强可作为相关课题设计、课程作业或技术入门参考。资源为1个doc文件压缩包大小1.79MB已有181人学习下载适合机器人、自动化及机械电子方向的学生和工程师按需参考。 我做的第一个两轮机器人自平衡仿真就是用ADAMS完成的。说实话当时选这个方向纯粹是因为两轮机器人本质上就是一个倒立摆看着简单但涉及运动学、动力学、控制理论的交叉随便一个参数设置不对仿真结果就能让人怀疑人生。现在回头看ADAMS这套软件在两轮机器人的运动研究里确实有不可替代的价值——尤其是它处理接触、摩擦、非完整约束这些复杂力学问题的能力远不是简化模型能比的。这篇文章我打算把自己用ADAMS做两轮机器人运动研究的完整路线捋一遍包括建模思路、关键参数、踩过的坑以及和MATLAB联合仿真的衔接方式。不管你是刚接触ADAMS的新手还是已经在做机器人仿真的老手只要准备做两轮相关的运动分析这篇内容应该能帮你少走不少弯路。1. 两轮机器人运动研究的核心问题1.1 为什么选ADAMS做运动研究两轮机器人系统和四轮、履带式底盘有个本质区别它在静止状态下是不稳定的只有通过主动控制才能维持平衡。这种系统的运动研究不能只停留在理想化的运动学公式推导必须把动力学因素充分纳入进来比如车轮与地面的接触力、轮胎的侧偏特性、车体的惯性参数这些都会直接影响机器人的实际运动表现。教科书里常见的做法是把两轮机器人简化成线性化的状态空间模型用矩阵推运动方程。这种做法的优点是控制理论分析方便但缺点也很明显很多非线性因素被忽略了比如车轮打滑、电机饱和、减速器间隙、静摩擦向动摩擦切换的瞬态过程。ADAMS的优势恰恰在于它用多体动力学方法把这些因素全部以物理模型的方式反映出来每一对构件之间有真实的约束和接触车辆运动得是否合理完全由物理定律决定。再加上ADAMS自带的后处理模块可以直接输出质心轨迹、车轮角速度、车身倾角、接触力等二十多类测量量比自己在MATLAB里写微分方程再画图要直观得多。这也是我后来在项目中坚持用ADAMS做前端运动分析的原因——它能快速暴露机械结构层面的问题而不是让控制算法去背锅。1.2 两轮机器人与倒立摆模型的对应关系两轮机器人的运动学模型本质上是一个移动倒立摆。把机器人从侧面剖开看车身质心、两个车轮的轴线、地面接触点三点构成一个典型的平面倒立摆结构。前向运动时车轮给地面一个作用力地面反过来给车体一个推力车体在推力作用下绕车轮轴向前倾倒控制器再通过调节车轮加速度让车体回到平衡位置。这个模型映射到ADAMS里就对应三组关键参数车身质量与质心高度决定重力力矩、车轮半径与转动惯量决定驱动响应速度、电机输出扭矩与减速比决定能提供的补偿力矩上限。我在建模时会把这三组参数单独拎出来作为设计变量因为后续所有仿真工况的合理性都建立在这三组参数取值真实的前提下。还有一个容易被忽略的细节两轮机器人的侧向自由度。很多人做运动仿真只关注纵向的平衡和前向运动但实际两轮机器人在转向时会伴随侧倾这个侧倾运动由陀螺效应和离心力共同引起在ADAMS里如果不加约束车体会直接侧翻。所以建模时必须把整车的侧向自由度保留出来而不是强行简化成平面模型。2. ADAMS建模全流程实战2.1 几何建模两种路径怎么选我自己的经验是ADAMS建模最简单的方式是从SolidWorks或SolidEdge导入CAD模型然后在ADAMS里重新定义材料、约束和质量属性。ADAMS自带的建模模块当然也能用但画车架、轮胎这类异形零件效率太低尤其是轮胎的圆弧断面和轮毂辐条在ADAMS里画完基本可以放弃治疗。所以我的流程固定是CAD建模导出Parasolid或STEP再在ADAMS/View里以Parasolid格式导入导入后检查单位制。这里有个坑必须提醒CAD软件和ADAMS之间的单位制经常不一致。SolidWorks默认单位可能是毫米ADAMS默认可能是米导入后如果不统一车轮半径0.05和0.05的物理含义完全不同。我最早做第一个模型时就吃过这个亏整车尺寸全部小了1000倍仿真出来的质心加速度数值离谱得完全没法看。现在我的习惯是在导入前先把单位切换到MMKS毫米、千克、秒并在导入后立刻用ADAMS的测量工具验证一个已知尺寸确保几何比例无误。导入几何体后每个零件要检查两件事一是材料属性是否已定义二是质心位置和转动惯量是否由ADAMS根据材料密度自动计算。大部分情况下ADAMS会根据几何体自动生成质量属性但对于轮胎这种由多个曲面组合的实体有时候自动计算会出现偏差需要用ADAMS的几何修正工具手动调整。2.2 约束与驱动设置的关键细节模型建好后最核心的一步是添加约束。两轮机器人典型的约束链是车架左、右两侧各连接一个车轮两个车轮都绕自身轴线旋转同时车轮与地面建立接触。在ADAMS里车架与车轮之间用Revolute Joint旋转副连接旋转轴要精确对齐到车轮中心轴线否则仿真一开始就会出现额外的弯矩导致车体异常抖动。地面在ADAMS里通常建模为一个固定的Box或者直接使用Ground然后在车轮外表面与地面之间添加Contact接触。这里最让人纠结的是接触参数的选择。ADAMS的接触模型基于Hertz接触理论需要输入刚度、阻尼、摩擦系数、穿透深度等。两轮机器人常用参数范围我在后面会专门列一张表这里先说结论刚度不要一味求大取值过大容易引起数值发散过小又会让车轮陷入地面产生视觉上的“沙地效应”。驱动设置方面两轮机器人的轮轴驱动一般有两种方式一种是直接在旋转副上添加Motion运动驱动直接规定车轮角速度另一种是在旋转副上添加Torque力矩驱动由控制信号决定施加的力矩大小。前者适合做运动学分析验证机械结构设计是否合理后者适合做动力学分析配合控制算法验证整个系统的动态响应。我的建议是如果最终目标是控制算法开发务必使用Torque驱动这样联合仿真时控制器的输出才是真正的物理量。2.3 参数测量转动惯量与质心位置ADAMS建模完成后我习惯先用静态分析验证模型的物理合理性。具体操作是在ADAMS里让机器人静止放置在地面上然后测量车体质心高度、总质量、绕车轮轴的转动惯量。这些参数会直接影响后续控制器参数整定比如LQR控制器里的质量矩阵和惯性矩阵必须与ADAMS模型的测量值一致否则仿真里的“平衡”和实际机械系统的“平衡”对不上。ADAMS里测量转动惯量的方法很直接在车体零件上右键选择Modify在Mass Properties里就能看到绕局部坐标系的转动惯量。但要注意这里显示的转动惯量是相对于零件自身质心坐标系的如果需要绕某个特定的旋转轴比如车轮轴线就得用平行轴定理换算。我通常会专门建一个Marker点放在车轮轴线位置然后通过ADAMS的Inertia测量功能一次性读出绕这个轴的等效转动惯量省得手算。质心位置的测量同样重要。两轮机器人车身质心偏高会导致系统更难以稳定质心偏低则更容易控制。我的经验是在设计阶段就通过ADAMS的质心显示功能直观调整电池、控制器、电机在车架上的布置找到一个让质心尽量落低且前后居中、侧向居中的布局方案。这一步在物理样机阶段几乎没法做但在ADAMS里只要拖动零部件位置就能实时观察到质心变化效率高得不是一点半点。3. 运动仿真与数据后处理实操3.1 仿真步长与求解器设置在ADAMS里做两轮机器人运动仿真最让人头疼的就是数值发散和步长选择。ADAMS默认的求解器是GSTIFF配合I3积分格式对于一般的机械系统已经够用。但对于两轮机器人这种带接触、带实时控制反馈的系统GSTIFF经常会在接触瞬间报错或者发散这时候可以切换到WSTIFF求解器或者把积分格式换成SI2仿真稳定性会明显提升。步长方面初始建议设置为1e-4秒也就是10000Hz再根据实际仿真情况调整。步长太大接触力的尖峰会丢失机器人看起来像在地面上滑动而不是滚动步长太小单次仿真时间会成倍增加。实际操作中我先用1e-4跑一个20秒的仿真如果曲线平滑稳定再逐步放大步长测试到极限如果发散则减小到5e-5甚至2e-5。这里有个规律接触刚度越高需要的步长越小。3.2 关键输出曲线怎么看后处理是运动研究里最容易忽视、但信息密度最高的环节。我一般固定输出以下几组曲线车身倾角随时间变化曲线、左右车轮角速度曲线、质心在水平面的X-Y轨迹、车轮与地面的法向接触力曲线。车身倾角曲线是最直观的平衡性指标。如果倾角能稳定在接近0度的水平线附近说明控制逻辑或者运动学设计是收敛的如果倾角呈现等幅振荡说明阻尼不足如果发散到90度那就是控制系统彻底失效。左右车轮角速度曲线用来判断两个轮子是否同步如果两侧角速度差异明显转向就开始了。接触力曲线则能直接反映车轮是否出现离地或者打滑——如果法向力出现零值区间说明这个时刻车轮已经在空中了这对后续分析转向稳定性非常关键。3.3 与MATLAB联合仿真的思路很多研发团队实际用的是ADAMSMATLAB/Simulink联合仿真ADAMS负责机械动力学Simulink负责控制策略。联合仿真的基本流程是在ADAMS里把控制输入定义为状态变量比如左右电机力矩把需要的输出如倾角、角速度定义为输出状态变量然后通过ADAMS Controls接口导出成Simulink可以调用的模块。具体操作是菜单栏的Plugins → ADAMS Controls → Plant Export按照向导设置好输入输出变量和仿真模式就能在Simulink里得到一个机械系统子模块。这里有个很实用的建议第一轮联合仿真建议用连续模式也就是ADAMS和Simulink每个积分步长都交换一次数据虽然速度慢但调试起来容易定位问题等控制算法稳定收敛后再切换到离散模式按固定采样周期通信仿真速度快很多。我在实际项目中踩过坑一开始直接在离散模式下联调结果怎么调都发散后来切回连续模式才发现是子模块的通信时间偏移导致不是控制算法的问题。4. 常见问题与排查技巧实录4.1 仿真发散主要先查这三个参数两轮机器人仿真发散十有八九出在这三个参数上接触刚度、积分步长、控制器增益。我排错都是按这个顺序来第一步检查接触刚度是否过大回落到1e51e6 N/m范围第二步减小步长至少降到接触刚度对应临界值的1/10以下第三步调整控制器增益先保证比例项小到不会让系统振荡再逐步加大。这里有一张我整理的两轮机器人ADAMS仿真接触参数参考表用的都是常规模型量级新手可以直接抄作业参数推荐范围说明接触刚度1e51e6 N/m过大易发散过小会陷入地面力指数1.52.2金属-橡胶接触常用1.8阻尼1050 N·s/m抑制接触振荡穿透深度0.010.1 mm越小越精确但越难收敛静摩擦系数0.50.9与路面材料相关动摩擦系数0.40.7一般为静摩擦的70%85%如果改完这三组参数仍然发散我建议把意识放在接触模型本身上检查是否出现了“穿透-弹回-再穿透”的循环。这种情况可以把接触力指数调低、阻尼调大或者换用ADAMS里的IMPACT函数形式重新定义接触。4.2 模型穿透与“地面滑动”问题模型穿透是另一个常见问题。如果仿真动画里看到车轮明显插进地面首先要怀疑接触参数里的穿透深度设置过大或者接触刚度不足。我惯用的做法是分两步调先把穿透深度调到0.05mm让ADAMS的接触检测更灵敏再逐步增大刚度直到车轮和地面在接触瞬间没有明显嵌入。还有种情况是车轮在滚动过程中出现侧向打滑整辆车像在冰面上漂移。这种问题往往不是接触参数造成的而是轮胎建模过于简化——直接用圆柱体当轮胎没有考虑轮胎的圆弧断面和侧向弹性。ADAMS里可以把轮胎建模成带梯形断面的旋转体或者直接用ADAMS/Tire模块定义UA轮胎模型后者对侧偏特性的模拟更接近真实情况。当然如果你的仿真目标只是验证控制算法那用简化圆柱轮胎也没问题重点在于模型的简繁要和目标匹配。4.3 数值振荡与零漂数值振荡的表现是曲线高频抖得像心电图常见于接触瞬间和控制器切换瞬间。解决办法是引入数值阻尼或者在接触副参数里把阻尼调高一点再或者检查控制器里是否有符号跳变比如符号函数直接作为控制输出这种不连续函数最容易刺激数值振荡。我的习惯是尽量把控制律写成连续可微的形式迫不得已用符号函数时也要在仿真层面加一个小的时间常数滤波。零漂问题多出现在测量环节比如ADAMS输出的角度值在机器人静止时不是0而是缓慢偏移。这通常是积分器误差累积或者测量参考点设置不对。检查一下测量是相对于哪个坐标系如果相对于地面坐标系零点应该在重力方向如果相对于车体坐标系就要确认车体初始姿态是否在零点位置。两轮机器人车体初始姿态常常需要人为设定一个微小的前倾角来触发控制这时候角度曲线的零点不是0而是那个初始倾角看曲线时要心里有数。5. 我对这个项目的几点实际操作体会最后聊一点实际操作层面的体会。ADAMS做两轮机器人运动研究最大的价值是它逼你把机械参数看清楚。以前我在MATLAB里搭简化的倒立摆模型质量、惯量随手填反正公式能代进去但在ADAMS里这些参数对应的是真实的材料密度和几何形状填错了仿真里的行为马上就不对这种“物理一致性”压力反而能让模型质量提升很多。另外一个让我印象很深的点是仿真结果必须结合物理直觉去判断。ADAMS再强大它的输出也是在特定模型假设下的结果轮胎参数、接触参数、步长设置都会影响曲线的绝对数值。所以我的习惯是每跑完一组仿真先问自己三个问题倾角变化符合直觉吗接触力有没有出现离谱的尖峰车轮轨迹是否在合理范围内如果答案是否定的问题多半出在建模或参数设置上而不是机器人本身。最后再分享一个小技巧在ADAMS里做两轮机器人的参数化研究非常方便。把车体质心高度、车轮半径、电机峰值扭矩都设为设计变量然后用ADAMS的Design Study功能一次性能跑完几十组工况直接输出倾角最大值、稳态误差这些指标。对前期方案选型来说这个功能几乎可以替代大半轮实验——当然物理样机的验证还是不能少。但至少在方案阶段用ADAMS把运动特性摸清楚能省下大量改结构的时间。本文还有配套的精品资源点击获取