C-LEARN(同时利用施教与知识库)
之前提到的基于示例的方法及基于优化的方法可以看作是这里的铺垫。该方法由MIT交互机器人实验室提出,亦在用最少次数的demonstration达到最好的效果。就是和优化及专家库类的方法比灵活性和快速性,和传统的Lfd方法比简单性。最终使用一次示例,让机器人实现一个之前从未见到过的操作问题。C-LEARN中存在着很多人机交互的操作,这部分的实现方法与Atlas非常相似,都是基于Drake system的。事实上这两伙人有很大的重叠。毋庸置疑,包括遥操作在内的人机交互技术将是未来机器人学一个很大的发展趋势。
C-LEARN的框架分为2部分,一部分从多个示例中学习知识库,另一部分是轨迹规划项,使用SQP求解器求解轨迹规划问题。最后execution时使用一次示例,流程图如下
知识库的索引方式是(object,mode),即目标-模式对,描述的是哪一类的物体,按照什么样的方式去接近(侧面,顶部…),每个索引对应的是一个keyframes序列及每个keyframe之间应该满足的几何约束(执行器的运动应平行或垂直某个轴…),如下图所示:
知识库在学习时,首先由人对每个索引进行多次示例,示例的内容是一系列keyframe,即LfD中的概念,原文中叫做demonstration keyframe。然后使用K-means算法将这些demonstration keyframe进行聚类,生成一个"learned keyframe"。不同于demonstration keyframe,learned keyrame不是一个某个具体的configuration,而是一个configuration的集合,集合中的元素即为被分到一类的示例demonstration keyframe。如下图所示。当集合中点的方差小于某一个设定值时,可以认为这一组demonstration keyframes或这个learned keyframe需要满足某种约束。
对于轨迹优化部分,数学模型为:
(2)
argmin
q
1
,
⋯
 
,
q
k
∑
j
=
1
k
(
q
n
o
m
,
j
−
q
j
)
T
W
(
q
n
o
m
,
j
−
q
j
)
+
q
˙
j
T
W
v
q
˙
j
+
q
¨
j
T
W
v
q
¨
j
subject to
f
i
(
q
1
,
…
,
q
k
)
≤
b
i
,
i
=
1
,
⋯
 
,
m
\begin{array}{l}\underset{q_1,\cdots,q_k}{\text{argmin}}\quad\overset{k}{\underset{j=1}{\sum}}(q_{nom,j}-q_j)^TW(q_{nom,j}-q_j)+\dot q_j^TW_v\dot q_j+\ddot q_j^TW_v\ddot q_j\\ \text{subject to}\quad f_i(q_1,\dots,q_k)\le b_i,i=1,\cdots ,m \tag{2}\end{array}
q1,⋯,qkargminj=1∑k(qnom,j−qj)TW(qnom,j−qj)+q˙jTWvq˙j+q¨jTWvq¨jsubject tofi(q1,…,qk)≤bi,i=1,⋯,m(2)
其中
q
1
,
q
2
,
…
,
q
k
q_1,q_2,\dots,q_k
q1,q2,…,qk指轨迹中一些采样点。
q
n
o
r
m
,
j
q_{norm,j}
qnorm,j指关键点的目标位置与姿态。C-LEARN将该问题转化为SQP进行求解。
q
i
q_i
qi求解完毕后,使用样条插值生成一条连续轨迹。
在真正执行任务(execution)时,人们首先会做一次示范(通过GUI的方式遥控在仿真中操作机器人),然后算法会根据示例的数据与知识库的匹配程度(最简单的,可以使用姿态空间的欧几里得距离来衡量),确定一组keyframe(learned keyframe),已及相对应这组keyframe的约束,这些约束将自动被加入进优化问题中的约束项:
f
i
(
q
1
,
…
,
q
k
)
≤
b
i
,
i
=
1
,
⋯
 
,
m
f_i(q_1,\dots,q_k)\le b_i,i=1,\cdots ,m
fi(q1,…,qk)≤bi,i=1,⋯,m,包括执行器的姿态约束,keyframe之间的轨迹约束,在线生成完整的优化问题(2)。之后系统会直接调用求解器对优化问题进行求解,算出轨迹,送入机器人中执行。
整个框架使用的系统为Drake(后面有时间写写)。该系统由MIT移动机器人组开发,类似于ROS,但是增加了很多求解器,及稳定性分析工具。通过Drake可以调用SNOPT求解器,求解SQP问题。在执行时,还有一些人机交互的成分,每当执行器执行前,GUI会模拟一下执行的效果,由人来决定是让执行器继续执行,还是由人来遥控操作,估计这个功能可能是为他们后面某个大项目做的铺垫。
值得注意的是,对于C-LEARN,示例也是通过GUI的方式实现的,人通过Drake交互界面只操作末端执行器,如下图所示,然后Drake中的IK引擎会解算出其他关节的角度,作为仿真生成的数据,以此实现基于GUI的示例。