简介:这是一份面向机器人工程、机械仿真及运动控制研究者的PDF文献资料,内容来自《装备制造技术》2017年第09期,系统探讨蛇形机器人的模块化关节结构设计与爬坡运动规划。资料从单元体履带驱动、关节偏转/仰俯自由度等参数入手,给出关节转动范围、质量、外形尺寸等结构参数,结合受力平衡方程推导了机器人稳定爬坡所需的驱动条件与附着条件,并利用ADAMS软件完成爬坡过程的位置、速度、加速度及关节力矩仿真,分析不同坡度角对地面阻力与附着能力的影响,可为蛇形机器人运动规划、机构参数优化或相关课程设计提供完整的技术参考。资源为1个PDF文件,大小约625KB,便于直接阅读与打印。该文献已有420人学习下载,适合处于方案设计或仿真验证阶段的机器人方向学习者使用。 做蛇形机器人运动仿真那阵子,我先是在建模阶段卡了快两周,后来好不容易让模型在ADAMS里动起来,又撞上一记“has stopped working”的崩溃弹窗,几小时的数据差点全丢。这篇文章不讲教科书,只写我用ADAMS做蛇形机器人运动仿真时那些能直接套用的套路、参数和坑。适合正在做毕业设计、课程设计,以及想快速验证蛇形机器人机构方案的研究生和工程师参考。
我需要提前说明一下,蛇形机器人并不只是一根会扭的杆,它的核心价值在于通过多个关节的协同波动,在狭窄空间、非结构化地形等场景里完成移动。仿真要回答的问题也很明确:关节该怎么摆、驱动函数怎么设、速度能不能达到预期、关节力有没有超过电机能力。ADAMS这类多体动力学软件,正好能把机构、驱动、接触、摩擦揉在一起算,比纯数学推导直观得多。
1. 这个课题为什么绕不开ADAMS:目标拆解与选型逻辑
1.1 蛇形机器人仿真到底要解决什么问题
蛇形机器人本质上是由N个刚性单元串联成的多体系统,相邻两节通过关节连接。和四足、轮式机器人最大的区别是,它没有一个固定底座,所有运动都依赖身体形态随时间变化来产生推进力。
在做仿真之前,先要把目标拆清楚。我做这个课题时,把问题拆成了三层:
- 几何层:每节连杆的长度、直径、质量、转动惯量,以及关节的布置位置。
- 运动层:让身体形成类似正弦波的形态,波从尾部向头部传播,地面对蛇身的反力推动整体前进。
- 动力学层:关节执行正弦轨迹时,实际需要多大的驱动力矩,是否在电机和减速器的持续输出范围之内。
如果没有ADAMS这类多体动力学软件,第二层和第三层很难同时处理。很多人在MATLAB里搭运动学模型,也确实能算出蛇身轨迹,但一旦把重力、摩擦、接触力加进去,模型复杂度和求解难度会急剧上升,而且自己写的数值积分器很容易发散。ADAMS的优势是,它已经把求解器、碰撞检测、摩擦模型、后处理集成好了,我只需要把模型搭出来、把驱动函数填进去,剩下的交给你去解。
1.2 为什么是ADAMS而不是纯数值仿真
有一种很常见的质疑:蛇形机器人用Simulink加简化的运动学方程也能仿真,为什么非要ADAMS?我的回答是,看你想验证到哪一层。
我自己做过对比,用Simulink做“单关节角度轨迹跟踪”,只花了一下午就把PD控制器调通了;但如果要验证“整个蛇身在地面上能不能前进”“关节力矩峰值是多少”“哪个关节最容易打滑”,纯数值模型很难精确表达接触和摩擦。ADAMS处理接触问题时,用的是基于碰撞函数的接触力模型,能够给出关节力和接触力的时间历程,这些数据对电机选型和结构设计特别重要。
另外,ADAMS在机构层面有一套成熟的约束库,转动副、移动副、球铰、齿轮副都可以直接调用,不需要自己推导约束方程。蛇形机器人的关节自由度分配、奇异位形检查、过约束排查,在ADAMS里都更直观。
关于工具选型,我用一张表来对比三种常见路线:
| 方案 | 优点 | 局限 | 适用阶段 |
|---|---|---|---|
| 纯MATLAB数值仿真 | 搭建快、改控制算法容易 | 接触摩擦建模粗糙,物理细节少 | 算法验证、控制策略初筛 |
| ADAMS经典界面 | 多体动力学成熟,约束库丰富 | 控制算法表达能力弱 | 机构设计、运动学动力学验证 |
| ADAMS与Simulink联合仿真 | 兼顾机构动力学与控制算法 | 模型调试复杂,容易因接口问题崩溃 | 机电一体化、闭环控制验证 |
2. 模型准备阶段:几何构建、单位统一与自由度分配
2.1 两种建模路线:CAD导入与ADAMS内置实体建模
蛇形机器人的模型来源通常有两种。第一种是用SolidWorks、UG等三维软件画好装配体,然后导出为Parasolid格式(x_t)导入ADAMS。这种方式的优点是几何精度高,适合做接近真实样机的模型;缺点也明显,装配体中大量圆角、倒角、螺纹孔会让模型文件变得很大,而且导入后经常出现单位不匹配、约束丢失的问题。
我踩过的第一个坑就是单位。SolidWorks里默认是毫米,ADAMS经典界面默认是米,如果不做单位转换,导入后整个模型会小1000倍,重力、惯量全都跟着不对。规范的流程是:在ADAMS里先通过菜单Units设置,把长度单位改成millimeter,再将导入时的缩放比例设为1.0,导入完成后再检查一下模型尺寸。
第二种方式是在ADAMS里直接用软件自带的几何元素建模。蛇形机器人每个关节单元其实就是一个长方体机箱加一个连接轴,几何结构并不复杂,完全可以用Link或Box搭出来,再通过布尔运算组合。这种方式虽然要花一点时间,但搭出来的模型非常干净,文件小、仿真快,还避开了CAD导入格式转换的一系列问题。
如果你对CAD软件不熟,强烈建议走第二条路。我后来把方案从CAD导入改成了ADAMS内置建模,仿真速度直接提升了一倍以上,原因就是模型中每个构件都用简单的几何体代替,接触计算量大幅下降。
2.2 自由度分配、约束副选择与简化原则
自由度分配是蛇形机器人仿真的核心设计点之一。以十节蛇身为例,如果每两节之间用一个转动副,关节轴线垂直于地面,那么机器人就只有横向摆动自由度,适合在平面上做蜿蜒运动;如果把转动副轴线改为水平方向,机器人就能做垂直方向的起伏运动,适合爬坡或者攀越障碍。
我设计模型时,相邻两节之间加的是旋转副(Revolute Joint),旋转轴沿铅垂方向,让蛇身做侧向波动。整套模型一共有九个转动副,每个转动副对应一个独立驱动,自由度分配方案如下:
| 参数 | 建议值 | 说明 |
|---|---|---|
| 蛇身节数 | 8到12节 | 节数太少波形成形能力差,太多仿真计算量大 |
| 关节类型 | 旋转副 | 模拟真实电机驱动的相邻机体摆动 |
| 每节长度 | 80到120 mm | 根据目标工况调整,细长比值影响波动效率 |
| 驱动关节数 | 节数减1 | 首尾两节更多是被动跟随,不必都加驱动 |
| 接触方式 | 每节底部加球体或圆柱体 | 用低摩擦实体模拟机体与地面接触 |
建模时特别要注意简化。不要一上来就把螺丝孔、倒圆角、散热片全部建出来,ADAMS做的是机构级动力学仿真,不是结构强度分析,这些特征对关节力矩和质心位移的影响可以忽略,但会让求解器每一步都要计算无效的几何拓扑。
务实做法是:每个蛇身节片用一个规则的Box或Cylinder表达,质量属性按真实材料密度设置,把减速电机和驱动板等效成集中质量块,附加在关节附近。这样既保证了动力学参数准确,又不会让模型复杂到没法算。
3. 让蛇形机器人“动”起来:步态函数与驱动设置
3.1 波动步态的核心:相位差与幅值的配合
蛇形机器人能前进,不靠关节本身转动,而靠关节角随时间形成行波。简单说,如果从蛇尾向蛇头看,每个关节的摆动角度都有一定滞后,就像海浪一样把身体形态的变化从尾部传递到头部,地面与蛇身之间的摩擦再把这股波动变成前进的力。
最经典的关节角控制律是:
θ_i(t) = A · sin(ω · t + (i - 1) · φ)
其中,θ_i是第i个关节的目标角,A是摆动幅值,ω是摆动角频率,φ是相邻两个关节之间的相位差。影响运动效果的主要就是这三个参数:
- 幅值A:决定蛇身弯曲幅度,太小推不动身体,太大会让相邻关节过度挤压甚至自锁。我常用的范围是10°到30°。
- 频率ω:决定波动快慢,过高时地面反力不能及时传递,会出现“空扭”现象,整个蛇身不前进只原地乱颤。一般取1到2 Hz比较稳。
- 相位差φ:这是最关键的一项。φ太小时所有关节几乎同步摆动,形不成行波;φ太大时相邻关节相互抵消,同样不走。对十节模型来说,φ取30°到36°左右往往能形成较完整的波形周期。
需要注意,这条函数是关节的目标位置,不是关节的力矩。在ADAMS里,我应该把它定义成关节的Motion,让运动副按照这个规律强制运动。这样才能先做运动学仿真,验证波形是否合理;等确认波形对了,再切换到关节力矩模式做动力学分析。
3.2 驱动函数写法:STEP与正弦表达式的选择
在ADAMS经典界面里,给旋转副施加运动驱动的方法是:选中旋转副,添加Motion,然后在Motion的Function Builder里定义函数。对于正弦波动,我最常用的函数形式是:
STEP(time, 0, 0, 1, 0d) + 20d * SIN(360d * time + 30d)
这里的20d表示摆动幅值为20度,360d * time表示频率为1 Hz,30d是相位。前面加STEP的目的,是让仿真开始后前1秒内不立刻摆动,给求解器和模型一个稳定的初始化过程,避免启动瞬间出现冲击力。
我这里补充一个特别容易出错的地方:在ADAMS函数里,所有角度必须带d后缀,否则软件默认按弧度处理。比如20d代表20度,如果只写20,那就成了20弧度,约1146度,蛇身会瞬间转好几圈,仿真几乎必然发散。
如果你的关节数量比较多,一个个手写函数很容易出错。更规范的做法是定义设计变量,把A、ω、φ、启动时间都设为变量,然后在函数里引用这些变量。这样后期调参时只改一个变量,不需要逐个关节改函数,排查问题也方便。
对于想要做控制仿真的人,还有一条更高级的路:在ADAMS里不定义关节Motion,而是定义关节力矩;力矩的大小由外部控制信号输入,可以通过ADAMS Control模块与MATLAB/Simulink联合仿真实现。不过这条路调试成本高,建议先跑通纯粹的关节运动仿真,积累一些基础数据再考虑。
4. 仿真求解与结果验证:参数设置和输出处理
4.1 求解器配置与步长选择的经验值
很多人在ADAMS里直接点仿真按钮,然后用默认配置跑,结果要么算得极慢,要么跑到一半报错。求解器参数看着不起眼,却直接决定仿真能不能顺利跑完。
蛇形机器人这类包含接触和摩擦的模型,比较稳妥的配置是:求解器选GSTIFF,积分格式选I3,误差设为1.0E-03,仿真时长先设5秒,步长设为0.01秒。如果模型里接触较多,GSTIFF有时会出现高频振荡,可以换成WSTIFF或者ABAM,牺牲一点计算速度换来稳定性。
另一个经验是:不要一上来就仿真10秒、20秒。先用1秒的短时长把波形和约束逻辑验证清楚,确认关节不飞、约束不爆、接触状态正常后,再逐步把时长拉长到10秒。否则一旦中后段出现数值发散,排查起来非常痛苦。
我常用的基础仿真参数如下:
| 配置项 | 参数值 | 说明 |
|---|---|---|
| 求解器 | GSTIFF | 默认但适用大多数机构仿真 |
| 积分格式 | I3 | 稳定性好,速度较快 |
| 误差 | 1.0E-03 | 精度要求不高时取这个值即可 |
| 仿真时长 | 5至10秒 | 至少能看出两个完整步态周期 |
| 步长 | 0.01秒 | 过小会显著增加算量 |
| 摩擦系数 | 0.3至0.5 | 蛇身与常见地面材料之间 |
仿真过程中,要经常看屏幕下方的信息窗口。如果出现“joint locked”、“singular matrix”这类提示,说明约束或过约束有问题,这时候不要再硬跑,先回模型里检查约束副。
4.2 评价指标:速度、稳定性与能耗怎么提取
仿真跑完之后,后处理环节更考验经验。蛇形机器人的效果不能只看“动没动”和“跑了多远”,还需要衡量三个关键指标。
第一个是平均前进速度。可以在蛇身质心位置创建一个Marker点,然后Measure质心沿运动方向的位移,最后用总位移除以总时间。这个数据可以直接验证步态参数是否合理。如果速度明显偏低,优先检查相位差是否设置恰当,再检查摩擦系数是否过小。
第二个是关节力矩峰值。在Motion仿真中,ADAMS可以输出每个关节的约束力矩曲线,这个值可以近似看成电机需要输出的力矩。设计阶段,我通常把所有关节力矩曲线叠加在一起,找出峰值最大的那个关节,用这个峰值去对比电机的额定输出,留出1.5到2倍的余量。
第三个是关节功率,也就是力矩乘以角速度,对时间积分可以获得总能耗。这个指标在做实际样机时很有参考价值,能帮助判断哪段步态更省电,为后续步态规划提供依据。
后处理时,先把视角切换到后处理模块,将质心位移、关节力矩、角速度曲线一次性导出为文本文件或CSV,后续在MATLAB里做进一步分析。这样一份仿真项目就能同时支撑运动学分析、电机选型和控制算法验证,效率会高很多。
5. 崩溃与报错的排查:来自反复试错的真实经验
5.1 “ADAMS has stopped working”的常见触发源
在ADAMS里做蛇形机器人仿真,几乎每个人都遇到过“ADAMS has stopped working”这个弹窗。最开始我以为是自己电脑装得有问题,后来排查多了,发现大部分崩溃其实有规律可循。
我遇到最多的情况来自导入模型。如果模型文件放在中文路径下,或者文件名本身包含中文,ADAMS在读取和写入临时文件时容易出错,程序会直接崩溃。后来我把所有仿真相关文件都放在纯英文路径下,文件名也全部改成英文字母,这个问题就很少再出现。
第二个高频触发源是模型单位混乱。CAD软件导入后,如果某个部件是毫米、某个部件被错误识别成米,整个模型会产生巨大的尺度差异,求解器在计算接触和约束时很快就会出现数值溢出,最后表现为程序闪退。所以每次导入模型后,第一件事不是拉模型看造型,而是测量一个已知尺寸特征,确认单位正确。
第三类是模型本身的问题。机器人模型中约束冗余、同一位置同时存在接触力和运动副、接触参数设置过于尖锐等,都容易让求解器在某个时间步产生奇异矩阵。程序一旦遇到算不下去的数,就可能直接退出。这类问题排查起来难,但有个规律:崩溃通常发生在某个特定时刻,比如接触的瞬间或者驱动启动的瞬间。
5.2 从文件路径到接触参数:逐项排查清单
System已经弹了很多次崩溃后,我总结了一套排查流程,每步只改一个变量,跑通一个阶段再进入下一阶段。
第一步,检查工作路径和文件名。把模型、材料、结果输出全部放到纯英文目录,模型名不用中文、不用空格、不用特殊符号。
第二步,简化场景。把地面接触删除掉,让蛇身在空中空转。如果空转可以跑通,说明问题出在接触上;如果空转也崩,说明问题出在约束或驱动函数上。
第三步,检查约束。逐个查看旋转副,确认每个运动副只负责一个方向的自由度,轴线和驱动方向一致,没有重叠约束。蛇形机器人建模中最容易出现的过约束,是同一个关节上同时添加了旋转副和固定副,这种冗余约束会让求解器矩阵奇异。
第四步,从纯运动学切换为动力学。先把接触力加上,但摩擦系数设得很小,比如0.05,跑一个1秒短时长测试;稳定后再逐步把摩擦系数提高到目标值。如果接触力让仿真发散,一般从接触刚度入手,把刚度值适当调低,把阻尼调大,让接触过程平滑一些。
第五步,检查驱动函数。如果使用正弦函数,确保角度单位正确,相位和幅值不要过大。可以先把幅值降到5度,让步态柔和,跑通后再逐步加大到目标幅值。
我自己的习惯是,每改完一步就另存一个带编号的文件,比如snake_v05_test01.bin,绝不覆盖上一个能跑的版本。因为在反复调参的过程中,经常会出现“新参数跑不通,想退回上一个能跑的版本”的情况,没有备份就只能从头再试。
最后再分享一个小技巧:正式仿真前,把模型的每一步输出量降到最低。不要一开始就同时测量几十个关节力矩和几十个Marker点位移,这些测量会大大增加数据写入量,也增加了崩溃概率。先保存基础的质心位移和关节力矩,等确认模型稳定了,再添加更多测量项。
做完蛇形机器人运动仿真这个项目,我最深的体会是,ADAMS这类工具真正的门槛不在操作命令,而在你对机构本身的理解。约束、自由度、步态相位这些概念想清楚,建模和调参就快;概念模糊,软件再好也只能不断在崩溃里消耗耐心。这套流程,我现在在其他多体仿真项目里也在用,效率提升非常明显。
本文还有配套的精品资源,点击获取