ARTICLE DETAIL

资讯详情

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

基于ADAMS的两轮机器人运动仿真实战:建模、接触与联调

基于ADAMS的两轮机器人运动仿真实战:建模、接触与联调 简介以两轮机器人为研究对象的运动控制技术文档完整记录从模型简化、参数解算到仿真验证的全过程。文档首先将两轮机器人抽象为倒立摆模型基于MATLAB完成受力分析与运动参数确定并利用SIMULINK搭建控制方案进行仿真随后转入ADAMS环境设计机器人三维模型、添加约束与控制算法模拟实际运动。仿真结果表明该系统在平衡控制、调节时间及抗干扰方面表现良好能直观呈现两轮机器人的运动状态。内容适合机器人工程、机械电子、自动化等专业的学生及研究人员作为开展ADAMS和MATLAB联合仿真的入门与进阶参考。资源为doc格式文档共1个文件压缩包大小约1.79MB包含摘要、中英文关键词、章节目录及完整论证过程便于按需研读。已有181人学习该资源适合需要系统性了解两轮机器人运动学研究方法的读者下载使用。 刚接到这个课题的时候说实话我是有点小看它的。基于ADAMS的两轮机器人运动研究听上去无非是建模、加约束、驱动、跑动画、导曲线一套标准流程走完就交差。等自己真正动手做才发现这套流程里处处是坑模型简化到什么程度才能既快又准轮子跟地面的接触参数怎么定才不穿透差速转向的仿真轨迹和理论公式对不上问题出在约束还是摩擦这些细节才是“运动研究”这顶帽子的真实重量。这篇文章把我拿ADAMS做两轮机器人运动仿真的完整思路和实际操作经验整理出来覆盖模型搭建、质量与接触参数设定、仿真曲线解读以及和MATLAB联做控制仿真的注意事项适合刚开始用ADAMS做机器人仿真的同学也适合做轮式移动平台前期验证的工程师参考。1. 两轮机器人运动问题的本质与ADAMS的适用边界1.1 先分清你研究的是哪一种两轮机器人开始建模之前建议你先回答一个问题研究对象到底是哪一种两轮机器人这个决定直接影响到后面的约束设置、驱动方法和结果评价指标搞错方向再往下做就是白费力气。行业内常见的“两轮机器人”大致分两类。第一类是两轮差速驱动移动平台重心在轮轴以下系统本身是稳定的研究重点通常是直线速度、转弯半径、里程计模型这类运动学问题。第二类是两轮自平衡机器人重心在轮轴以上本体等效成一个倒立摆研究重心在姿态稳定和驱动力矩补偿上属于强动态问题。这两类在ADAMS里的处理差异非常大。差速平台只需要给左右轮加旋转副和驱动车身姿态基本靠结构保证自平衡机器人则需要完整保留车身俯仰方向的自由度驱动通常是力或力矩而不是速度否则平衡动作根本表现不出来。我下面以差速平台为主线展开中间对照着说自平衡场景的区别这样两类问题你都能对上号。对比维度两轮差速平台两轮自平衡机器人重心位置轮轴以下系统稳定轮轴以上系统不稳定核心研究内容速度、转向半径、轨迹姿态角收敛、平衡力矩判断指标轨迹误差、滑移率倾斜角响应、收敛时间ADAMS驱动方式定义轮速或角速度的Motion定义电机力矩的SFORCE或Motion典型验证方法与差速运动学公式对比与倒立摆动力学方程对比1.2 ADAMS在这个课题里解决了什么替代不了的问题先给没接触过ADAMS的同学交代一下背景。ADAMS全称是Automatic Dynamic Analysis of Mechanical Systems做的是多刚体系统动力学分析。它内部用拉格朗日方程建立整个机械系统的动力学方程然后求解约束反力、位移、速度、加速度这些变量。对两轮机器人研究来说它最值钱的不是能画出平滑的动画而是能同时处理轮子与地面的接触碰撞、库仑摩擦、非线性驱动这类强非线性因素。你可能要问MATLAB也能建方程SolidWorks Motion也能做运动分析为什么非要用ADAMSMATLAB跑的理想刚体模型通常会忽略轮地接触细节建模前就得把力简化成理想约束SolidWorks Motion定位偏结构机构分析轮地接触碰撞的处理能力远不如ADAMS成熟。两轮机器人运动研究如果只停留在理想运动学公式里永远遇不到轮子打滑、接触抖动、急停点头这些工程问题而ADAMS的价值正在于把这些“脏”因素拉进仿真里让理论曲线和真实响应的差距提前暴露出来。2. 虚拟样机搭建的四个关键环节2.1 几何模型导入能简化就绝不扣细节我很长一段时间都以为三维模型画得越精细仿真结果就越可靠后来被现实教育了。两轮机器人的运动特性主要由质量、转动惯量、轮距、轮径决定外形几乎不影响仿真结论。轮子上的花纹、车身的圆角和安装孔更是纯属给求解器添乱。我的流程很简单在SolidWorks里建一个由简化圆柱、矩形块组合出的车身和两个轮子另存为Parasolid格式.x_t再导入ADAMS/View。车身的重心位置如果不能直接利用已有的设计文件可以用几个BOX拼接后通过ADAMS的质心测量工具近似校准。这里有一个经验别在ADAMS里手绘复杂曲面它的几何建模能力不是强项SolidWorks这类参数化软件建好再导才是正常路子。导入过程最容易滑铁卢的是单位。SolidWorks里如果用的是mmADAMS/View全局单位必须同步设置为MMKS毫米、千克、秒默认的角度单位建议保持度。一旦单位错位模型会被缩放1000倍质心位置、接触穿透深度、驱动函数里的数值全部乱套而且这类错误隐蔽性极强往往要等曲线严重异常才能发现。每次导入后第一件事一定是检查单位设置和模型总体尺寸。2.2 质量属性是仿真偏差最隐蔽的来源导入的几何体不会自动带上真实的物理属性。很多时候ADAMS对导入模型的默认处理是给一个均匀材料密度如果这部分没做设定或密度明显不匹配整个虚拟样机就是“有形无魂”。两轮差速平台动起来之后车身绕Z轴的转动惯量直接决定转弯动态曲线的形状绕X轴的转动惯量决定坡道和冲击工况下的俯仰响应这俩参数填不准确后面花再多时间调接触参数也救不回来。我建议导入后立刻打开每个part的Modify窗口人工核对质量、质心位置和Ixx、Iyy、Izz三个主惯性矩。最简单可靠的方案不是依赖软件自动计算而是从设计文档或CAD软件里读出实际值直接填进去。给你一组可以用在初版模型上的参考参数两轮差速平台整车质量10kg级别轮距0.4m轮径0.1m车身质心高度0.25m车身绕Z轴转动惯量约0.15kg·m²绕X轴约0.2kg·m²单个轮子质量0.5kg轮子的转动惯量可以先按均匀圆柱的公式估算。这套值不一定对应你的具体机构但量级和设置思路可以照搬。2.3 约束副配置旋转副、固定副和冗余约束ADAMS里没有“焊死”这种直观操作约束副本身的含义就是刚体之间的运动限制。两轮机器人的标准配置是每个轮子和车身之间加一个旋转副Revolute让轮子只有绕自身轴的转动自由度地面用一个大BOX直接固定到Ground上轮子和地面之间不建运动副靠接触力建立耦合关系。一个容易踩的问题是冗余约束。比如有同学为了让轮子装得更“牢固”会给每个轮子额外加平行约束或直线约束导致同一个自由度被限制两次。过约束系统未必立刻报错但求解器要用额外的数值手段消化这些冗余仿真速度下降结果也会带上一股说不清的“僵硬感”。我的原则是能用旋转副表达的运动副绝不追加额外约束让整个系统保持尽量少的自由度数。自平衡机器人还有一处特别容易出错有人为了模仿现实中锁紧的轴承顺手把车身的俯仰转动也锁了结果整个车变成刚性直立块平衡控制的运动现象完全消失。自平衡场景必须在倾斜方向保留自由度让车身可以绕着轮轴向前或向后倾倒否则你研究的根本就不是两轮自平衡机器人。2.4 接触与摩擦轮地耦合参数的决定性作用轮地接触是两轮机器人仿真里最核心也最难调的部分。ADAMS/View用的是Impact冲击函数模型控制方程里需要设定的几个参数是刚度Stiffness、阻尼Damping、穿透深度Penetration Depth、力指数Force Exponent以及库仑摩擦下的静摩擦系数、动摩擦系数和滑移速度阈值。接触刚度可以类比弹簧床垫太软轮子会一路陷进地板里仿真结果变成“泥地行驶”太硬床垫把整个人弹起来数值上就是接触力剧烈振荡、求解器步长被压到极小仿真跑一分钟都推不进一步。我建议初建模型时从刚度1e5 N/m起步跑通了再逐步加到1e7或1e8阻尼先给10~100 N·s/m穿透深度取0.1mm力指数按ADAMS例程用2.2。摩擦系数参考实际轮胎和地面的干摩擦状态静摩擦给0.8、动摩擦给0.6是比较稳的起点等模型跑通了再根据你要研究的工况改。摩擦参数对差速转向的影响尤其直接摩擦系数太小左右轮速度差带来的驱动力达不到库仑摩擦上限转向时整机会侧滑仿真出的转弯半径会比理论值明显偏大摩擦系数过大直线急加速阶段驱动轮容易进入打滑状态速度曲线出现高频抖动。做参数扫描时我通常会把摩擦系数单独作为变量跑一组对照这样既能验证运动学模型也能顺带摸清机器人抗滑移的边界。3. 从结果曲线反向验证两轮机器人的运动特性3.1 直线加速工况观察曲线形状是否符合理论模型搭好之后我最先跑的不是花哨的转向而是最朴素的直线加速。左右轮给相同角速度驱动可以用STEP函数平滑地建立速度避免阶跃突变把求解器打蒙。典型写法是STEP( time, 0, 0, 1, 10 ) STEP( time, 3, 0, 4, -10 )意思是前1秒角速度从0平滑加速到10deg/s保持一段时间后在3到4秒之间平滑回到0。之所以用STEP而不是直接给恒定角速度是因为阶跃输入会让接触力瞬间冲击轮地系统容易出现非物理的振荡。跑完后打开后处理模块看车体质心位移曲线。理想情况下匀加速阶段位移曲线呈二次抛物线状轮心速度曲线稳定在目标值附近。如果车速波形上叠了一层高频毛刺优先怀疑接触参数太硬或积分步长偏紧可以试着把刚度降一个量级看看毛刺是否消失。后处理里还可以用Butterworth低通滤波器做一次平滑处理截止频率取驱动频率的5到8倍通常够用——滤波的目的是去掉接触碰撞引入的高频噪声不是为了掩盖真实动力学现象所以别把截止频率压得太低。3.2 差速转向让理论公式和仿真曲线正面碰撞差速转向是“运动研究”里最有说服力的一环因为理论公式和仿真曲线可以直接对上。设左右轮速度分别为vL、vR轮距为L差速转向的瞬时半径公式是R ( vL vR ) / ( vR - vL ) × L / 2当左右轮速度相等时分母为零对应的就是直线行驶当两边速度方向相反R趋近于零就是原地旋转。仿真时我习惯让右轮在直线段之后附加一段STEP增量比如右轮角速度比左轮高20%然后在后处理里用MARKER追踪车体质心的运动轨迹绘制成XY Plot把轨迹拟合成圆弧再量出半径带进公式对比。偏差在百分之几以内是正常水平一旦偏差过大我建议按这个顺序找原因先确认左右轮驱动函数里的角速度终值是否真的按预期到岗这步最基础也最容易出错再看轮地摩擦系数摩擦太小会侧滑导致转弯半径偏大最后才怀疑模型质量属性。反过来如果仿真半径比理论小得多那多半是某个轮子出现了严重打滑速度被摩擦消耗掉了。3.3 自平衡姿态响应从倾倒曲线反推控制需求若你研究的是自平衡两轮机器人除了转向还要关注姿态响应。最简单的做法是给处于直立平衡态的车身一个初始角速度脉冲或沿车身顶部施加一个短暂力矩然后只让ADAMS的机械模型自由响应不加入任何控制力。观测车身的俯仰角曲线正常情况下它应当呈现发散趋势直到碰撞地面这个过程暴露的正是被控对象真实的“不稳定性程度”。发散的速度和方向直接告诉你平衡控制器需要提供的力矩范围和响应带宽。比如倾斜角在0.2秒内就从0度涨到5度意味着控制器必须在极短时间内提供足够大的反向力矩否则机器人必然倒。ADAMS跑出的这段开环响应可以作为后续设计平衡控制律的原始依据也可以直接在ADAMS里用一个随时间变化的SFORCE近似模拟平衡力矩观察模型能否回到直立状态这就是最朴素的控制仿真。4. 控制仿真联动ADAMS与MATLAB/Simulink联合仿真要点热门搜索里“adams控制仿真”这个词常年居高不下说明大家都卡在了机械模型向控制器交付这一步。4.1 为什么不在ADAMS里写完整个控制回路两轮机器人的控制律一旦复杂起来在ADAMS/View里写函数会越来越痛苦。ADAMS的强项是机械系统求解PID调参、LQR设计、状态观测器这些工作放到Simulink里开发效率和调试工具链显然更好。ADAMS/Controls就是这两者之间的桥把ADAMS里的机械系统封装成一个被控对象模块导出到Simulink控制信号和传感信号通过输入/输出变量对接实现机械-控制联合仿真。打个不严谨的比方ADAMS是负责流汗的身体Simulink是负责发指令的大脑。4.2 变量定义与通信步长是最常翻车的两件事用ADAMS/Controls做联合仿真最核心的准备工作是定义输入输出变量。对两轮机器人来说输入变量通常是左右轮驱动力矩输出变量一般是两个轮子的角速度、车体俯仰角和俯仰角速度。这些变量定义完之后按向导生成ADAMS_sub模块再导入Simulink模型。机械系统内部由ADAMS/Solver求解Simulink只管控制算法两侧通过固定的通信间隔交换数据。通信间隔的选择直接影响联仿稳定性。间隔太大会让控制器和机械响应之间出现明显相位滞后表现就是机器人“反应迟钝”姿态来回晃间隔太小则总仿真时间急剧膨胀。我一般先按0.001~0.01s这个区间试等控制器基本稳定了再调小看更精细的响应。Simulink侧建议用固定步长求解器和ADAMS_sub的采样时间保持一致否则容易在通信点之间引入插值误差。联仿发散的时候不要第一时间调PID增益先做一次“单侧排查”只跑ADAMS机械模型确认系统本身能稳定收敛再检查Simulink里的控制信号是否超出转矩范围。我见过太多次全程在调PID参数、最后发现问题是接触参数太硬导致机械模型本身就摇摇欲坠的情况。先把机械模型调稳再连控制能省掉大量无效调试时间。5. 仿真跑不动与结果不合常理的排查清单5.1 症状轮子陷进地面或整车飞散看到这个现象先恭喜你这是所有ADAMS新手必经的一课。轮子穿透地面绝大多数情况是接触刚度设得太小或者穿透深度给得太大接触力还没有把轮子顶起来就已经陷进去了。整车飞散则多半是刚度明明足够但仿真步长太大接触力在单个积分步内出现突变数值上直接“炸”掉。我的处理顺序是这样第一步看接触力曲线如果穿透阶段接触力峰值一片锯齿基本可以认定是刚度与步长不匹配第二步把刚度提到1e7量级同时把仿真步长缩小到原来的十分之一第三步确认接触的阻尼是否在合理范围阻尼太小会导致触地瞬间振荡过冲。按这个链路走八成以上的穿透问题都能解决。5.2 症状求解器报错不收敛或仿真速度极慢两轮机器人这种轮地持续接触的系统天然是数值上的硬骨头。求解器不收敛或步长被压到极小通常集中在三种原因接触刚度过大导致方程刚性过强系统存在冗余约束积分器或误差容限设置不合理。ADAMS/Solver默认的积分器是GSTIFF但这个默认并不适合所有场景。碰到接触密集的轮式机器人我会手动换到HHT积分器它处理刚性系统的稳定性明显更好。另外一个被忽略的参数是Error Tolerance默认1e-3如果模型本身收敛困难可以先放宽到1e-2跑通流程再逐步收紧。还有一种省事技巧把模型简化到只剩两个轮子和一块车底板先定位是哪处接触或约束导致不收敛再还原完整模型调起来思路清爽得多。5.3 症状曲线毛刺多或结果与理论规律不符曲线毛刺多不一定代表模型错误。轮地接触本来就是间歇碰撞过程冲击响应用普通平滑曲线反而不真实。常规做法是用后处理的滤波功能把高频分量滤掉保留低频趋势用于和理论公式对照。但毛刺如果呈周期性的尖峰就不能只靠滤波盖过去要怀疑轮子的圆度、接触算法里静动摩擦切换是否过于频繁以及驱动函数是否真的光滑。至于结果和理论规律对不上我强烈建议先把“打滑”这个因素纳入考虑。两轮机器人的经典假设通常是纯滚动无滑动但ADAMS里的库仑摩擦模型天然允许滑动摩擦系数不够大时差速转向的半径必然偏离理论值。这不一定是你模型错了反而可能是物理现实更接近仿真结果。把仿真和理论放在一起对比能让你更清晰地意识到理论公式是理想化的参考系仿真则能告诉你工程边界在哪里。做完这个课题之后我有两个很深的体会。第一ADAMS仿真的精度上限其实由模型参数决定而不是由软件功能决定建模时花10分钟填写正确的质量和转动惯量远比花两小时调色摆造型有价值。第二新的同学上手时别急着把模型建得很复杂先搭一个最简单的两轮模型跑通直线和转向把接触参数、单位、量纲这些基本功摸扎实了再加自平衡、控制算法这些进阶内容。最后分享一个小习惯每改完一轮参数把ADAMS的模型文件另存一份带上日期后缀这个软件改一个参数常常引发连锁诡异现象有版本可退回的时候你会无比感激当初的多存一步。本文还有配套的精品资源点击获取
返回列表