仿真里 95% 成功的机器人,到了现场为什么突然不会了?很多差距从编码器开始

首发于公众号「如是有为」 · 查看原文

仿真里 95% 成功的机器人,到了现场为什么突然不会了?很多差距从编码器开始

最近看到一张图,很扎眼。

仿真里 95% 成功的机器人,到了现场为什么突然不会了?很多差距从编码器开始

左边写着:95% in simulation。右边写着:95% in reality。中间一个大大的“不等于”。

图里给出的解释很典型:仿真有理想光照、已知物体、干净的物理模型和可预测环境;现实里却有传感器噪声、摩擦系数变化、软物体和各种意外情况。

这些当然都对。

但我是做磁传感器芯片和编码器的,看见里面那个 Sensor noise,反而觉得写得太轻了。

机器人从仿真走到现实,传感器带来的麻烦,往往根本不是“多了一点噪声”这么简单。

真正麻烦的是:仿真里的角度,和机器人现场控制器拿到的角度,可能根本不是同一个东西。

仿真给控制器一个角度,现实给控制器一条误差链

很多机器人仿真里,关节的位置反馈本质上非常简单。

模型算出关节在什么位置,就把这个位置直接送给控制器:

θ̂ = θ

做得稍微真实一点,也就是在上面加一点随机噪声:

θ̂ = θ + n

但一颗真实编码器装进机器人以后,更接近下面这个东西:

θ̂(t) = θ(t − τ) + e(θ,T,B,g) + n(t)

看起来只是多了几个量,工程上却完全是另一回事。

τ 是采样、数字滤波、角度计算、SPI 传输、总线排队和控制器读取造成的时间差。

e 里面可能装着磁铁偏心、倾斜、气隙变化、谐波、温漂、杂散磁场、封装应力,甚至旁边钢制结构件带来的磁场畸变。

最后那个 n(t),也就是大家最喜欢在 Sim-to-Real 文章里说的“sensor noise”,反而可能是这里面最好处理的东西。

白噪声很好模拟。

有规律、会随工况变化、还和机械以及时间轴耦合的误差,才难。

真正容易把闭环搞坏的,往往不是 0.1°,而是“这 0.1° 属于什么时候”

这个问题我在编码器项目里反而越来越在意。

假设编码器角度本身非常准,但是这帧数据晚了 100 μs。

对于静止的位置测量,这几乎没有影响。但只要轴在转:

Δθ = ωΔt

比如电机轴是 3000 rpm,也就是每秒 50 圈。100 μs 对应的角度已经是:

360 × 50 × 100 × 10−6 = 1.8°

这时候你再告诉我编码器静态精度是 ±0.05°,意义就开始变得微妙了。

因为控制器真正使用的并不是“一个很准的旧角度”,而是把这个旧角度当成了现在的角度。

更麻烦的是,固定延迟还相对好处理。假如永远晚 100 μs,控制器至少还有机会补偿。真正难受的是:这一帧 60 μs;下一帧 120 μs;再下一帧 90 μs。

这已经不只是 latency,而是 time jitter。

而机器人仿真里最容易被忽略的,恰恰就是这个时间轴。

数值是对的,时间却是错的。

编码器装上机器人以后,误差也不再是实验室里的误差

还有一个仿真里很难自然出现的问题:安装。

实验台上测一颗磁编码器,可以把磁铁装得很正,把气隙控制得很好,环境温度也比较稳定。

装进真正的关节以后,情况马上变了。

磁铁有偏心。轴有跳动。气隙随着装配公差改变。电机就在旁边。减速器、轴承、螺钉里还有大量铁磁材料。

关节从冷机二十几度一路跑到六七十度以后,磁铁、芯片、PCB 和机械结构又不是按照同一个系数膨胀。

这时候编码器误差不是简单地“整体多了 0.2°”。它可能随着角度出现二次、四次甚至更高次谐波;可能只有某几个机械位置特别差;也可能冷机正常,热机以后零点和幅值一起慢慢漂。

这种误差拿一个 Gaussian Noise 塞进仿真里,是模拟不出来的。

因为它不是随机误差。

它是结构化误差。

而结构化误差最大的特点就是:控制算法可能会“学会它”。这才是 Sim-to-Real 很麻烦的地方。

仿真里 95% 成功的机器人,到了现场为什么突然不会了?很多差距从编码器开始

机器人在仿真里学到的,可能是一个现实中不存在的传感器

如果强化学习、模仿学习或者控制算法训练时,一直拿到完美的关节角度,它实际上默认了一件事:传感器是真值源。

但现实里没有这样的传感器。

现实中的编码器有分辨率、有延迟、有周期误差、有温漂,也有安装边界。

所以我现在看机器人 Sim-to-Real,有一个判断越来越强:

不要只问物理模型像不像现实,还要问传感器模型像不像现实。

如果做机器人仿真,我宁愿在编码器模型里主动放进去几类东西:量化误差、周期性 INL、偏心产生的低次谐波、温度相关零点漂移、固定延迟、帧间 jitter、偶发丢帧、安装气隙变化、杂散磁场扰动。

不需要把真实世界每个细节都模拟出来。

关键是把那些会改变闭环行为的误差带进去。

95% 本身没有错,错的是把两个 95% 当成了同一个数字

所以那张图真正值得讨论的,其实还不是“仿真 95%,现实可能只有 12%”。图里的 12% 更像一个示意,并不是说所有机器人都会从 95% 掉到这个数字。

真正的问题是:两个成功率背后的输入分布已经变了。

仿真里的机器人面对的是一个世界。真实机器人面对的是另一个世界。

而编码器、视觉、触觉、力传感器,恰好就是这两个世界之间的入口。

所以我现在越来越觉得,Sim-to-Real 最值得补的一课,并不是继续把仿真画面做得更真实。

而是认真检查:

机器人在仿真里看到的“现实”,到底是经过什么传感器看到的。

仿真里的编码器直接给你角度。

现实里的编码器给你的,是一个带着温漂、偏心、磁场、安装误差和时间戳的角度。

这两者之间的差距,可能才是很多机器人真正昂贵的那一段。

应作如是观
公众号「如是有为」二维码

关注公众号「如是有为」

微信扫一扫,新文章先在公众号发出。