MIT模式通过自感知外力引起的微小位移,在不依赖外部力传感器的情况下实现了关节级柔顺,可以通过动态改变虚拟弹簧的刚度 Kp,完美融合了位置和力矩控制,实现了二者间丝滑、无级的连续过渡。
MIT 模式之所以能实现不需要末端力传感器就能关节柔顺,以及能从纯位置控制平滑过渡到纯力矩控制,根本原因在于它重新定义了电机听话的方式。

普通位置模式(CSP)下的电机像一个“死心眼”的士兵,命令它到某个位置,它会不惜一切代价(输出最大力矩)到达那里。如果路上有障碍,它会直接撞上去。要让它柔顺,就必须(上位机+末端力传感器)告诉它:前面有障碍,后退一点。
而 MIT 模式相当于给这个士兵装上了自己的“触觉”和“判断力”。
它的核心控制律是:

这里的 qdes不再是必须精确到达的死命令,而是一个期望位置。
关键洞察:MIT 模式不是通过感知力 → 改变位置的主动闭环来柔顺,而是通过设定一个虚拟的物理弹簧(刚度 Kp),让关节本身就表现得像一个弹簧。外部施加的力(τext)和产生的位移(qdes−q)严格遵循胡克定律。力传感器的作用被这个虚拟弹簧的物理特性所取代。
举例:

MIT 模式的优美之处在于,它把位置控制和力矩控制统一在了一个公式里。通过调整 K_p(刚度)和 K_d(阻尼)这两个参数,就可以连续地改变关节的物理特性,而不是切换控制模式。
这种过渡不是“if-else”的开关切换,而是在同一个控制周期内,动态地修改 K_p 和 K_d 的目标值,并通过斜坡或滤波器让它们平滑变化。
工程实现流程:
q_des:期望位置dq_des:期望速度(可选)K_p:位置刚度(比例增益)K_d:速度阻尼(微分增益)tau_ff:前馈力矩// 驱动器每个电流环周期 (如50us) 执行
pos_error = q_des - q_actual;
vel_error = dq_des - dq_actual;
// MIT 控制律计算目标力矩
tau_cmd = Kp * pos_error + Kd * vel_error + tau_ff;
// 电流环执行
current_loop(tau_cmd);3. 上位机平滑过渡逻辑
# 定义过渡时间
transition_time = 0.5 # 秒
# 假设从柔顺模式 (Kp=50) 过渡到力矩模式 (Kp=0)
start_kp = 50
target_kp = 0
start_time = current_time
while current_time - start_time < transition_time:
# 线性插值
kp_cmd = interpolate(start_kp, target_kp, elapsed_time)
# 根据 kp 重新计算最优 kd,保证临界阻尼
kd_cmd = 2 * sqrt(kp_cmd * joint_inertia)
# 发送更新后的阻抗参数和 tau_ff
send_mit_command(q_des, dq_des, kp_cmd, kd_cmd, tau_ff)
sleep(0.001)特性 | CSP + 导纳控制 | MIT 模式 |
|---|---|---|
柔顺性来源 | 外环力反馈,主动生成避让轨迹 | 内环虚拟弹簧,被动响应外力 |
力感知 | 必须使用末端或关节力传感器 | 不需要力传感器(零力拖动除外) |
过渡方式 | 切换控制模式(位置↔力控) | 同一公式内平滑改变参数 Kp,Kd |
控制维度 | 笛卡尔空间,可解耦多维力/力矩 | 关节空间,每个关节独立 |
适合场景 | 末端需要精确多维力控(如马桶贴合) | 全身需要固有柔顺性(如足式机器人、拖动示教) |
