
上篇讲了编码器在测速、测距和闭环控制中的应用从脉冲信号到物理量的转换、速度估计方法、PID反馈控制、编码器-IMU融合。今天从运动传感器转到力觉传感器——力/力矩传感器是机器人触觉的核心让机器人从能动变成能感知接触。面试时候被问力传感器怎么用在机器人上很多人会说测力的大小。但面试官想听的是更工程化的内容力传感器有哪些类型应变片原理是什么六维力传感器怎么解耦力控有哪些策略在ROS2中怎么处理力传感器数据力传感器的类型和应用场景机器人领域常用的力传感器有几种每种适用于不同的场景。应变片式力传感器最经典、最常用。原理是金属或半导体材料在受力时会发生形变形变导致电阻变化通过惠斯通电桥把电阻变化转换成电压信号。这种传感器精度高、线性度好、技术成熟工业机械臂的关节力矩传感器基本都是应变片式的。缺点是应变片会蠕变长时间受力后零点漂移温度变化也会影响测量精度。压电式力传感器利用压电材料石英、压电陶瓷在受力时产生电荷的效应。特点是动态响应极好固有频率高适合测量快速变化的力。但压电传感器不能测静态力——电荷会慢慢泄漏所以只适合动态力测量。常用在冲击测试、振动分析等场景。电容式力传感器通过测量电容变化来感知力。灵敏度高可以做得很小适合微型力传感器。但电容式传感器对寄生电容敏感信号调理电路比较复杂工业环境中电磁干扰会影响测量。光学式力传感器用光纤布拉格光栅FBG或者视觉方式测量形变。优点是抗电磁干扰可以在强电磁场环境下工作。缺点是成本高、温度交叉敏感、解调设备贵。目前主要在科研领域使用工业应用还不多。import numpy as np class StrainGageForceSensor: 应变片式力传感器模型 def __init__(self, rated_capacity, sensitivity_mv_per_v, bridge_voltage5.0, adc_resolution24): self.rated_capacity rated_capacity # 额定力N self.sensitivity sensitivity_mv_per_v # 灵敏度mV/V self.bridge_voltage bridge_voltage # 电桥电压V self.adc_resolution adc_resolution # ADC位数 # 满量程输出电压mV self.full_scale_output sensitivity_mv_per_v * bridge_voltage # 每个ADC计数对应的力N self.force_per_count rated_capacity / (2**adc_resolution) def read_force(self, adc_raw, tare_offset0): 读取力值 adc_raw: ADC原始读数 tare_offset: 去皮偏移量 force (adc_raw - tare_offset) * self.force_per_count return force def apply_calibration(self, raw_force, calibration_matrix): 应用校准矩阵线性补偿 return calibration_matrix * raw_force六维力传感器的解耦六维力传感器也叫六轴力传感器能同时测量三个方向的力Fx, Fy, Fz和三个方向的力矩Mx, My, Mz。它是力控抓取、柔顺装配、人机协作等场景的核心传感器。六维力传感器的难点在于维间耦合——施加Z方向的力时X方向的应变片也会感受到信号。解耦就是用校准矩阵把各维度的原始读数转换成真实的力和力矩值。标定流程通常是固定传感器依次在每个维度施加已知大小的力或力矩记录所有六个通道的输出。这样可以得到一个6x6的耦合矩阵。实际使用时把原始读数向量乘以耦合矩阵的逆矩阵就得到解耦后的六维力。class SixAxisForceSensor: 六维力传感器解耦 def __init__(self, coupling_matrix): coupling_matrix: 6x6耦合矩阵标定得到 self.coupling_matrix np.array(coupling_matrix) self.decouple_matrix np.linalg.inv(self.coupling_matrix) self.tare np.zeros(6) # 去皮值 def set_tare(self, readings): 去皮记录当前读数作为零点 self.tare np.array(readings) def read_force_torque(self, raw_readings): 读取解耦后的六维力/力矩 raw np.array(raw_readings) - self.tare ft self.decouple_matrix raw return ft # [Fx, Fy, Fz, Mx, My, Mz]标定时的关键细节加载点要精确已知加载方向要尽量对准传感器坐标系否则引入额外误差每个维度至少标定5个力值点来验证线性度。好的六维力传感器线性度误差在0.1%FS以内维间耦合误差在1%FS以内。安装六维力传感器时要注意几点。传感器通常安装在末端执行器和最后一个关节之间这样能测量到末端受到的所有外力和力矩。安装面的平面度要好螺丝拧紧力矩要按厂家要求来否则预紧力不均匀会影响测量精度。每次安装后都要重新做去皮操作消除安装应力带来的零偏。面试中怎么聊面试官问力/力矩传感器按这个顺序回答先说力传感器的类型应变片、压电、电容、光学和各自适用场景再说六维力传感器的解耦原理和标定流程然后说力控策略阻抗、导纳、直接力控最后说在ROS2中的集成方式。如果面试官追问阻抗控制和导纳控制有什么区别你可以说阻抗控制是位置→力的关系直接控制力矩输出需要力矩控制的底层接口。导纳控制是力→位置的关系输出位置修正量叠加到位置指令上普通位置控制机器人就能实现。导纳控制更通用、更容易实现但动态性能不如阻抗控制。对于需要快速力响应的场景比如高速打磨用阻抗控制。对于需要柔顺交互的场景比如人机协作导纳控制就够了。如果面试官追问力传感器的采样频率应该设多少你可以说力控环的频率一般要高于位置控制环。因为力的变化比位置快——接触瞬间力的建立时间可能只有几毫秒。通常力控环1000Hz位置环100-500Hz。如果力传感器采样频率不够比如只有100Hz可以用插值或者预测的方式提高力控环的输入频率但效果不如直接提高传感器采样率。分享一个我在项目中调试六维力传感器的经历。当时给一台协作机械臂装了一个ATI的六维力传感器做力控打磨。一开始传感器读数在静止状态下就有很大的漂移特别是FzZ方向力每隔几分钟就漂移几牛顿。排查后发现两个问题第一传感器和机械臂末端之间的安装法兰有轻微变形导致预紧力不均匀每次机械臂运动时法兰的微小形变会耦合到力读数中。我们换了一个更厚的法兰并严格按照厂家要求的力矩拧紧螺丝问题改善了一半。第二传感器对温度敏感打磨过程中电机发热导致末端温度升高传感器的零偏随温度变化。我们开启了传感器的温度补偿功能同时每隔10分钟做一次自动去皮在已知无外力的姿态下重新校准零偏漂移问题基本解决了。这个经历告诉我力传感器的精度不只是传感器本身的事安装质量、温度管理、标定流程都会影响最终效果。下一篇讲GPS/RTK定位原理——室外机器人的定位方案。从室内传感器转到室外定位这是移动机器人走出仓库的关键。如果这篇文章对你有帮助欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。「机器人软件开发面试·从入门到精通」连载系列上一篇第160篇 编码器应用——测速、测距和闭环控制中的使用下一篇预告第162篇 GPS/RTK定位原理——室外机器人的定位方案有任何问题欢迎评论区留言我会尽量回复。