1. 课程导入

在机器人从“位置控制”走向“与环境交互”的过程中,接触是不可避免的物理事件。无论是装配、打磨、抓取、擦拭,还是人机协作中的物理交互,机器人末端执行器一旦与工件或环境发生接触,系统就从自由运动进入约束运动。此时,仅靠关节位置和速度信息已不足以描述真实状态,必须引入接触状态识别与力/位混合控制。本课程围绕“感知—识别—决策—控制”这条主线,帮助学习者建立从接触检测到柔顺控制的完整知识体系。

一、学习目标

完成本课程后,学习者应能够:

  • 理解接触状态的定义、分类及其在机器人操作中的物理意义;
  • 掌握基于力/力矩传感器、关节电流、视觉和触觉的接触检测方法;
  • 能够区分自由运动、刚接触、稳定接触、滑动接触和碰撞等状态;
  • 掌握阻抗控制、导纳控制、力/位混合控制的基本原理与适用条件;
  • 能够针对典型装配、打磨、抓取任务设计接触状态识别与控制方案;
  • 具备对接触控制实验进行调试、排障和复盘的基本能力。

二、核心概念

接触状态识别与控制涉及几个关键概念。第一是接触力,即机器人与环境之间通过接触点传递的力和力矩,通常由六维力/力矩传感器测量。第二是接触状态,它描述接触是否发生、接触点位置、接触法向、是否滑动以及接触刚度等属性。第三是柔顺性,指机器人对外力表现出顺应能力,分为被动柔顺和主动柔顺。第四是力/位混合控制,即在某些方向控制力、在另一些方向控制位置,以适应环境约束。第五是接触刚度与阻尼,它们决定了接触过程的稳定性和响应速度。

接触状态识别的本质,是从可观测信号中推断不可直接测量的接触属性;控制的目标,则是根据识别结果调整机器人行为,使接触过程稳定、安全且高效。

三、整体知识框架

本课程的知识框架可以概括为“三层一闭环”。底层是感知层,包括力/力矩传感、关节电流估计、触觉阵列和视觉伺服;中间层是识别层,包括信号滤波、特征提取、状态分类和接触参数估计;上层是控制层,包括阻抗控制、导纳控制、力/位混合控制和自适应控制。三层之间通过反馈闭环连接:感知为识别提供数据,识别为控制提供状态,控制又改变接触状态,形成持续循环。

机器人接触状态识别与控制 · 知识框架 感知层 六维力/力矩传感器 · 关节电流估计 · 触觉阵列 · 视觉伺服 · 编码器 输出:力信号、力矩信号、位置、速度、触觉图像 识别层 信号滤波 · 特征提取 · 接触检测 · 状态分类 · 接触参数估计 输出:自由/接触/滑动/碰撞状态、接触法向、刚度估计 控制层 阻抗控制 · 导纳控制 · 力/位混合控制 · 自适应控制 · 安全策略 输出:关节力矩/位置指令、期望接触力、柔顺参数 反馈闭环 典型应用 装配 · 打磨 · 抓取 · 擦拭 关键挑战 噪声 · 延迟 · 未知刚度 · 碰撞 评价指标 识别准确率 · 力跟踪误差 · 稳定性

四、典型应用场景

接触状态识别与控制的应用非常广泛。在精密装配中,机器人需要识别轴孔接触状态,并通过力/位混合控制完成柔顺插入,避免卡阻和划伤。在表面打磨中,机器人需要保持恒定法向力,同时根据接触状态调整切向速度,以保证加工质量。在抓取与操作中,接触状态识别用于判断是否滑移,从而动态调整夹持力。在人机协作中,接触检测用于实现安全停止和柔顺避让。在医疗康复机器人中,接触力控制直接关系到患者安全与舒适度。

五、方法流程与关键参数

一个典型的接触状态识别与控制流程包括:数据采集、信号预处理、特征提取、状态分类、控制决策和执行。下表列出了各环节的常用方法与关键参数。

环节 常用方法 关键参数 注意事项
数据采集 力/力矩传感器、关节电流、触觉阵列 采样率、量程、分辨率 采样率需高于接触动态带宽
信号预处理 低通滤波、卡尔曼滤波、去偏置 截止频率、噪声方差 避免滤波引入过大相位延迟
特征提取 时域统计、频域分析、小波变换 窗口长度、特征维度 窗口需兼顾实时性与稳定性
状态分类 阈值法、SVM、神经网络、隐马尔可夫 分类阈值、模型复杂度 需覆盖自由、接触、滑动、碰撞
控制决策 阻抗控制、导纳控制、力/位混合控制 刚度、阻尼、期望力 参数需根据接触刚度自适应调整

六、常见误区与复盘

误区一:只依赖位置控制。在接触任务中,纯位置控制会导致力失控,轻则划伤工件,重则损坏机器人。必须引入力反馈或柔顺控制。

误区二:忽视传感器延迟。力传感器和通信链路存在延迟,若直接用于高带宽控制,容易引起振荡。应进行延迟补偿或降低控制带宽。

误区三:接触状态分类过于简单。仅用阈值判断“有接触/无接触”无法区分滑动和碰撞,容易造成误判。应结合多特征和时序信息。

误区四:控制参数一成不变。不同工件刚度差异很大,固定阻抗参数难以适应。应在线估计接触刚度并调整参数。

学习建议:先建立“接触即约束”的物理直觉,再掌握从信号到状态的识别方法,最后理解控制参数如何影响接触行为。每学一个方法,都要问三个问题:它解决什么问题?需要什么信号?在什么条件下会失效?

七、示例:接触状态识别伪代码

# 接触状态识别与控制主循环(伪代码)
while robot_running:
    f = read_force_torque()          # 读取六维力/力矩
    q, dq = read_joint_state()       # 读取关节位置与速度
    f_filt = lowpass(f, cutoff=20Hz) # 低通滤波

    if norm(f_filt) < F_threshold:
        state = "FREE"               # 自由运动
    elif is_sliding(f_filt, dq):
        state = "SLIDING"            # 滑动接触
    elif norm(f_filt) > F_collision:
        state = "COLLISION"          # 碰撞
    else:
        state = "CONTACT"            # 稳定接触

    if state == "CONTACT":
        K_est = estimate_stiffness(f_filt, q)
        set_impedance(K_est, D_ratio=0.7)
        tau_cmd = impedance_control(f_desired, f_filt, q, dq)
    elif state == "COLLISION":
        tau_cmd = safe_stop()
    else:
        tau_cmd = position_control(q_desired)

    send_joint_torque(tau_cmd)