本篇论文的目的是控制机械臂在组件装配精度高于机器人控制精度的情况下实现轴孔的装配。本文使用双层LSTM网络结构来作为状态-行为价值函数Q的近似,输入为机械臂的力-力矩传感器反馈信号以及机械臂末端的近似位置,输出为机械臂末端三个轴上施加的力与两个方向上姿态的旋转角度。从演示视频来看效果还是很不错的。
该论文实验中有一个前置条件:假设轴已经被抓且与孔板相接触。那么这篇论文其实就是分两步走:一是运动到已知的孔中心点处,二是进行插入装配。总体来说所提出方法较为简单,仍然是那个DQN,实验的前置条件也较为严格。但不管怎样算是使用RL方法解决了超精密装配的问题。
Introduction
背景:
- 机械部件的高精度装配要求精度超过机器人精度;
- 经典的编程方法是通过使用称为“示教器”的控制盒来定义关键位置和运动,从而教导机器人执行工业装配任务。 这种在线编程方法通常是繁琐且耗时的。 即使在编程之后,由于环境变化,调整用于将机器人部署到新工厂线的参数也需要很长时间;
- 离线编程或模拟可以减少实际机器人的停机时间,但总体上可能需要比在线编程更长的时间,包括在机器人上开发模拟和测试的时间。 很难在仿真模型中以100%的准确度来表示包括环境变化在内的现实世界;
- 相机和编码器对于使用RL进行机器人抓取任务的十分重要,但这些方法都不能直接应用于高精度工业应用。
本文未使用超精密的力-扭矩传感器或摄像机,仅使用了工业机器人中普遍存在的力和位置传感器。
Problem Formulation
选择高精度圆柱形桩孔作为力控机器人装配的目标任务。 这项任务大致可分为两个主要阶段:
-
搜索: 机器人将栓钉中心放置在孔中心的间隙区域内。
位置控制器很难将栓钉和孔设置为几十 μ m μm μm的精度,视觉伺服也是不切实际的,因为相机分辨率有限,或在组装期间相机被内部部件遮挡。例如,在传动中啮合齿轮和花键的情况下。在本文中,我们使用一个常见的6轴力 - 扭矩传感器来学习相对于桩位置的孔位置。 -
插入: 机器人调整栓钉相对于孔方向的方向,并将栓钉推到所需位置。
我们将一个挂钉插入一个间隙非常小的10微米的孔中。 即使对于人类来说,这种高精度插入也非常困难。 这是因为人类不能如此精确,并且钉子通常会在插入的最初阶段卡住。 机器人也很难以比其位置精度更紧密的间隙进行插入。 因此,机器人需要学习以使用力 - 扭矩传感器信息执行该精确插入任务。
Reinforcement learning with long short term memory
本文采用了多层LSTM网络来作为状态-行为价值函数Q的近似,网络结构如下所示:
输入为force-torque传感器产生了三个方向的力与两个方向的力矩以及两个方向上的舍入位置坐标
P
~
\widetilde{P}
P
。
定义
P
P
P为通过运动学正解(机械臂关节角度)得到的peg的精确位置。考虑到hole的安装位置也可能存在偏差,为了增强算法对位置误差的鲁棒性,使用下图方法对peg的精确位置进行舍入得到舍入位置
P
~
\widetilde{P}
P
。
hole的中心坐标可能不在所规定的位置
(
0
,
0
)
(0,0)
(0,0)处,引入位置误差
c
c
c,使hole的中心坐标在范围
(
−
c
,
c
)
(-c, c)
(−c,c)内。则当peg坐标值在
(
−
c
,
c
)
(-c, c)
(−c,c)时舍入为0,当值在
[
c
,
2
c
)
[c, 2c)
[c,2c)时舍入为
c
c
c,以此类推。这为网络提供了辅助信息,以加速学习收敛。
模型输出如下,为peg在三个方向上所需施加的力以及peg在两个方向上所需旋转的角度。
只有当
E
p
i
s
o
d
e
Episode
Episode结束时agent才会得到奖励r,若试验成功则给予一个积极的奖励:
r
=
1.0
−
k
k
m
a
x
,
k
∈
[
0
,
k
m
a
x
)
r=1.0-\frac{k}{k_{max}},\qquad k\in[0, k_{max})
r=1.0−kmaxk,k∈[0,kmax)
因此,试验步数越少奖励越大。
若在 k m a x k_{max} kmax步数下无法完成任务,则定义消极的奖励 r r r:
-
对于搜索阶段:
r = { 0 d ≤ d 0 − d − d 0 D − d 0 d > d 0 r=\left\{ \begin{array}{lcl} 0 & & {d \le d_0} \\ -\frac{d-d_0}{D-d_0} & & {d>d_0} \end{array} \right. r={0−D−d0d−d0d≤d0d>d0
d 0 d_0 d0是peg的初始位置, d d d是peg目标位置与当前位置的距离, D D D是安全边界。 -
对于插入阶段:
r = Z − z Z r=\frac{Z-z}{Z} r=ZZ−z
Z Z Z是插入的目标深度, z z z为插入的实际深度。
使用Q-learning强化学习算法,定义损失函数:
L
θ
=
1
2
[
t
a
r
g
e
t
−
p
r
e
d
i
c
t
i
o
n
]
2
=
1
2
[
r
+
γ
max
a
′
Q
θ
(
s
′
,
a
′
)
−
Q
θ
(
s
,
a
)
]
2
L_{\theta}=\frac{1}{2}[target-prediction]^2 =\frac{1}{2}[r+\gamma \max_{a'}Q_{\theta}(s', a')-Q_{\theta}(s, a)]^2
Lθ=21[target−prediction]2=21[r+γa′maxQθ(s′,a′)−Qθ(s,a)]2
参数更新方程如下:
θ
←
θ
+
α
(
r
+
γ
max
a
′
Q
θ
(
s
′
,
a
′
)
−
Q
θ
(
s
,
a
)
)
▽
θ
Q
θ
(
s
,
a
)
\theta\gets\theta+\alpha(r+\gamma\max_{a'}Q_{\theta}(s', a')-Q_{\theta}(s, a))\bigtriangledown_{\theta}Q_{\theta}(s, a)
θ←θ+α(r+γa′maxQθ(s′,a′)−Qθ(s,a))▽θQθ(s,a)
将agent的experiences按先进先出(FIFO)的方式存储到memory pool中,从改数据中随机抽样提供replay events(个人认为这里应该是一次抽取一个有时间顺序的序列)。
为了有效地进行数据采集和学习,该算法使用了两个线程,行为线程与学习线程。
行为线程用于将观察结果存储到replay memory中。
学习线程通过使用重放存储器学习来更新神经网络。
对于复杂的任务,当部分环境状态对代理隐藏时,LSTM可以获得良好的性能。此论文中peg与环境有物理接触,且(接触)状态无法清晰地定义。此外,当我们发出一个动作命令(模型输出的 a a a),机器人控制器解释命令并在下一个周期执行动作。 因此,在发出动作的2个循环之后,可以观察到受机器人实际动作影响的环境。 实验表明,LSTM可以通过考虑感测数据的历史来补偿这种延迟。
Experiments
待补充…