1. 导言
真正的机器人竞赛,包括人形机器人联盟,通常强调低水平机器人控制挑战。另一方面,RoboCup 2D模拟平台强调了高水平的团队战略挑战。本文重点介绍了RoboCup 3D仿真平台,该平台将这些低层次和高层次的挑战整合在一起。
三维仿真领域优点:
1.避免犯错的高成本
2.避免在现实世界中测试新技能时发生的相对缓慢的反馈循环
3.能够在人的运动约束下测试高水平的团队策略
重大挑战:设计既快速又稳定的步行
重点研究:
1.全方位步行智能体和相关步行参数优化框架
2.基于踢踏结构的自动优化逆运动学
3.动态角色分配和定位系统
2. 领域描述
RoboCup 3D仿真环境基于通用物理多智能体系统模拟器 SimSpark。SimSpark利用Open Dynamics Engine(ODE)库对刚体动力学进行了碰撞检测和摩擦的真实模拟。ODE还为用于仿人智能体的先进机动铰链接头的建模提供了支持。
Aldebaran Nao机器人:
高度约为57cm,质量为4.5kg,有22个自由度:每条腿6个,每只手臂4个,脖子2个
最新的赛制加入了异构要求,需要使用三种不同类型的机器人,它们的区别在于手和腿的长短各不相同。并且出现了一种拥有脚趾的机器人,更加符合现实世界里的比赛情况,但也对机器人建模、行为模拟以及参数调整提出了更高的要求
智能体配备: 噪音加速度计,陀螺仪感知器,脚底的力阻感知器, 联合感知器以及联合效应器
联合感知器:智能体提供每个模拟周期 (20毫秒)的无噪声
角度测量
联合效应器:允许智能体指定移动接头的扭矩和方向
智能体可以通过发送限制在20字节的消息,每隔一个模拟周期(40ms)相互通信。
3. 智能体架构
机器人定位自己:使用粒子过滤器
判断摔倒:使用加速度计读数
通信:使用听觉通道
在最低水平,人形是通过指定每个关节的扭矩来控制的。这是通过PID控制器对每个关节实现的,它以关节的期望角度作为输入,并计算适当的扭矩。
逆运动学:通过把整个腿关节角度的运动学逆解,得到脚和腰部的位置,
进而计算脚的轨迹,使其准时到达所需位置
智能体的一些技能:假摔(diving)、下降、从下降位置上升、踢腿等
4.
5.KICK引擎
Kick是敏捷的,稳健的,通用的,并且易于和简洁的可参数化。 敏捷是指迅速地射门。 稳健需要准确和强大的射门。 通用性是指能够从球的多个起始位置向多个方向踢。 参数化准则有助于学习优化kick。
5.1 KICK引擎实现
首先,选择一个kick,然后代理接近球,一旦距离球足够近,它就会将重量转移到支撑脚上,并计算执行所需kick需要的kick轨迹。在kick过程中的每个时间步骤,kick引擎插值踢腿技能文件中定义的控制(方式)点,以在笛卡尔空间生成脚的目标姿势。最后,IK解算器计算kick所需的关节角度,并将这些角度反馈给关节PID控制器。图3说明了kick引擎的程序流程。
5.1.1选择踢法和球法
当代理接近球时,它必须决定尝试哪种类型的kick(第5.1.6节描述了选项)
5.1.2 动态计算kick轨迹
一旦代理人在准备踢球时转移了它的重量,它注意到球相对于自己的位置(特别是它的躯干,腿部运动链的根部)。这个偏移量被添加到kick skill文件中的控制点中,以动态计算脚相对于代理躯干的精确曲线。
5.1.3 插值kick轨迹
Kick skill文件还定义了脚在每个控制点的欧拉角度(滚动、俯仰和偏航),这些角度是线性插值的。
5.1.4 kick逆运动学
对于逆运动学计算,我们使用Open-RAVE[7]的解析逆运动学解算器。OpenRVIK求解器可以处理XML中定义的任意正向运动链,并产生快速的逆解运动的C++源代码。
5.1.6定向kicks
代理可以动态地将球踢向与球在和的位置有关的不同方向。
5.2 kick优化
我们可以通过CMA-ES优化踢距和速度的路径点(每次kick有3到5个)。这样我们就可以通过简单的曲线定义多个方向踢,因为我们不必花费大量时间来调整每个方向踢,并且可以创建粗糙的路径来引导代理kick的初始种子。
为了学习kick的参数,我们设置了一个优化任务,在这个任务中,代理沿着球的半圆弧从十个不同的角度接近球,并试图将球踢向特定的目标。正在优化的参数是定义kick曲线的路径点的XYZ和RPY值、kick中脚在曲线中移动的速度,以及在kick进近过程中要向球移动的目标偏移量。一个球员的适应度是由球在所有试射中向目标移动的平均距离来衡量的。在这个过程中球员如果摔倒,撞到球,或者在10秒后不能踢到球,球员就会被罚-1分,处罚球员踢球时间过长可以提高球员的敏捷性,同时让球员从多个角度接近球,处罚球员摔倒可以提高球员的稳健性。
5.3 Kick Performence
我们期望我们的kick系统能对代理的性能有一个实质性的增益。Kick系统已经显示出了一些潜力,在运球方面不如我们目前的行走有效。
6.动态角色分配和位置选择系统
#### 队伍组成
* onBall: 永远是离球最近的球员
* 进攻组包括forwardRight, forwardRight, stopper, wingLeft, wingRight,每个角色距离球的偏移固定,如果球靠近边线则应调整这些偏移以防球员跑出球场
* 防守组包括backLeft, backRight,这两个球员的位置永远处于球到球门的连线上,分别距离底线一定长度
* 守门员的位置选择独立于所有队友。如果守门员被判定为onball,则在防守组中再加一个角色goalie,并将一名球员分配到这个角色上站在门前
#### 角色分配
* 为每一个位置固定分配一个球员的作法会导致防守失位,因此需要指定一个角色分配函数,输入当前的球场状态,输出从球员到角色的一一映射
* 角色分配函数的两个假设
* 任何两个球员/两个角色的位置不重合
* 球员沿一条直线匀速运动到角色应在的位置
* 角色分配函数必须满足的三个性质:满足这三个性质的角色分配函数被称为“有效的”
* 球员到目标位置的距离最短
* 球员运动到目标位置的路途中不会相互碰撞
* 动态一致性:角色分配函数一旦输出了球员到角色的映射,在球员前往自己对应角色的路途中,函数的输出不能变
* 构造一个有效的角色分配函数
* 定义一个球员-角色一一映射的cost为n个元素的元组(n为球员数量),其中包括降序排列的每个球员到目标位置的距离。对比两个cost时按照字典序对比(类似奥运奖牌榜的对比规则)。
* 可以证明,永远输出cost最小的球员-角色一一映射的角色分配函数$f_v$是“有效的”
* 角色分配动态规划算法
* 共有8个球员,穷举$8!=40320$种球员-角色映射可行,但由于每个决策周期(0.02s)都要计算一次,因此穷举法时间复杂度过高
* 动态规划算法伪代码:
![image-20220111145823387](C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220111145823387.png)
* $(^{n-1}_{k-1})$就是$C_{n-1}^{k-1}$
* 算法原理是,每次最外层循环基于将k-1个球员映射到${p_1,...,p_{k-1}}$的最佳映射(保存在映射集合bestRoleMap中,bestRoleMap[s]表示球员集合为s时的最佳映射)来计算将k个球员映射到$p_1,...,p_k$的最佳映射。计算方法是,穷举每一种不含某球员a的k-1个球员的集合S(这样的穷举需要两重循环,一重遍历a,另一重遍历不含球员a的集合S),构造一个新映射$(a\rarr p_k) \cup bestRoleMap[S]$,所有新映射中cost最小的一个即为将k个球员映射到${p_1,...,p_{k}}$的最佳映射
* 论文中还给出了动态规划算法有效性的证明
* 8个球员时动态规划算法每个决策周期只用计算$\sum\limits_{k=1}^8C_{7}^{k-1}=1024$种映射,较穷举法40320减少很多
* 角色分配的效果验证:创建分别采用除守门员外全员冲向球、球员到角色采取固定映射、进攻组只用两个球员、动态分配角色四种战略的队伍,相互比赛,最终动态分配角色的队伍成绩最佳,进攻只用两个球员的防守战略次之。