news 2026/9/19 14:37:01

四足机器人ADAMS与MATLAB联合仿真:建模、控制与调试全流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
四足机器人ADAMS与MATLAB联合仿真:建模、控制与调试全流程

简介:一份基于ADAMS与MATLAB的四足机器人联合仿真毕业论文PDF,面向机器人、机械工程及自动化方向的学生、研究人员与毕业设计者。论文以ADAMS完成四足机器人三维建模与运动仿真,获取步态运动特性与动力学响应;再借助MATLAB对仿真数据进行处理与分析,提炼出运动学与动力学参数,并围绕结果展开讨论。文中构建了从仿真建模、数据处理到结论分析的完整闭环,尤其是对ADAMS与MATLAB联合仿真流程的细致展示,可为机器人机构设计、控制器开发及性能验证提供可供参考的方法与思路。资源为单个PDF文档,大小约10.95MB,内容结构清晰、章节完整,适合作为课程设计、毕业论文写作或相关课题预研的参考。目前已有234人学习下载,可供需要系统了解四足机器人仿真流程的读者直接借鉴。

1. 为什么四足机器人项目先做 ADAMS 和 MATLAB 联合仿真最省成本

试验机刚通上电,四条腿还压在地面上,程序里第一次下发正弦摆腿轨迹,机身在第二个周期就朝右侧倒下去,髋关节力矩曲线直接撞上电机限幅。这是我在四足机器人调试现场见过最多的开局。

把这套流程放回 ADAMS 和 MATLAB 联合仿真里,情况会完全不同。ADAMS 负责足端接触、关节摩擦和刚性多体动力学求解,MATLAB/Simulink 负责步态规划、关节控制律和参数辨识,两边每隔一个通信间隔交换关节角度与关节力矩,就能在样机通电之前先验证控制器是否稳定。对四足机器人来说,髋关节限位、膝关节碰撞、足底打滑这些非线性因素太多,单靠简化模型很难暴露问题,联合仿真恰恰是成本最低的验证手段。

把建模、接口、控制、排错这条路径从零走通,能覆盖本科毕业设计、研究生课题,也适合准备转机器人控制算法的工程师参考。下面直接按可复现的顺序展开。

2. ADAMS 和 MATLAB 联合仿真的分工与四足机器人的接口设计

2.1 把动力学求解器交给 ADAMS,把控制算法交给 Simulink 的分工逻辑

在四足机器人这类包含足端接触、关节限位和大范围转动的系统中,单一工具很难覆盖从步态规划到动力学仿真的全部环节。把全身动力学方程用 Simulink 从头搭一遍不是不能做,但地面接触、摩擦锥、膝关节限位这些约束一旦叠加,模型规模和数值稳定性都会迅速失控。ADAMS 的价值在于把多体动力学当作约束优化问题求解,牛顿-欧拉方程、拉格朗日乘子、接触罚函数都由求解器统一处理,四足机器人模型的几何、质量、惯量和转动副只需要以物理参数形式给出。

MATLAB/Simulink 这侧承担的不是动力学计算,而是四足机器人控制算法:步态相位表、关节轨迹规划、位置环 PID、重力补偿和力矩限幅。控制器在每个控制周期读取 ADAMS 返回的关节角度和角速度,计算完关节力矩再回传给 ADAMS,形成一个闭环。这个闭环决定了联合仿真本质上采用 co-simulation 架构:ADAMS 与 Simulink 各自维护独立的求解过程,每隔一个固定的通信间隔交换一次数据,而不是把 ADAMS 模型编译成 Simulink 的连续模块。

co-simulation 的优点是两边可以独立调试,ADAMS 端不关心控制器内部逻辑,Simulink 端也不关心小腿与地面接触到底是怎么计算的;缺点则是通信步长如果设置过大,零阶保持的力矩指令会让关节响应出现高频抖动。所以要动手,先要理解接口上传递的到底是什么。这也是下面状态变量设计的出发点。

2.2 用 ADAMS 状态变量定义 plant input 与 plant output,把关节力矩和转角精确对上

ADAMS 与 MATLAB 之间的接口通过状态变量完成。每一个状态变量在 ADAMS 中对应一个可被表达式引用的量,比如关节驱动力矩、关节角度、角速度。联合仿真导出的 ADAMS 模型会把这组变量分成 plant input 和 plant output 两类:plant input 从 Simulink 接收力矩指令并施加到铰链上,plant output 把 ADAMS 的积分结果送回 Simulink。四足机器人的每条腿如果配置髋 pitch 和膝 pitch 两个驱动关节,一个 adams_sub 模块的输入端口数应为 8,输出端口数至少应为 16,即角度加角速度的完整组合;如果还要观察足端接触力,输出端口数会继续增加。

创建输入状态变量时,函数表达式可以先写成常数,再把创建好的作用力矩引用它;输出状态变量则直接读取两个 marker 之间的相对角,不需要再走测量环节。这两个动作在 ADAMS/View 里都可以用命令完成,以左后腿为例:

# 定义左后腿髋关节的力矩输入状态变量,初始为 0 state variable create state_variable_name=.quad.tau_lh_hip \ function="0.0" comment="left hind hip torque input" # 将上面的状态变量挂到髋关节转动副上的单作用力矩 force create direct single_component \ single_component_name=.quad.force_lh_hip \ i_part_name=.quad.thigh_lh \ j_part_name=.quad.torso \ action_only=on \ function="VARVAL(.quad.tau_lh_hip)"

这段命令的含义是:先在状态变量里预留一个名为 tau_lh_hip 的存储位,再用 VARVAL 函数把它读入单作用力矩,Simulink 端写进来的数值会直接变成这个力矩的实际大小。需要注意 i_part_name 和 j_part_name 的顺序,顺序直接决定力矩正方向;如果写反,四足机器人在仿真开始后几秒内就会出现腿部弯折方向相反的现象。

输出侧的变量可以用类似方式创建,但真实项目里更常见的做法是从 Joint 的测量中直接生成,因为测量值自带坐标系和单位,不容易把符号搞错。命名建议采用“变量类型_腿编号_关节名”的格式,例如 tau_fl_hip 表示左前髋关节力矩输入,q_fr_knee 表示右前膝关节角度输出。这样在配置 ADAMS/Controls 导出的变量列表时,端口顺序会清楚很多。

2.3 通信间隔怎么取:从关节带宽反推 ADAMS 求解器步长

通信间隔是联合仿真里最重要的时间参数,它决定 ADAMS 求解器每积分多长时间把状态交给 Simulink 一次。四足机器人的髋膝关节经过减速器后,闭环带宽通常在 50 到 150 Hz 之间,按采样定理反推,通信间隔取 1 到 2 ms 就能覆盖大多数控制需求。间隔越小,力矩指令的更新越接近连续,但 ADAMS 端会被频繁中断,仿真总时长明显变长。

实际工程中,可以从下面这张经验表起步。

通信间隔适用场景仿真开销常见现象
0.5 ms关节带宽 ≥300 Hz、关注冲击响应的实验极大仿真速度下降明显,适合短时程验证
1–2 ms电机加减速器后的常规关节,50–150 Hz中等初调首选,2 ms 起步比较稳
5 ms 以上慢速行走、只验证步态时序较小零阶保持明显,髋关节可能出现锯齿状力矩曲线

判断通信间隔是否偏大的方法很直接:在 Simulink 里同时记录关节力矩指令和 ADAMS 返回的关节角度,如果角度曲线在力矩切换点附近出现周期性与通信间隔同步的毛刺,就把通信间隔减半再跑一次。毛刺消失说明原设置偏大,保留减半后的值;如果减半后仍然存在,问题更可能在 ADAMS 端的接触刚度或摩擦系数,不应继续压缩时间步长。通信间隔还需要与 Simulink 的求解器步长保持 1:5 到 1:10 的关系,否则采样点错位会引入额外相位延迟,这一点到第四章配置求解器时会再次用到。

3. 在 ADAMS 里搭四足机器人动力学模型,坐标系和状态变量一次到位

3.1 按“躯干-髋-大腿-小腿”的顺序创建模型,从一条腿复制出另外三条

四足机器人的运动链是固定的:躯干作为基座,四个髋关节分布在躯干的四个角,每条腿由髋、大腿、小腿三段组成。ADAMS 建模顺序建议沿着“先躯干、再髋、再大腿、再小腿”的链条方向进行,避免创建转动副时 i_part 和 j_part 选错对象。具体操作上,先在 ADAMS/View 中新建模型,用 rigid body 创建躯干几何体,再把四个髋关节安装点放在躯干坐标系下对称的位置。一条腿搭好并验证关节转动方向后再复制,是效率最高的做法。

以左前腿为例,创建躯干和第一个髋关节时要注意,躯干位置应离开地面一段距离,让后续的小腿末端能够落在足底接触平面上。命令行等价操作如下。

# 创建四足机器人模型与躯干 model create model_name=quad_robot part create rigid_body name_and_position part_name=.quad_robot.torso \ adams_id=1 \ location=0.0,0.40,0.0 \ orientation=0.0,0.0,0.0 # 创建左前髋的旋转副,Z 轴作为转轴方向 marker create marker_name=.quad_robot.fr_hip_marker \ location=0.16,0.37,0.13 \ orientation=0.0,0.0,0.0 joint create joint_name=.quad_robot.fr_hip_hinge \ adams_id=11 \ i_part_name=.quad_robot.torso \ j_part_name=ground \ location=0.16,0.37,0.13

这段命令只完成了躯干和髋关节的建立,后面的大腿、小腿还需要分别创建 rigid body 并用旋转副连接到髋关节上。创建旋转副时,ADAMS 会根据 marker 方向确定转轴;如果转轴没有和后续力矩方向对齐,仿真中会出现大腿绕错轴旋转。建议在创建 Joint 后打开信息窗口核对转轴坐标系标号,确保与状态变量中 AZ 函数使用的 marker 完全一致。

复制腿会带来隐藏成本。复制后要逐个修改 body 名称、marker 名称和 joint 的 i_part、j_part,否则状态变量表达式会引用到同一个对象上。联调阶段端口数正确但四条腿曲线完全重复,绝大多数是漏改了复制对象的名称。

3.2 质量、惯量、限位和摩擦参数:给四足机器人取一组能稳定跑通的初始值

模型参数直接决定仿真能不能跑得动。质量太小,足底接触力不足,步态像在悬浮;质量太大,关节力矩会过早撞上限幅。一组从 6 kg 级四足样机简化下来的参数可以作为起点。

部件质量 kgIxx kg·m²Iyy kg·m²Izz kg·m²
躯干5.80.0450.120.10
大腿0.550.00080.00120.0012
小腿0.320.00060.00090.0009

关节限位要按实际机械结构给出,防止仿真中出现膝关节反关节。四足惯性工程中一组常用限位如下。

关节最小角度最大角度初始角度
髋 pitch-45°+50°
髋 roll-15°+15°
膝 pitch-120°-30°

摩擦参数不能一开始就给到真实值。真实关节摩擦往往比模型大很多,如果用实测值启动仿真,拧紧力矩会造成高频颤振。我一般把关节铰链的摩擦转矩设为 0.05 N·m,阻尼设为 0.05 N·mm·s/deg,等模型跑通后再逐步加大。足底与地面采用 ADAMS 里的 Solid 到 Solid 接触,接触刚度取 1e5 N/m、阻尼 20 N·s/m、静摩擦系数 0.8、动摩擦系数 0.6。刚度 1e5 对应单腿约 60 N 载荷时产生 0.6 mm 穿透量,这个量级下稳定较好;继续增大刚度,通信间隔往往得缩到 1 ms 以下,仿真会明显变慢。

3.3 把输出角度和输入力矩写成状态变量,规避联合仿真中的符号错误

状态变量的函数表达式直接决定 ADAMS 送给 Simulink 的数据是什么。输出角度优先用 AZ 函数在两个 marker 之间取值,不要直接用 Part 的全局旋转角;这样得到的是相对角,抗坐标系漂移能力更强。以左前髋 pitch 为例:

# 左前髋 pitch 输出角度,单位度 state variable create state_variable_name=.quad.q_fr_hip \ function="AZ(.quad.fr_hip_i, .quad.fr_hip_j)" \ guess=0.0 # 左前髋 pitch 角速度输出 state variable create state_variable_name=.quad.dq_fr_hip \ function="WZ(.quad.fr_hip_i, .quad.fr_hip_j, .quad.fr_hip_i)" \ guess=0.0

AZ 返回从 marker i 的局部坐标看 marker j 的方位角,WZ 返回两者沿当地 Z 轴的相对角速度。使用这两个函数时,marker 名字要写完整,不要多空格;模型里如果有两个相近的名字,先打开 Marker 列表确认对象,防止 ADAMS 自动补全到错误的 marker 上。角度单位也要统一:ADAMS 默认输出角度单位是度,MATLAB 控制算法里几乎都用弧度。建议在 ADAMS 端直接换算成弧度,或者在 MATLAB Function 块的第一行统一乘以 pi/180,二选一,不要两边各做一次。

输入力矩变量的创建和 2.2 节一致,初始值写 0 即可。建议把四条腿的输入变量集中建在一个组里,使用相同前缀,这样第四章 ADAMS/Controls 导出界面里,变量列表按名称排序后一眼就能区分输入和输出。

4. 用 ADAMS/Controls 导出可被 MATLAB 调用的 adams_sub 联合仿真插件

4.1 controls 插件加载与 Plant Export 参数设置

ADAMS 的联合仿真接口由控件工具栏提供,正式名称是 ADAMS/Controls。打开 ADAMS/View 后,先进入 Plugins > Plugin Manager,确认 Controls 处于 Load 状态;如果没有加载,选中并点击 Apply。这一步经常被跳过,后果是右键菜单里找不到 Plant Export 选项,后续所有配置无从开始。

确认插件加载后,在 Plugins > Controls Toolkit 中选择 Plant Export,弹出对话框中的参数按下表填写。

参数推荐值说明
File Prefixquad_plant生成文件统一前缀,MATLAB 脚本也叫这个名字
Target SoftwareMATLAB联合仿真的目标平台
Analysis Typenon_linear四足带接触和摩擦,必须选非线性
Platformx64与操作系统和 MATLAB 位数保持一致
Adams/Solver ChoiceC++Windows 下优先选 C++,兼容性更好
Communication Interval0.005单位秒,即 5 ms,初调后按需缩小

C++ 与 Fortran 的选择会影响 ADAMS 与 MATLAB 之间的数据通道形式。C++ 生成的 adams_sub 编译文件在常见 Windows MATLAB 版本下更容易识别,Fortran 在部分编译器环境中会出现找不到动态库的报错。实验室里如果只有 Fortran 编译器,选 Fortran 也能跑,只是排查问题时参考资料更少。Communication Interval 与 2.3 节的表格对应,初次跑步态建议填 0.005,先确认曲线形态正常,再往 0.001 方向压缩。

提示:Communication Interval 的单位是秒,0.005 就是 5 ms。初次跑通前不要追求 0.001,先把整条链路验证完再缩小。

4.2 在 MATLAB 中执行 .m 文件,把 adams_sub 模块拖进 Simulink

导出完成后,工作目录下会出现 quad_plant.m、quad_plant.adm、quad_plant.cmd 以及若干编译文件。其中 quad_plant.m 是 MATLAB 脚本,作用是把 ADAMS 模型注册到当前工作区,并提供 adams_sub 模块的调用环境。打开 MATLAB,把当前目录切到导出文件夹,按顺序执行两行命令。

%% 启动四足机器人联合仿真的 MATLAB 端 cd('C:\sim\quad_export'); quad_plant; % 运行脚本,在工作区装载 ADAMS plant adams_sys; % 打开 ADAMS 官方给出的参考模型,里面有 adams_sub

quad_plant 脚本运行成功后,命令行会提示 ADAMS plant 已初始化。adams_sys 打开的是一个参考模型,里面已经带好了 adams_sub 模块,直接复制或拖动到自己的 Simulink 模型即可。如果执行 quad_plant 时提示找不到函数,先检查当前目录是否在 MATLAB 路径中,再确认 ADAMS 安装目录下的 controls 文件夹里 matlab 子目录已加入 MATLAB 路径。常见安装布局是 C:\MSC.Software\Adams\2020\controls\matlab,不同版本号略有差异,按实际安装位置添加。

%% 将 ADAMS controls 目录加入 MATLAB 搜索路径(按实际安装路径调整) addpath(genpath('C:\MSC.Software\Adams\2020\controls\matlab')); savepath;

这段命令把 ADAMS 控制接口永久保存到 MATLAB 路径中,下次打开 MATLAB 不用重复添加。addpath 之后要重新运行 quad_plant,否则刚添加的路径不会立即生效。部分 Windows 系统还需要把 ADAMS 安装目录中的 win64 文件夹加入系统 PATH 环境变量,否则启动仿真时 MATLAB 能找到 mex 文件,但仍无法定位 ADAMS 求解器。

4.3 adams_sub 的端口数量、通信步长与求解器设置核对表

把 adams_sub 拖入 Simulink 后,第一步不是连信号线,而是双击模块查看掩码参数里的端口数量和变量名列表。四足模型如果定义了 8 个输入状态变量和 16 个输出状态变量,adams_sub 上应当出现 8 个输入端口和 16 个输出端口。端口数量与状态变量列表不一致时,回到 ADAMS/Controls 导出界面重新勾选变量,不要在 Simulink 端强行改端口宽度,那解决不了根本问题。

通信间隔在 adams_sub 掩码中也需要再次确认。导出时填入的 0.005 会写进模型,但 Simulink 端仍然可以修改。Simulink 求解器建议设置为 fixed-step discrete,基础步长取 0.0005 或 0.001,仿真时长按步态周期设置,一般 2 到 2.5 秒足够观察两个完整步态周期。求解器步长与通信间隔的比例维持在第 2 章说的 1:5 到 1:10,采样错位对控制环路的相位影响就可以忽略。

检查项数值或要求说明
adams_sub 输入端口数与 plant input 数量一致8 个力矩输入
adams_sub 输出端口数与 plant output 数量一致16 个角度/角速度输出
Simulink 求解器fixed-step discrete与通信间隔配合
Simulink 基础步长0.0005–0.001 s取通信间隔的 1/5 到 1/10
Communication Interval0.002–0.005 s初期用 0.005,收敛后改小

这张表可以作为每次新建联合仿真模型的模板。比对照表更实用的校验方法是:先在 Simulink 里给所有 adams_sub 输入端口接一个常量阶跃信号,让所有力矩初始为零,仿真 0.5 秒,检查输出端口角度是否维持在初始姿势附近。这一步确认通信链路已经打通,再开始接控制器,可以把“模型没连对”和“控制律写错”两类问题完全分开。

5. Simulink 编写四足 trot 步态控制律,闭环接回 ADAMS 动力学模型

5.1 用 MATLAB Function 块生成 trot 步态四腿相移表

四足机器人通常先用 trot 步态验证,因为 trot 在低速下对静态稳定要求最低,对角腿同步让控制程序只需要区分两组相位。trot 的相位关系为:左前腿和右后腿同相位,右前腿和左后腿同相位,两组之间相差半个周期。

腿编号名称相位偏移同步对象
1左前 LF0腿 4
2右前 RF0.5腿 3
3右后 RH0.5腿 2
4左后 LH0腿 1

在 Simulink 中用 MATLAB Function 块实现步态生成器,函数输入是仿真时间和腿编号,输出是该腿在当前时刻的目标关节角。下面这个函数按 0.5 的摆动占比生成髋关节和膝关节轨迹。

function q_des = trot_trajectory(time, leg_id, gait_period, hip_amp, knee_amp) % trot 步态目标轨迹生成器 % time: 仿真时钟, leg_id: 1~4 % gait_period: 单步周期, hip_amp/knee_amp: 髋/膝摆动幅度(rad) if leg_id == 1 || leg_id == 4 phase = 0.0; else phase = 0.5; end t_local = mod(time + phase * gait_period, gait_period); swing_ratio = 0.5; q_des = zeros(2, 1); if t_local < swing_ratio * gait_period s = t_local / (swing_ratio * gait_period); % 0->1 摆动相 q_des(1) = hip_amp * sin(pi * s); % 髋关节前摆 q_des(2) = -knee_amp * sin(pi * s) - 0.2; % 膝关节抬起 else s = (t_local - swing_ratio * gait_period) / ((1 - swing_ratio) * gait_period); q_des(1) = -hip_amp * sin(pi * s); % 支撑相髋关节后蹬 q_des(2) = -0.2; % 膝关节支撑 end end

这段代码的核心逻辑是把一个步态周期切成摆动相和支撑相。摆动相中髋关节按正弦从零摆到正幅值再回到零,膝关节先抬起再放下;支撑相中髋关节反向摆动,模拟向后蹬地。mod 函数负责把时间折叠到周期内,phase 让两组腿错开半个周期。hip_amp 和 knee_amp 是弧度值,如果在 ADAMS 端没有做单位换算,先乘以 pi/180。q_des 是 2 行 1 列向量,顺序固定为髋、膝,与 adams_sub 输出端口的排列顺序保持一致。

5.2 位置 PID 加重力前馈的关节力矩控制器

有了目标轨迹,还需要一个能跟踪它的关节控制器。四足机器人的髋膝关节经过减速器后,位置环用 PD 再加静态重力前馈属于最稳妥的初始方案。重力前馈可以从 ADAMS 静态分析中获取,也可以先不加,单纯用 PD 控制试跑,观察静置状态下关节角度是否出现明显下垂,再补上补偿项。

function tau = leg_controller(q_d, q, dq_d, dq, g_est) % 关节位置 PD + 重力前馈 % q_d,dq_d: 2x1 目标角/角速度; q,dq: 2x1 实际角/角速度 % g_est: 2x1 重力补偿力矩 Kp = [140; 110]; Kd = [3.0; 2.2]; tau = Kp .* (q_d - q) + Kd .* (dq_d - dq) + g_est; end

代码中 Kp 和 Kd 是按 6 kg 级四足样机估出的一组初始值。含义是:髋关节位置误差 1 弧度需要 140 N·m 的回复力矩,膝关节为 110 N·m;Kd 给角速度误差 1 rad/s 提供约 3 N·m 的阻尼。向量乘法用 .* 是为了让两个关节使用各自独立的增益。四足模型自由度多,端到端整定增益容易顾此失彼,初调时建议先把髋和膝的 Kp 设成同一组值,再用表格逐项调整。

关节KpKd调整方向
髋 pitch1403.0出现高频振铃时同时降 Kp 和 Kd
膝 pitch1102.2支撑相下沉则提高 Kp,上限不宜超过 200

控制器输出的是 2 行 1 列关节力矩向量,后续要展开并接到 adams_sub 对应输入端。如果扭矩方向与 ADAMS 中的力矩正方向相反,整个闭环会变成正反馈,表现为轨迹越追越偏。遇到这种现象先别改控制器,回第 3 章检查状态变量里的 AZ 函数顺序。

5.3 配置固定步长求解器、通信区间与仿真时长,得到可复现的曲线

控制器搭好后,把 Simulink 求解器显式设为固定步长 discrete,仿真步长优先选 0.001 s,仿真结束时间设为 2 到 2.5 s。在模型配置参数里打开信号存储,方便在 Simulink 端直接观察关节角度曲线。adams_sub 掩码中的 Communication Interval 保持 0.005 s,使仿真步长与通信间隔的比值稳定在 1:5。

运行仿真后,优先检查三个信号:髋关节角度跟随是否有明显滞后、膝关节在摆动相是否出现抖动、四条腿的力矩曲线是否符合 trot 相序。adams_sub 端口较多,可以在 Simulink 里给信号线增加标注,减少排查时长。仿真结束后切到 ADAMS PostProcessor,查看机体横滚角、俯仰角和足端接触力。这几个量反映整机稳定性,不适合放在 Simulink 里重建。若横滚角在支撑相快速发散,多半是足端落地位置和期望轨迹不匹配,先去调 5.1 里的 hip_amp 和相位偏移,不要上来就加大 Kp。

注意:adams_sub 掩码中的 Communication Interval 可以单独修改,不需要重新运行 ADAMS/Controls 导出流程,但修改后要重新启动仿真才生效。

6. 联合仿真实战:初始化失败、轨迹对不齐和仿真太慢的排查技巧

6.1 “无法启动 adams_plant”和端口维度不一致的排查顺序

联合仿真最常见的报错集中在第一次运行时。“无法启动 adams_plant”通常不是 MATLAB 的问题,而是 ADAMS 的 controls 编译文件没被找到。依次检查系统 PATH 是否包含 ADAMS 安装目录下的 win64 文件夹、MATLAB 搜索路径是否加入 controls\matlab 子目录、当前 MATLAB 位数与平台参数 x64 是否一致。端口维度不一致则回到状态变量列表,用 adams_sub 掩码里的变量名和导出时的 plant input/output 列表逐项比对,先看数量后看顺序。顺序错了表现为角度曲线在腿间互相串线,这种错误在曲线图上很隐蔽,数值上却会越跑越偏。

6.2 用单腿摆动代替整机调试,先检查坐标系和力矩方向

不要一上来就让四条腿同时跑步态。把除左前腿以外的三组关节力矩全部置零,只在 Simulink 里给左前髋发振幅 10 度、周期 1 秒的正弦指令,运行 2 秒。左前腿会顺势摆动,观察角度输出是否存在 180 度反相;若反相,回到 ADAMS 修改 AZ 函数的 marker 顺序,不要只在 Simulink 里乘负号。单腿验证通过后,依次验证右后腿、右前腿、左后腿,确保四条腿各自独立。这条步骤看起来慢,实际省下的是整机发散后无法定位来源的时间。

6.3 仿真速度拉不回来的三个裁剪手段,以及一个减少噪声的变量接法

仿真速度不足一般有三个原因:足底接触采用 Solid 到 Solid 求解、输出变量列表过多、通信间隔过小。接触类型改成平面到实体的单面接触,求解效率会明显上升,穿透稍大,但在步态验证阶段可以接受。输出列表中不观察的关节变量全部取消,尤其不要导角加速度。通信间隔从 1 ms 放大到 5 ms 能换来近一个量级的提速,但要重新检查力矩曲线是否出现高频毛刺。如果这些都排查过仍然慢,再检查 adams_sub 的进程通信方式,共享内存通常比 TCP/IP 快,切换后要重新启动整个仿真才生效。

角速度信号尽量在 ADAMS 端用 WZ 函数直接输出,而不是在 Simulink 里对角度做差分。把角度差分的滤波节点去掉后,整条步态曲线的相位延迟会减少大约一个控制周期,后面再调 Kd 时不会被滤波拖后腿,也就不用再因为噪声大而反复压低关节增益。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 14:36:09

Inkscape下载安装全攻略:从官网认准到多平台部署与问题排查

1. 下载 Inkscape 前的准备&#xff1a;先搞清楚版本和官网先说结论&#xff1a;Inkscape 是一款完全免费开源的矢量图形编辑器&#xff0c;平时大家聊得比较多的 AI&#xff08;Adobe Illustrator&#xff09;是收费的&#xff0c;而 Inkscape 在矢量绘图这件事上基本能覆盖大…

作者头像 李华
网站建设 2026/9/19 14:36:06

光伏行业报告解析:LCOE与IRR驱动的技术选型与市场预测

简介&#xff1a;面向新能源从业者与研究者的2024年光伏行业专题研究报告&#xff0c;以PPT形式系统梳理行业核心信息。内容从研究背景与意义切入&#xff0c;依次分析全球及中国光伏装机规模与增长趋势&#xff0c;对比晶体硅、薄膜、聚光、多结太阳能电池等主流技术路线&…

作者头像 李华
网站建设 2026/9/19 14:30:41

Flutter 语音房 native 内存泄漏:从 heapprofd 到 JNI 全局引用的深度排查

那周的线上报警我到现在还记得&#xff1a;语音房 App 的 native 内存曲线在监控面板上像心率图一样一路往上爬&#xff0c;从 80MB 一路爬到 400MB&#xff0c;OOM 闪退率直接翻倍。用户反馈很一致——挂房超过一小时后开始卡顿&#xff0c;切后台再回来要等好几秒&#xff0c…

作者头像 李华
网站建设 2026/9/19 14:28:02

用Wireshark抓包实战,彻底搞懂OSI七层模型与网络排错

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 14:26:58

基于证据深度神经网络的医学影像三支决策方法

简介&#xff1a;《基于证据深度神经网络的医学影像三支决策》是一篇发表在《西北大学学报&#xff08;自然科学版&#xff09;》的学术论文&#xff0c;面向医学影像分析、深度学习和不确定性决策领域的研究者与工程师。针对医学影像中标注受限、噪声干扰和病灶表征不明确导致…

作者头像 李华