一只桌面机械臂伸向一块木块,长长的影子投在工作台上。

N° 06机器人

在仿真里教会它,在机械臂上运行。

机械臂是带通道的设备。试验先在模拟器中运行,每次运行都有记录,任何一次运行中的任何时刻,都可以成为下一次运行的起点。

图版 15 · 一只桌面机械臂伸到一半,长长的影子投在工作台上

机械臂

一个通道模型,多种机械臂。

舵机总线就是一个通道。驱动直接讲它的协议:

  • Feetech STS/SCS——SO-100 和 SO-101 机械臂。
  • Dynamixel Protocol 2.0——Koch v1.1 和 WidowX。
  • UFACTORY xArm 和 Lite 6,经 TCP 连接。
  • CommandAGI ESP32 机械臂,通过局域网轮询它的主机。

USB 机械臂可以通过 WebSerial 直接从浏览器连接——端口只在你选择它时才会打开。

同一只机械臂的许多淡影,伸向同一个目标。

图版 16 · 同一个目标的四十次够取,在模拟器中叠加显示

先试一百次,再上真机。

试验文件让一个参数——目标点、增益、质量——扫过许多次仿真运行,并逐一记录。在同一条时间轴上比较它们,留下最好的,继续向前。

一只手放在触控板上,背后是失焦的机械夹爪。

力拖拽

用鼠标推它。全都有记录。

在仿真世界中抓住任意物体并拖动。你施加的力会署上你的名字写入运行记录,所以你亲手加入的扰动,回放起来和其他一切一样精确。

图版 17 · 一只手放在触控板上,轻推一个仿真夹爪

每次运行,都能回放、都能分叉。

一次运行就是一个装着数据流的文件夹,基于同一个时钟。拖动浏览、以四分之一速度回放,或在任意时刻分叉出一次新的仿真运行,恰好从那一刻开始。

runs/reach-tuning/streams/arm-1.servo示例记录 · 仿真
00:00:04.020 note    agent:tuner: run_program reach.trials.json #17
00:00:04.031 command goal j1=31.0 j2=-22.0 j3=64.5 j4=10.0
00:00:04.540 state   j1=30.9 j2=-22.1 j3=64.4 j4=10.0
00:00:05.002 event   person:ana: drag gripper f=(0.0, 1.8, 0.0) N
00:00:05.300 state   j1=31.4 j2=-20.8 j3=63.2 j4=10.0
00:00:06.100 note    person:ana: fork @ 00:00:05.002

权限

智能体掌控操作,但不越过你的边界。

给智能体一份长期授权:一只机械臂、一个世界、一个下午。它会实时使能机械臂并发送目标位姿。已使能的机械臂闲置五分钟会自动解除使能,而停止和关闭扭矩始终允许。

验证

已对照协议测试。尚未上你的台架。

机械臂驱动的验证程度是 loopback:针对每种舵机协议的忠实软件替身进行测试。目前还没有一个在真实机械臂上完成调试投用。一旦完成,它的驱动会如实标明——在那之前一刻也不会。

从仿真世界开始。

打开工作台,打开一个带机械臂的仿真世界,拖着它到处动一动。不需要硬件,也不需要授权。