
简介面向单足机器人跳跃仿真的ADAMS与MATLAB联合仿真工程包适合从事多体动力学、腿部机器人控制算法设计与验证的研究者、学生或工程师可用于复现单腿跳跃全过程。压缩包共17个文件约6.21MB覆盖ADAMS标准模型文件biq/bin、MATLAB/Simulink控制模型mdl、控制器脚本m以及批处理、通讯配置、结果图形等辅助文件能够直接支撑联合仿真、数据导出与后处理分析已有267人学习下载。工程中提供的PID控制模型、仿真参数和结果文件既有利于理解腿部构型建立、跳跃驱动施加、空中姿态保持和落地缓冲等关键环节也可借助后处理绘制位移、速度与加速度曲线其模块化思路便于迁移到仿人机器人或单足平台上为后续控制优化与实验验证提供实用参考。1. 拆开Adams_Onelegged.zip单足跳跃联合仿真的模型包到底能做什么解压这个压缩包迎面是几十个扩展名各异的文件MODEL_1_3D_v5.bin、TriD_Hopping_Control_PID.m、TriD_Hopping_Control.mdl.r2010a、adams_sys_.mdl、adamsctl_6994.bat外加一堆.adm、.cmd、.res、.gra。这不是一份简单的三维模型而是一条完整的ADAMS与MATLAB联合仿真链路ADAMS负责三维多体动力学的建模、接触和数值求解MATLAB负责PID控制器和期望轨迹生成。单足跳跃对关节力矩时序、落地缓冲和姿态稳定要求极高把控制环放到Simulink里调比在ADAMS里反复改前馈力更接近工程实际。这个包适合两类人一是做机器人控制、多体动力学课程设计的学生想直接拿到“能跑出跳跃动画”的起点二是用ADAMS做仿真、又需要接入复杂控制算法的工程师。复现它需要本机同时装好ADAMS和MATLAB版本跨度不宜太大否则二进制模型文件会打不开。2. 模型文件拓扑梳理从.bin/.adm到.cmd把单足机器人读进ADAMS/View模型层在包里给出两种载体MODEL_1_3D_v5.bin和.biq是二进制模型文件TriD_Hopping_Control_PID.adm和.cmd是文本命令文件。很多人一上来随便双击要么提示“模型版本过高”要么打开一个空白视图。正确路径是优先用ADAMS/View读取二进制文件再用.cmd做命令流复现.adm则作为跨版本迁移的保底方案。2.1 二进制模型与文本模型的分工.bin/.biq保存ADAMS/View内存里的完整模型状态包括几何显示、约束和仿真设置缺点是跨大版本兼容性差。.adm是纯文本的多体模型描述记录几何点、质量、关节、力、约束便于做文本对比.cmd是ADAMS/View命令脚本导入它等于把建模操作重放一遍适合参数化复现。在这个包里TriD_Hopping_Control.mdl.r2010a说明Simulink模型是R2010a时代的产物因此ADAMS版本选2010到2019这个区间比较稳妥。2.2 在ADAMS/View里打开MODEL_1_3D_v5并核对约束拓扑常规做法是File - Open文件类型选ADAMS Binary指向MODEL_1_3D_v5.bin。如果报版本错误再File - Import选ADAMS .adm格式。为了批量可复现我通常把下面的命令存成load_model.cmd用adams view命令行执行! load_model.cmd 读入模型并清点约束 model restore file_name MODEL_1_3D_v5.bin model display model_name .MODEL_1_3D_v5 information list constraints model_name .MODEL_1_3D_v5第一行从二进制恢复模型第二行把模型设为当前显示对象第三行列出所有约束。执行后会看到类似“JOINT_1: Revolute on ground - thigh”“JOINT_2: Revolute thigh - shank”“CONTACT_1: foot ground”的列表说明髋、膝、踝和脚地接触都在。如果只有几何没有约束说明.bin和.adm内容不一致应改用.cmd重新生成。提示ADAMS/View的命令语言关键字大小写敏感后续查找状态变量时保持一致的大小写拼写否则变量找不到。2.3 状态变量与输入输出接口的检查联合仿真的核心不是几何外形而是ADAMS/Controls接口里定义的状态变量。打开.cmd文件搜索state_variable能看到类似这样的块state_variable create variable_name .MODEL_1_3D_v5.TOR_KNEE function if(.MODEL_1_3D_v5.DOF_KNEE0: 0, VAR_KNEE_TORQUE, 0)这段命令的作用是把Simulink传入的力矩信号映射成ADAMS内部力矩变量。function里的正负号代表作用方向单足机器人最容易犯的错误就是把膝关节力矩方向写反导致PID输出越大腿反而越弯。检查完状态变量后要确认plant input和plant output的顺序。ADAMS/Controls导出的adams_sub模块端口顺序由Input Signal和Output Signal列表决定。一般单足模型至少是两个力矩输入髋、膝输出是关节角度、角速度也可能包含质心位移。端口顺序错位会让PID把角度信号当力矩用仿真起步即发散。以下是包内模型相关文件的小结文件扩展名类型主要作用.bin/.biq二进制模型带显示信息打开快跨版本兼容弱.adm多体模型文本几何、质量、关节和力的完整描述.cmd命令脚本重放建模、仿真、后处理操作.xmt_txt导出模型给第三方CAD或多体工具.res/.gra结果/图形后处理曲线与动画数据3. MATLAB接管控制环TriD_Hopping_Control_PID.m与adams_sub接口的PID映射ADAMS能解刚体动力学但一个稳定的单足跳跃需要轨迹规划、闭环反馈和阶段切换这更适合放在Simulink里做。TriD_Hopping_Control_PID.m负责在仿真开始前把PID参数、期望关节角、模型全局量写进MATLAB工作区TriD_Hopping_Control.mdl.r2010a则把这些参数连接到adams_sub模块上。版本兼容上如果你的MATLAB高于R2010a打开.mdl时选择“另存为当前版本”即可不用修改模型的逻辑。3.1 初始化脚本TriD_Hopping_Control_PID.m的常见结构不同ADAMS版本生成的.m文件格式略有差异但核心动作一致定义物理参数、PID增益、期望角度、Simulink全局变量。一个典型单足跳跃PID初始化脚本是这样组织的% TriD_Hopping_Control_PID.m - 单足跳跃控制参数初始化 clear; clc; % 物理量质量、重力加速度 m 34; % 机器人等效质量 [kg] g 9.80665; % 重力加速度 [m/s^2] % 姿态期望值单位 rad hip_ref 0.05; % 髋关节期望角度 knee_ref 1.25; % 膝关节期望角度起跳前预蹲 % PID 增益先给线性化后的保守值 Kp_hip 2800; Kd_hip 120; Kp_knee 6500; Kd_knee 520; % 跳跃阶段时间常数 t_pre 0.3; % 预蹲时间 [s] t_pushoff 0.15; % 蹬伸时间 [s] ts_sim 5.0; % 仿真总时长 [s] % 为 Simulink 的 adams_sub 预留变量结构 adams_sys_parameters.model MODEL_1_3D_v5; adams_sys_parameters.inputs {TOR_HIP,TOR_KNEE}; adams_sys_parameters.outputs {THETA_HIP,THETA_KNEE,... DTHETA_HIP,DTHETA_KNEE};Kp_knee和Kd_knee不是最终值它对应弹簧-质量模型的一阶近似量级约为$Kp \approx m g / l$。实际调参时根据ADAMS后处理里的质心高度曲线做缩放增益乘0.1到10倍去扫。最后的结构体adams_sys_parameters是给adams_sub S-Function读的inputs和outputs顺序必须和ADAMS/Controls里定义的一致。3.2 adams_sys_.mdl与adams_sub的输入输出顺序ADAMS/Controls导出联合仿真模块时自动生成adams_sys_.mdl里面放着一个封装好的adams_sub S-Function。双击它参数表大致如下参数名称典型值说明Model File NameTriD_Hopping_Control_PID.adm关联的ADAMS模型Input SignalsTOR_HIP, TOR_KNEE来自PID控制器的驱动Output SignalsTHETA_HIP, THETA_KNEE, DTHETA_HIP, DTHETA_KNEE反馈给控制器Communication Interval0.001联合仿真交换数据周期Result FileTriD_Hopping_Control_PID.res保存ADAMS求解结果在Simulink模型里adams_sub左边的In端口依次接收髋力矩和膝力矩右边的Out端口输出反馈状态。如果.m中的inputs顺序写反或者PID增益极性判断错误关节会立刻超限。快速判断极性的办法是把PID增益设为0只给固定前馈偏置观察脚是否按预期蹬地。若蹬地方向反了把对应关节的输入力矩取负。3.3 PID参数映射和单位换算ADAMS默认单位制是mmks即长度mm、质量kg、时间s、力N力矩单位是N·mm。而MATLAB控制脚本里习惯用N·m。如果.m文件直接用N·m计算必须换算1 N·m 1000 N·mm。接口层没有加单位转换时PID输出会小三个数量级表现为关节几乎不动但控制量看起来正常。我习惯在.m定义比例因子并在Simulink PID输出端串一个Gain% 在.m中定义单位换算避免每次改模型都翻单位 tau_scale 1000; % N·m - N·mm Kp_knee_mm Kp_knee * tau_scale; Kd_knee_mm Kd_knee * tau_scale;对应Simulink里PD控制器计算出的力矩乘以tau_scale再进adams_sub。除了单位还有代数环问题adams_sub在离散求解时反馈通道经过微分或直接用了输出信号Simulink会检测到代数环。常见做法是给控制器输出加一个Memory或Unit Delay块把瞬间代数依赖打破联合仿真才能顺利初始化。4. 把联合仿真跑起来adamsctl批处理、求解器配置与结果文件后处理模型读进来了控制环接上了下一步是把整体跑通。很多人直接在Simulink点Run结果MATLAB卡在初始化界面或者报Unknown ADAMS error。要理解这套文件的使用链TriD_Hopping_Control.mdl不是独立模型它会调用adamsctl_*.bat去拉起ADAMS求解器进程。4.1 adamsctl_*.bat的作用与启动校验每次在Simulink里开始联合仿真时ADAMS/Controls会在工作目录生成一个adamsctl_随机数.bat。本包里有两个adamsctl_6994.bat和adamsctl_45818.bat说明至少跑过两次联合仿真。批处理负责设置环境变量、启动ADAMS求解器、监听通信端口。内容大致如下echo off set ADAMS_CONTROL_PORT6994 call C:\MSC.Software\Adams\2019\common\mdi.bat adams ru-solver modelnameTriD_Hopping_Control_PID ...ADAMS_CONTROL_PORT是ADAMS和Simulink通信用的本地TCP端口每次运行会随机生成。如果系统杀毒软件拦截本地端口监听Simulink会停在“Initializing ADAMS”很长一段时间。经验做法是把ADAMS安装目录加入白名单并允许adamsctl_*.bat访问网络。另一个容易踩的坑是工作目录不能有中文否则批处理里调用mdi.bat时路径解析失败。4.2 求解器配置固定步长与积分器选择Simulink侧的参数不能照搬默认。推荐如下配置位置参数推荐值说明SolverTypeFixed-step变步长会使通信点错位SolverFixed-step size0.001与ADAMS通信周期匹配SolverSolverode4 (RK4)平衡精度与速度adams_subCommunication Interval0.001必须与步长一致或整数倍Stop time5覆盖一次完整起跳落地如果ADAMS侧本身是自适应步长Simulink固定步长不再是硬性要求但为了结果可重现统一用固定步长更稳妥。求解器方面ADAMS默认GSTIFF适合强耦合、含高副约束的机械系统HHT对接触和柔性阻尼问题更稳定。单足跳跃落地瞬间有接触力突变我一般先试HHT积分误差容差设为1e-4若计算太慢再换回GSTIFF并把容差放宽到1e-3。4.3 结果文件.res/.gra/.req的后处理仿真结束后包里的TriD_Hopping_Control_PID.res、.gra和.req会更新。.res是ADAMS求解器二进制结果包含所有位移、速度、加速度和接触力.gra是ADAMS/View图形动画数据.req是用Request定义的输出通道。重复利用这些数据可以在ADAMS/PostProcessor里直接读.res画曲线。要在MATLAB里做参数辨识建议导出成csv或mat然后统一分析% 读取ADAMS导出数据假设通过export生成timeseries load(jump_result.mat); t jump_result.time; zc jump_result.signals.values(:, 3); % 第三列是质心高度 [zc_max, idx_max] max(zc); fprintf(最大高度 %.3f mm时间 %.3f s\n, zc_max, t(idx_max));这里zc_max的单位取决于ADAMS模型单位制。如果模型是mmks高度就是mm。与理论值对比时把mm换成m再代入能量公式$mg\Delta h \frac{1}{2}mv^2$可以反推起跳初速度。课程设计报告里的数据对不上多数是单位没有换算。检查.res是否有效还可以看aview.log里的错误消息.msg文件如果包含“Warning: step size too small”说明系统刚度过大优先降低通信步长或改用HHT。5. 调参排错跳跃落地发散的四个检查点与参数修正5.1 接口方向先加一个固定前馈验证力矩极性把Simulink中所有PID增益设为0在求和节点前加一个常值力矩。膝关节给200 N·m髋关节给0观察模型是否做出伸膝蹬地动作。如果反了把对应输入力矩取负即可。这一步能规避后续调参时“越调越乱”的困境。5.2 落地发散先调接触与积分器再动PID仿真在起跳阶段正常、着地瞬间发散往往是接触参数不合适而不是PID问题。在.cmd或.adm中搜索contact典型设置是STIFFNESS1.0E05 DAMPING1.0E02。若落地时接触力突变太大先把刚度减半阻尼增加30%同时把Simulink固定步长从0.001降到0.0005观察是否仍发散。多数情况下发散起源于积分器无法收敛脚底接触力而不是增益过大。5.3 膝关节速度反馈是落地缓冲的关键单足落地时膝关节需要先屈曲再伸展来耗散能量。只靠位置PID会硬碰硬。正确做法是把期望膝角速度设为0并在触地后的阶段提高Kd_knee。比如在.m中加一个阶段分支% 落地缓冲t_touch 后提高膝阻尼 if t t_pre t_pushoff t t_pre t_pushoff 0.2 tau_knee Kp_knee*err_knee - 2.5*Kd_knee*dq_knee; else tau_knee Kp_knee*err_knee - Kd_knee*dq_knee; end系数2.5表示落地瞬间阻尼增益抬升具体倍数根据质心高度过冲量选择过冲超过30%时抬到4倍并减少期望伸展角。5.4 用曲线而非动画判断稳定性动画看起来“好像稳了”不代表稳定。要看三条曲线质心垂直位移是否只出现一个主峰且第二个峰值小于第一个的15%髋关节角是否在±0.2 rad内收敛膝关节力矩在落地瞬间是否出现正常的正负交替。如果质心高度曲线出现高频振荡检查.adm中的质量是否与.m中m一致常见错误是把kg与t混用导致控制增益相差1000倍。检查顺序按极性、接触、速度阻尼、单位依次来每次只改一个变量保留对应的.res文件作对比就能快速定位问题点。本文还有配套的精品资源点击获取