怎么让 OmniHand Pro 完成第一次抓取
社区讨论 · 政策

怎么让 OmniHand Pro 完成第一次抓取

格物格物2 天前2026/10/01 104 浏览

灵巧手控制我之前没碰过,花了一个晚上把 OmniHand Pro 的控制链路从头走了一遍。目标很小,让手张开、合上,抓一个纸杯,并且能在程序里看到它到底使了多大劲。

先说清楚这东西的定位。它是临界点做的进阶版灵巧手,官方口径是负载和感知都比基础款强,面向工业柔性作业和通用机器人集成。说白了,这手是要装到机械臂上真干活的,不是摆在桌上看的。

上手之前要理解一件事。灵巧手和普通夹爪最大的区别是,它不是一个开合两态的东西,每根手指都能单独控制角度和力度。所以你的程序要处理的是十几个通道的输入输出,而不是一个开关。

准备阶段有三件事。把供电和通信线接好,接口形式按你手上那台的版本来,我这边是先接到控制盒再连主机。装 Python 环境,版本别太新也别太旧,我用的 3.10。从官方 SDK 仓库把代码拉下来,git clone 之后先别急着跑,看一眼依赖文件,把包装齐。

这里有个坑我提前说。SDK 仓库的介绍里写这只手是 12 自由度,但产品页上另一款写的是 19 自由度,两个数对不上,其实是不同配置的版本。你得先确认自己手上是哪个配置,因为初始化的时候通道数要对上,对不上直接报错。我第一次就是照着产品页的参数填的,卡了二十分钟。

上手从最小动作开始。先跑设备枚举,确认程序能看见手,这一步没成功后面都别谈,看到设备 ID 出来,说明通信链路通了。然后读一次触觉,什么都不碰,这是空载基线,后面所有判断都拿它当参照。SDK 里触觉是一维力,指尖、手掌、手背都有布点,分辨率 0.1N,量程 0 到 20N,空载时读数不一定是零,可能在零点几晃,正常。接着写几行代码让手指全张开,再全合上,这一步不管力度,只看动作对不对。最后换成位置控制,让食指和中指缓慢闭合到夹住纸杯,同时把触觉读数打出来。

到这一步,你会看到一个数字开始往上爬。纸杯这种轻东西,接触力给到很小就够,我这边测下来大概一牛上下,具体看你的杯子。

SDK 仓库里对这只手的描述是「12 自由度专业灵巧手,具备精确操作和灵活控制能力,配备触觉传感器和多种控制模式」。

踩坑有两个。第一个是力控和位控搞混。位置控制的意思是「你转到这个角度就停」,它不管你中间撞到了什么。你要是直接让手指从全张到全闭,中间夹着东西,它会照着角度硬走,把杯子压扁。正确做法是位置控制配合触觉读数做闭环,读到接触力到了阈值就停。这一步是所有灵巧手教程里最容易跳过、也最容易出事的地方。

第二个是量程理解错。单指最大输出 20N,传感器量程也是 0 到 20N,看着挺配。但抓纸杯只需要很小的力,你要是习惯性给一个大的目标力,读数会直接顶到量程上限,你就分不出「轻轻碰到」和「已经压死了」。

这里放个表,我自己理了一遍三种模式的分工:

模式 你给它什么 它返回什么 什么时候用
位置控制 目标角度 当前角度 空动作、标定、接近物体
扭矩控制 目标力矩 当前力矩 抓取、贴合、柔性接触
触觉读取 不用给 各点位受力 判断接触、做闭环

实际跑的时候这三样是混着用的。接近物体用位置控制,快碰到的时候切扭矩控制,触觉读数负责告诉你什么时候该停。

整条链路跑通大概花了两个小时,其中一小时在解决自由度口径不一致的问题。跑通之后回头看,难点不在代码,在于你得先想清楚手现在处在哪个阶段、该用哪种控制模式。想清楚了,代码就是十几行的事。这个顺序和我前几天写第一视角数据那篇里说的是一个道理,先把链路跑通,再谈效果。

下一步我建议先别上机械臂,就在桌上把手固定住,换不同软硬的东西抓一遍,鸡蛋、海绵、塑料瓶,把每种物体的接触力阈值记下来,做一张小表。这张表比任何参数文档都有用,因为它是你自己这台手的数据。

等你有了这张表,再考虑接视觉。让相机告诉你物体在哪,手自己决定用多大力。到那时候问题就从「怎么让它动」变成「怎么让它知道该用多大力」,难度是另一个量级了。

触觉量程固定在 0 到 20N,抓豆腐这种一碰就碎的东西,是得换个更小量程的传感配置,还是靠控制侧的柔顺策略绕过去,我还没试过,先记着。

2 条回复

?
Ctrl + Enter 快速回复
沈老师
沈老师2 天前

我上课带学生第一次合手指也压扁过纸杯,位控配触觉阈值这坑太真实了。

飞控少年
飞控少年1 天前
回复 沈老师

位控硬走确实压杯,我后来都先读空载基线,力到1N就切扭矩,你们那课也这么教?