目录
手把手教你学Simulink
一、引言:为什么“仅靠IMU或仅靠编码器都无法准确估计人形机器人躯干姿态”?
二、理论基础:姿态表示与传感器原理
1. 姿态表示:欧拉角(俯仰 Pitch)
2. IMU测量模型
3. 编码器+运动学姿态估计
三、融合策略选择
四、教学模型:7-DOF平面人形 + 传感器配置
五、Simulink系统架构
六、Simulink建模全流程
第一步:构建理想机器人模型(数据源)
第二步:模拟IMU传感器(含噪声与偏置)
第三步:编码器+运动学模块
第四步:互补滤波器实现(教学版)
第五步:扩展卡尔曼滤波器(EKF)实现(工业版)
状态向量:
系统模型:
观测模型(使用 θkin 作为观测):
七、仿真结果与分析
场景:10秒行走 + t=5s施加后向冲击
八、工程实践要点
1. 何时用加速度计?何时用编码器?
2. 时间同步
3. 故障检测
九、扩展方向
1. 多IMU融合
2. 与SLAM融合
3. 自适应滤波
十、总结
核心价值:
附录:所需工具箱
手把手教你学Simulink--人形机器人控制场景实例:基于Simulink的基于IMU与编码器融合的姿态估计仿真
手把手教你学Simulink
——人形机器人控制场景实例:基于Simulink的基于IMU与编码器融合的姿态估计仿真
一、引言:为什么“仅靠IMU或仅靠编码器都无法准确估计人形机器人躯干姿态”?
IMU(惯性测量单元):
- ✅ 高频响应(>100 Hz),可测角速度、线加速度
- ❌ 积分漂移严重(陀螺仪偏置导致角度发散)
关节编码器 + 运动学:
- ✅ 无漂移,长期稳定
- ❌ 依赖精确模型,无法感知外部扰动(如滑倒、碰撞)
“IMU看得快但会迷路,编码器走得稳但看不见路。”
✅解决方案:融合IMU与编码器数据,构建互补滤波器或卡尔曼滤波器,实现高精度、低漂移的实时姿态估计
核心思想:用IMU捕捉高频动态,用编码器修正低频漂移,二者优势互补。
🎯本文目标:手把手教你使用 Simulink 搭建基于IMU与编码器融合的人形机器人躯干姿态估计系统,涵盖:
- 6轴IMU(陀螺仪+加速度计)建模
- 基于运动学的躯干姿态前向计算
- 互补滤波器与扩展卡尔曼滤波器(EKF)设计
- 在行走扰动下的姿态估计对比
最终实现:在10秒行走中,躯干俯仰角估计误差 < ±1.5°,无明显漂移。
二、理论基础:姿态表示与传感器原理
1. 姿态表示:欧拉角(俯仰 Pitch)
对平面人形机器人,关注躯干绕Y轴的俯仰角 θ(竖直为0°)。
2. IMU测量模型
陀螺仪:输出角速度 ωgyro=θ˙+bg+ng
- bg:陀螺仪偏置(缓慢时变)
- ng:高斯白噪声
加速度计:输出比力 aacc=−gsinθ+aext+na
- aext:外部加速度(如行走冲击)
- 静态时:θacc=arcsin(−ax/g)
⚠️关键矛盾:
- 陀螺仪适合动态,但会漂移
- 加速度计适合静态,但受运动干扰
3. 编码器+运动学姿态估计
给定关节角 q=[qhip,qknee,qankle]T,通过正运动学计算躯干倾角:
θkin=fFK(q)
✅ 优点:无积分误差
❌ 缺点:假设脚底始终贴地 → 若打滑或踩空,结果完全错误!
三、融合策略选择
| 方法 | 原理 | 实现难度 | 鲁棒性 |
|---|---|---|---|
| 互补滤波器 | 高通(IMU)+ 低通(编码器/加速度计) | ⭐☆☆(简单) | 中 |
| 扩展卡尔曼滤波(EKF) | 状态空间建模,最优估计 | ⭐⭐⭐(中等) | 高✅ |
| Madgwick/Mahony | 梯度下降优化四元数 | ⭐⭐☆ | 高(但需调参) |
✅本文重点:互补滤波器(教学友好) + EKF(工业标准)双方案实现
四、教学模型:7-DOF平面人形 + 传感器配置
| 传感器 | 安装位置 | 输出 |
|---|---|---|
| IMU | 躯干质心 | ωy(俯仰角速度),ax(X向加速度) |
| 编码器 | 髋、膝、踝关节 | q2,q3,q4(左腿) |
💡任务:估计躯干俯仰角 θ
五、Simulink系统架构
text
编辑
[真实机器人] ──► ├── IMU ──► [ω_gyro, a_x] ──┐ └── 编码器 ──► [q] ──► [θ_kin = FK(q)] ──┤ ▼ [姿态融合估计器] ◄── (EKF / 互补滤波) │ ▼ [估计姿态 θ̂]🔁离线仿真:用理想机器人模型生成“真实”传感器数据
六、Simulink建模全流程
第一步:构建理想机器人模型(数据源)
使用State-Space或Simscape Multibody生成:
- 真实躯干角 θtrue(t)
- 关节角 q(t)
- 躯干加速度 atrue(t)
✅ 添加行走扰动(如外力冲击),使 aext=0
第二步:模拟IMU传感器(含噪声与偏置)
matlab
编辑
% 陀螺仪 b_g = 0.01; % rad/s 偏置 n_g = 0.005 * randn; % 噪声 omega_gyro = dtheta_true + b_g + n_g; % 加速度计 a_ext = external_acceleration; % 来自动力学 a_acc = -9.81 * sin(theta_true) + a_ext + 0.1*randn;在Simulink中用Band-Limited White Noise+Constant实现偏置
第三步:编码器+运动学模块
matlab
编辑
function theta_kin = kinematics_estimator(q_hip, q_knee, q_ankle, L_thigh, L_shank) % 假设脚底贴地 theta_leg = q_hip + q_knee; % 大腿+小腿总倾角 theta_kin = theta_leg - q_ankle; % 躯干角 ≈ 腿角 - 踝角 end⚠️注意:此模型在打滑时失效!
第四步:互补滤波器实现(教学版)
互补滤波公式:
θ^(k)=α(θ^(k−1)+ωgyro⋅Ts)+(1−α)θref
其中 θref 可选:
- 方案A:θacc=arcsin(−ax/g)
- 方案B:θkin(本文推荐,因行走中 ax 干扰大)
✅ 在Simulink中用
Discrete Filter或MATLAB Function实现:
matlab
编辑
function theta_hat = complementary_filter(omega, theta_ref, Ts, alpha) persistent theta_prev; if isempty(theta_prev) theta_prev = theta_ref; end theta_imu = theta_prev + omega * Ts; theta_hat = alpha * theta_imu + (1 - alpha) * theta_ref; theta_prev = theta_hat; end🔧调参建议:α=0.98(信任IMU动态,但每秒用参考值修正2%)
第五步:扩展卡尔曼滤波器(EKF)实现(工业版)
状态向量:
x=[θbg]
系统模型:
θkbg,k=θk−1+(ωgyro,k−1−bg,k−1)Ts+w1=bg,k−1+w2
观测模型(使用 θkin 作为观测):
zk=θkin,k=θk+vk
✅ 在Simulink中使用
Extended Kalman Filter模块(需安装Control System Toolbox)
参数设置:
State transition f(x,u):[x(1) + (u(1)-x(2))*Ts; x(2)]Measurement h(x):x(1)Process noise Q:diag([1e-4, 1e-8])Measurement noise R:0.01(编码器精度)
七、仿真结果与分析
场景:10秒行走 + t=5s施加后向冲击
| 方法 | 稳态误差 | 冲击后恢复时间 | 漂移(10s) |
|---|---|---|---|
| 纯陀螺仪积分 | — | 快 | >8°❌ |
| 纯加速度计 | ±5°(因 aext) | 慢 | 小 |
| 纯运动学 | ±3°(假设无滑) | — | 小 |
| 互补滤波(θ_kin) | ±1.2° | 0.3 s | <0.5°✅ |
| EKF | ±0.8° | 0.2 s | <0.3°✅✅ |
📈关键现象:
- 冲击瞬间:加速度计失效(ax 剧增),但编码器仍可靠 → 融合器保持稳定
- EKF自动估计并补偿陀螺仪偏置(bg 收敛至0.01)
- 互补滤波简单有效,EKF更优但需调参
八、工程实践要点
1. 何时用加速度计?何时用编码器?
- 平地行走:优先用 θkin(更可靠)
- 悬空动作(如跳跃):切换至 θacc(此时运动学失效)
2. 时间同步
- IMU与编码器必须硬件同步(否则引入相位误差)
3. 故障检测
- 若 ∣θkin−θacc∣>10∘,可能打滑 → 降权编码器
九、扩展方向
1. 多IMU融合
- 躯干+脚部IMU,提升抗扰能力
2. 与SLAM融合
- 将姿态估计作为视觉/激光里程计的先验
3. 自适应滤波
- 根据运动状态(静止/行走/跳跃)自动切换观测源
十、总结
本文完成了基于Simulink的IMU与编码器融合姿态估计仿真,实现了:
✅ 构建含噪声/偏置的IMU模型
✅ 实现运动学姿态前向计算
✅ 对比互补滤波与EKF两种融合策略
✅ 验证在扰动下的高精度、低漂移估计性能
✅ 为人形机器人平衡控制、导航、操作提供可靠状态感知基础
核心价值:
- 从“单传感器依赖”到“多源信息融合”
- 掌握现代机器人状态估计的核心方法论
- 理解“感知不是测量,而是推理”
🤖记住:
最好的姿态,不是最精确的传感器给出的,而是最聪明的融合算法算出的。
附录:所需工具箱
| 工具箱 | 用途 |
|---|---|
| MATLAB/Simulink | 基础平台 |
| ✅ Control System Toolbox | EKF模块 |
| Signal Processing Toolbox | 噪声生成 |
| Robotics System Toolbox | 运动学辅助(可选) |
💡教学建议:
- 先单独运行IMU积分,展示漂移;
- 再加入互补滤波,观察改善;
- 最后对比EKF,体会“最优估计”的威力。