3 起床程序的优化

重要的技能:摔倒后从俯卧位站起来的能力

get up routine(起床程序):通过一系列的姿势迭代,在预先指定的时间段后从一个姿势过渡到另一个姿势。姿势由一系列指定的关节角度决定。

可以通过一系列时间间隔和一组关节角度来数值参数化起床程序。在2011年的比赛中,这些数值是手动选择和调整的。在2012年的比赛中,通过机器学习优化了起立程序的参数。

3.1 跌倒检测和起身动作

跌倒检测:

判断条件:加速计显示重力向与躯干不平行的方向拉动时,机器人检测到它没有直立。

  1. 机器人将手臂向外伸向侧面成90度角。
  2. 机器人会暂停0.7秒,然后确定坠落方向。
  3. 代理继续进入两个起床程序之一(取决于它是仰卧还是趴着)

起身动作:

用手臂向上推动

机器人将手臂前倾并收缩双腿,使重心位于脚前方

利用初始推力产生的动量,机器人设法进入下蹲姿势

机器人可以通过伸展膝盖和臀部‘

站起来

3.2 优化过程

CMAES是一种策略搜索算法,它连续地生成和评估从多元高斯分布抽样的候选集。一旦CMA-ES生成一组候选对象,将根据适合度度量对每个候选对象进行评估。当对组中的所有候选对象进行评估时,将重新计算多元高斯分布的平均值,作为拟合度最高的候选对象的加权平均值。分布的协方差矩阵也被更新,以使下一组候选的生成偏向于先前成功的搜索步骤的方向。

优化参数:

方法:将机器人强制下落,然后测量机器人起立所需的时间。

衡量标准:它需要多长时间才能站起来和它站立后的稳定性(以它倒下的可能性来衡量)

具体的方法:

  1. 机器人1秒的时间来确保它是稳定的
  2. 它被迫向后倒
  3. 设置hasfalled标志(当不是直立位置时)
  4. 起床程序结束后,若直立,清除hasfalled,否则继续进行起床程序

HasFalls旗帜为真实所花费的时间

举例:如果它跌倒一次,2.5秒后站起来,并保持不动,它的适应度是-2.5。

在迫使机器人倒下后,评估运行4秒钟,然后结束。如果机器人在2秒内站起来,但是不稳定,并且在站起来一秒钟后又摔倒了,那么它的适应度将是-3。

惩罚随后的跌倒有助于确保起床的程序是稳定的。

一个完整的评估试验包括七次摔倒和随后的起身,每次起身后,机器人会做以下动作之一:向前走、向后走、向左走、向右走、向左拐、向右拐或静止。所有七项评估的平均值给出了一项试验的适应度得分。

3.3 优化结果

4.1几种踢球

踢球时重量集中在支撑腿上,抬起踢球退,向后拉,然后向前摆动击球。

论文中几个名词的解释:

KickLong:踢的球最远,通常用于开球,球的高度很高以至于对方球员无法阻挡,踢完后球员自己会倒地。

KickMedium:踢的也远,但是不会摔倒,通常用于踢任意球及常规比赛,开球需要2s以上的时间,因此要求对手在开球前至少保持2.5米的距离。

KickQuick: 踢球速度要快得多,因为它与球接触的时间不到一秒钟。KickQuick的设计目的是在对手接近时快速踢出球,平均来说,它能在球上获得足够的高度,将球击过接近对手的头部。KickQuick只要求距离最近的对手在开始踢之前至少1.0米远。像KickLong一样,KickQuick会破坏代理的稳定性,并导致代理在kick结束时摔倒。

以上踢球方式的缺点:需要相对于球的精确的定位。

4.2逆运动学(相对于球的路径来踢球)

逆运动学可以不用很精确地定位,这个方法是定义一个相对于球的路径,机器人的脚在踢球时应该遵循该路径,然后使用反向运动学沿该路径移动脚。通过这种方法获得的主要优势是,一个球能够适应球的位置,因此不需要由一个代理精确定位来排列踢。

【图】相对于球的航路点,用于定义基于反向运动学的踢腿的脚的路径。(1) 把腿抬到球后中心。(2) 把腿从球上拉回来。(3) 把腿放回球的位置。(4) 踢穿球。

如图中所述,UT Austin Villa团队通过指定脚要穿过的球的相对路径点,构建了一个基于反向运动学的踢(KickIK),然后使用三次Hermite样条曲线在这些点之间插值,以确定踢过程中脚的路径轨迹。图中显示了向前踢的相对航路点。使用OpenRAVE的运动学解算器计算代理的反向运动学。

4.3踢球

除了踢腿运动本身,机器人在执行踢腿之前如何将自己定位在球的附近可能是成功击球的最关键部分。当排队踢球时,UT奥斯汀维拉的经纪人首先接近球后的目标位置进行踢球。

在距离目标位置垂直和平行于球的向量都在该目标位置的特定距离阈值内之前,代理不允许继续踢球。在执行踢之前,代理也必须在朝向球的设定角度阈值内。

当反向运动学计算确定机器人的脚可以沿着曲线到达所有必要的点来踢穿球时,2011年代理的踢就被触发了。在2011年的比赛之后,人们发现使用反向运动学计算作为何时踢腿的触发器对于移动机器人来说是有问题的。这是由于机器人的动量导致其身体相对于球的位置和方向在决定踢球后立即改变。这些位置和方向的变化,虽然通常很小,但足以阻止机器人的脚能够够到球,并迫使机器人在中止踢腿后重新定位自己。

4.4优化(机器学习)

当优化开球参数时,球被放在场地的中心,经纪人被放在球后1.5米处(或者在开球的情况下直接放在球的后面,只要它只用于开球),被要求向前走,把球踢向对手球门的中心。一个经纪人被给予一个奖励,奖励他能将球向前踢多远(distForward)。为了提高准确度,球被踢到任意一边的距离也会受到轻微的惩罚(远侧)。此外,由于在球后快速定位很重要,以便在对手靠近前将球踢出,因此将对定位踢出的时间(时间定位)进行处罚。下面的公式给出了代理在执行踢时获得的奖励(其中距离以米为单位,时间以秒为单位):

奖励=distForward−0.75∗distSideways−timePositioning/8.0

如果在定位踢球时,经纪人撞到球,导致球从起始点移动超过0.3米,则给予-1的奖励。这样做是为了确保代理在优化过程中不作弊,在踢球前向前运球以获得额外的距离。此外,如果代理在尝试踢腿时摔倒,并且在完成踢腿(KickMedium和KickIK)后保持稳定,那么代理在踢腿时会得到-1的奖励。

4.5优化结果

【表格1】
UT Austin Villa不同踢脚的优化结果如表1所示。

2012年学习了六个额外的参数,用于调整支撑(非踢腿)腿的关节角度。将这些参数添加到优化中,优化的参数数量从18个增加到24个,大大提高了性能,因为踢距比2011年的5.3米踢距增加了一倍多。允许球员在踢完球后摔倒,使得球员的表现进一步提高了1米左右,因为这样可以让球员向球投掷身体。

KickMedium和KickQuick是由KickLong的同一个种子设计的,只是它们的一些运动框架被加速或移除,以使踢得更快。由于KickQuick的种子踢腿速度必须大幅调整,以使其踢腿速度比原来的2011踢腿种子速度快两倍,因此踢腿上所有可能的关节角度都被打开进行优化,从而使优化的参数数量比KickLong和KickMedium的参数数量增加了一倍以上。KickMedium和KickQuick的踢距都经过了优化,远远超过了2011年的踢距。

虽然KickIK在所有踢腿中距离最短,但它起步最快,而且由于使用了反向运动学,因此通常比固定姿势关键帧踢腿更健壮。此外,由于反向运动学允许踢球调整到不同的球位置,因此球后定位的优化阈值可以大于固定姿势关键帧踢球的阈值,从而允许更快的踢球定位。KickIK所需的定位时间明显快于使用2011年基于反向运动学的kicks所需的定位时间。这是由于2011年踢使用反向运动学计算,而不是距离和角度阈值作为触发何时踢。

值得一提的是,虽然很多踢腿都有很高的高度,这对踢倒对手很有好处,但高度从来都不是最适合的。优化距离的结果是球在空中被踢,因为它能够在空中飞行时走得更远,而地面没有摩擦使它减速。

5.动态定位

随着球队规模在 2012 年从 9 人增加到 11 人,UT 的基本阵容中增加了两个新的角色:后卫和中场。两个角色的位置,如图 3(a)所示,保持在从球门中心到球的直线上。守门员维持在球门和球之间保持 1/3 的位置,而中场在球门和球之间保持 2/3 的位置。

简单来说就是把球和己方球门连线然后按三等分点放置守门员和中场。

UT 还创造了一个更具进攻性的阵型,旨在利用第 4 节中描述的新的更长的一种踢法这个阵型,如图 3(b)所示,用一个向前进攻中心的球员代替了阻挡方的球员,这个球员在球的 5 米之外就绪,保持从球到对手球门中心的一条线。中间的球员被向后撤到球门和球之间的中间位置。这种阵型的一个关键特点是对这种特殊踢法的预告,即一个试图踢球的球员提醒他的队友球将要被踢到的目标位置。把目标位置广播给左右前锋?让他们移动到目标位置进一步组织进攻。

UT 使用了文献[7]中描述的动态角色和队形定位系统来定位球员。该系统在其基础上,将球员分配到预先计算好的角色位置,以避免球员直接冲突,并使所有球员所需的最长移动距离最小化。定位系统与 2011 年比赛中使用的定位系统类似,但升级了[7]中列出的进步功能:使用路径成本并将supporter(以前在[7]中称为stopper)的任务分配给最近的球员。

当考虑将球员分配到相应任务时,有 n!种可能的组合。使用动态规划,定位系统只需要评估 n2n−1个球员到指定位置的分配情况,以便计算最优分配。然而,随着 2012年竞争双方从 9 个球员增加到 11 个球员,算法的可延展性成为一个问题,因为所有计算必须在 20 毫秒内执行。(注:可以理解为服务器轮询周期为20ms)由于守门员的位置在2011年只有n=8个 或者说 1024 个组合需要计算,而在 2012 年,增加到 n=10 或 5120 组合。尽管 2011 年只需要 3.3 毫秒来计算定位,但 2012 年的定位计算由于计算量增加了 5 倍,占用了球员分配的大部分处理时间,其他功能模块几乎没有时间进行必要的计算。

为了防止定位系统使用太长时间设置了一个自我监控机制,其中记录系统代理计算定位角色分配所花费的时间以及分配给角色位置的代理数 n。如果定位系统的运行时间超过最大时间(设置为 10ms),则代理将通过设置maxN=maxN−1(类似深度优先搜索的最大深度)来减少定位系统允许评估的最大代理数(maxN)。或者,如果定位系统完成所需的时间小于 MAX TIME/2,则通过设置maxN=maxN+1 来增加允许评估定位的代理数。当 maxN 小于需要定位的 n 个代理数时,距离球最远的 n-maxN 个代理贪婪地分配到最近的角色位置。贪婪地将离球最远的球员分配给可能不太理想的角色位置分配的直觉是,与离球较近的代理相比,它们对游戏性能的影响较小。通过监控定位系统的运行时间,并减少花费太长时间的计算量该系统可以扩展到不同数量的代理还可以动态地适应具有不同处理器和不稳定CPU 负载的计算机。

UT2012学习笔记相关推荐

  1. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  2. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  3. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  4. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  5. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  6. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

  7. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  8. Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)

    Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...

  9. MongoDB学习笔记(入门)

    MongoDB学习笔记(入门) 一.文档的注意事项: 1.  键值对是有序的,如:{ "name" : "stephen", "genda" ...

  10. NuGet学习笔记(3) 搭建属于自己的NuGet服务器

    文章导读 创建NuGetServer Web站点 发布站点到IIS 添加本地站点到包包数据源 在上一篇NuGet学习笔记(2) 使用图形化界面打包自己的类库 中讲解了如何打包自己的类库,接下来进行最重 ...

最新文章

  1. Mysql中NUMERIC和DECIMAL类型区别比较
  2. 模板—主席树(待修改)
  3. shell脚本之for循环
  4. 2021暑假实习-SSM超市积分管理系统-day08笔记
  5. Intent中各种常见的Action
  6. 关于Spring中IOC容器和AOP协同工作的原理理解
  7. qt designer 自定义插件找不到指定的模块_go与qt的新酒老瓶
  8. 负载均衡的几种算法Java实现代码
  9. python中给变量赋值时、既确定了变量的值_python中将函数赋值给变量时需要注意的一些问题...
  10. Tinymce4 中Ajax多次加载时,会出现菜单在第二次进入时,显示的下拉菜单在左上角...
  11. WIFI实践入门--基本命令--iwconfig
  12. 【大学物理】第一章:质点运动学
  13. 【转】死链-百度百科
  14. 合计函数(统计函数)
  15. C语言深度剖析——关键字sizeof、整型数据存储深入、数据类型取值范围深入
  16. Android studio实现动态背景页面(动态视频为背景)
  17. (二) OGNet 论文笔记
  18. 【c语言】c语言的自动类型转换和强制类型转换
  19. 【微服务】Spring Cloud 基础
  20. uploadify API (转)

热门文章

  1. iOS-图文混排方案-2种方案
  2. torch.chunk
  3. go包管理之vender机制
  4. Python code on Sliced Inverse Regression ( SIR ) and Sliced Average Variance Estimates ( SAVE )
  5. 人民的名义关系可视化展示
  6. Sumatra PDF 缩放设置
  7. 如何开好项目验收会?
  8. 时间转换中的夏时制问题
  9. 苹果iPhone手机怎么恢复备份?详细iOS备份怎么恢复教程
  10. Nuxt开发中The client-side rendered virtual DOM tree is not matching server-rendered content.的问题