3. 阻抗参数对接触力的影响
任务目标
建立单自由度质量-弹簧-阻尼环境接触仿真,在给定期望位置阶跃输入下,分别改变阻抗刚度 \(K\) 与阻尼 \(B\),观察接触力 \(F_e\) 的峰值、稳态值与过渡过程,总结参数调节规律。
环境与依赖
仅需 Python 3.8+ 与 NumPy,无需其他第三方库。仿真采用前向欧拉法,步长 \(dt=0.001\,\text{s}\),总时长 \(2.0\,\text{s}\)。
核心实现
import numpy as np
def simulate(K, B, M=1.0, dt=0.001, T=2.0, xd=0.02, Ke=5000.0):
"""
单自由度阻抗控制环境接触仿真
返回: t数组, 接触力数组
"""
n = int(T / dt)
t = np.linspace(0, T, n)
x = 0.0 # 实际位置
v = 0.0 # 实际速度
Fe = 0.0 # 接触力
Fe_list = np.zeros(n)
for i in range(n):
# 环境接触模型: 刚性平面位于 x=0, 穿透则产生接触力
if x > 0:
Fe = Ke * x
else:
Fe = 0.0
# 阻抗控制律: 期望力 = K*(xd-x) - B*v
F_des = K * (xd - x) - B * v
# 实际施加力 = 期望力 - 接触力(环境反作用)
F_act = F_des - Fe
# 动力学: M*a = F_act
a = F_act / M
# 前向欧拉积分
v += a * dt
x += v * dt
# 防止穿透过深(数值保护)
if x < 0:
x = 0.0
v = 0.0
Fe_list[i] = Fe
return t, Fe_list
# ========== 参数扫描 ==========
# 基准参数
K_base = 500.0 # N/m
B_base = 50.0 # N·s/m
# 1) 改变刚度 (阻尼固定为 B_base)
K_values = [200, 500, 1000]
print("=== 刚度变化 (B=50) ===")
for K in K_values:
t, Fe = simulate(K, B_base)
peak = np.max(Fe)
steady = Fe[-1]
print(f"K={K:5.1f} | 峰值力={peak:7.2f} N | 稳态力={steady:7.2f} N")
# 2) 改变阻尼 (刚度固定为 K_base)
B_values = [10, 50, 200]
print("\n=== 阻尼变化 (K=500) ===")
for B in B_values:
t, Fe = simulate(K_base, B)
peak = np.max(Fe)
steady = Fe[-1]
# 计算超调量(若存在)
overshoot = (peak - steady) / steady * 100 if steady > 0 else 0
print(f"B={B:5.1f} | 峰值力={peak:7.2f} N | 稳态力={steady:7.2f} N | 超调={overshoot:5.1f}%")
运行方式
python impedance_contact.py
验证方法与判定标准
运行上述脚本,观察控制台输出。判定仿真正确的标准:
- 所有工况下稳态力均收敛至约 \(K \times x_d = K \times 0.02\)(例如 \(K=500\) 时稳态力约 \(10\,\text{N}\)),验证接触力稳态建模正确;
- 刚度增大时,峰值力与稳态力同步增大,且响应更快到达稳态;
- 阻尼增大时,峰值力降低、超调量减小,但到达稳态时间变长;
- 阻尼过小(如 \(B=10\))时出现明显超调与振荡,阻尼较大(如 \(B=200\))时过渡平缓无超调。
若输出符合上述规律,则说明阻抗参数对接触力影响的仿真实现正确。
参数调节规律总结
- 刚度 \(K\):决定接触力的稳态幅值(\(F_{ss}=K \cdot e_{ss}\)),\(K\) 越大稳态接触力越大,系统响应越快,但过大的 \(K\) 会导致接触力冲击增强;
- 阻尼 \(B\):主要影响过渡过程,\(B\) 增大可抑制接触力峰值与振荡,但会减慢响应速度;\(B\) 过小则产生明显超调甚至持续振荡。
预期输出示例(仅展示格式,实际数值以运行结果为准):
=== 刚度变化 (B=50) ===
K=200.0 | 峰值力= 4.50 N | 稳态力= 4.00 N
K=500.0 | 峰值力= 11.20 N | 稳态力= 10.00 N
K=1000.0 | 峰值力= 22.80 N | 稳态力= 20.00 N